smbhash 1.0.0 → 1.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d7b93a8b9b4f1b744c3f4a99314abfe80a866f1166f06e6fa7d8236c25aff912
4
+ data.tar.gz: 3c82cba464ba68385101176bc9487457eb944157a379a94805ea7fa6dff3471a
5
+ SHA512:
6
+ metadata.gz: 7cf52ded8f867a7195f6b2cc1af017acc44d671a5c586803a98c7ffa1ec0e6054503ed245db5a51389ed47e5f65623ff62043cfa180470192448c99b755ad8a6
7
+ data.tar.gz: 2acd0267b5165fad365bb50cfb9591fdc330444f1d4c63d74df8dd0e4c1cfd4394727d796bea12430e481d3e02eedac8040d9532b0258b273c8a232880852f73
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg
2
+ .bundle
3
+
data/.travis.yml CHANGED
@@ -1,10 +1,11 @@
1
1
  language: ruby
2
- script: rake test
2
+ script: bundle exec rake spec
3
3
  rvm:
4
4
  - ruby-head
5
+ - 3.1.2
6
+ - 3.0.4
5
7
  - 2.1.1
6
8
  - 2.0.0
7
9
  - 1.9.3
8
10
  - 1.9.2
9
11
  - 1.8.7
10
-
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
data/Gemfile.lock ADDED
@@ -0,0 +1,29 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ smbhash (1.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.2.5)
10
+ rake (10.2.2)
11
+ rspec (2.14.1)
12
+ rspec-core (~> 2.14.0)
13
+ rspec-expectations (~> 2.14.0)
14
+ rspec-mocks (~> 2.14.0)
15
+ rspec-core (2.14.8)
16
+ rspec-expectations (2.14.5)
17
+ diff-lcs (>= 1.1.3, < 2.0)
18
+ rspec-mocks (2.14.6)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ rake
25
+ rspec (~> 2.14)
26
+ smbhash!
27
+
28
+ BUNDLED WITH
29
+ 2.1.4
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # ruby-smbhash
2
2
  [![Build Status](https://travis-ci.org/krissi/ruby-smbhash.svg?branch=master)](https://travis-ci.org/krissi/ruby-smbhash)
3
+ [![Gem Version](https://badge.fury.io/rb/smbhash.svg)](http://badge.fury.io/rb/smbhash)
3
4
 
4
5
  ## Description
5
6
  ruby-smbhash is a implementation of lanman and nt md4 hash functions for use in Samba style smbpasswd entries. It was stripped from ActiveSambaLDAP (http://asl.rubyforge.org/activesambaldap/)
@@ -10,18 +11,20 @@ ruby-smbhash is a implementation of lanman and nt md4 hash functions for use in
10
11
  * MRI 1.9.3
11
12
  * MRI 2.0.0
12
13
  * MRI 2.1.1
14
+ * MRI 3.0.4
15
+ * MRI 3.1.2
13
16
 
14
17
  ## Usage
15
- require 'samba/encrypt'
18
+ require 'smbhash'
16
19
 
17
- Samba::Encrypt.lm_hash "password"
18
- => "E52CAC67419A9A224A3B108F3FA6CB6D"
20
+ Smbhash.lm_hash "password"
21
+ # => "E52CAC67419A9A224A3B108F3FA6CB6D"
19
22
 
20
- Samba::Encrypt.ntlm_hash "password"
21
- => "8846F7EAEE8FB117AD06BDD830B7586C"
23
+ Smbhash.ntlm_hash "password"
24
+ # => "8846F7EAEE8FB117AD06BDD830B7586C"
22
25
 
23
- Samba::Encrypt.ntlmgen "password"
24
- => ["E52CAC67419A9A224A3B108F3FA6CB6D", "8846F7EAEE8FB117AD06BDD830B7586C"]
26
+ Smbhash.ntlmgen "password"
27
+ # => ["E52CAC67419A9A224A3B108F3FA6CB6D", "8846F7EAEE8FB117AD06BDD830B7586C"]
25
28
 
26
29
  ## Credits
27
30
  * ActiveSambaLDAP project for sharing the code
data/Rakefile CHANGED
@@ -1,11 +1,8 @@
1
1
  $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
2
 
3
- require 'rubygems'
4
- require 'rake/testtask'
3
+ require 'bundler/setup'
4
+ require "rspec/core/rake_task"
5
+ require "bundler/gem_tasks"
5
6
 
6
- Rake::TestTask.new do |t|
7
- t.libs << "test"
8
- t.test_files = FileList['test/test_*.rb']
9
- t.verbose = false
10
- end
7
+ RSpec::Core::RakeTask.new
11
8
 
data/lib/smbhash.rb CHANGED
@@ -6,10 +6,8 @@ module Smbhash
6
6
  dos_password = Private.convert_encoding("ISO-8859-1",
7
7
  encoding || "UTF-8",
8
8
  password.upcase)
9
- if dos_password.size > 14
10
- warn("password is truncated to 14 characters")
11
- dos_password = dos_password[0, 14]
12
- end
9
+ fail ArgumentError, 'Password must be < 14 characters in ISO-8859-1' if dos_password.size > 14
10
+
13
11
  Private.encrypt_14characters(dos_password).unpack("C*").collect do |char|
14
12
  "%02X" % char
15
13
  end.join
@@ -19,9 +17,9 @@ module Smbhash
19
17
  ucs2_password = Private.convert_encoding("UTF-16LE",
20
18
  encoding || "UTF-8",
21
19
  password)
22
- if ucs2_password.size > 256
23
- raise ArgumentError.new("must be <= 256 characters in UTF-16LE")
24
- end
20
+
21
+ fail ArgumentError, 'Password must be < 255 characters in UTF-16LE' if ucs2_password.size > 255
22
+
25
23
  hex = OpenSSL::Digest::MD4.new(ucs2_password).hexdigest.upcase
26
24
  hex
27
25
  end
@@ -37,7 +35,7 @@ module Smbhash
37
35
  module_function
38
36
 
39
37
  case RUBY_VERSION
40
- when /^1\.9/, /^2/
38
+ when /^1\.9/, /^2/, /^3/
41
39
  require "smbhash/methods19"
42
40
  extend Methods19
43
41
  when /^1\.8/
data/smbhash.gemspec CHANGED
@@ -1,11 +1,11 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.platform = Gem::Platform::RUBY
3
3
  s.name = 'smbhash'
4
- s.version = '1.0.0'
4
+ s.version = '1.1.0'
5
5
  s.license = 'MIT'
6
6
  s.summary = "Lanman/NT hash generator"
7
7
  s.description = "An implementation of lanman and nt md4 hash functions for use in Samba style smbpasswd entries"
8
- s.homepage = 'https://github.com/krissi/ruby-smbhash'
8
+ s.homepage = 'https://krissi.github.io/ruby-smbhash/'
9
9
  s.author = 'Christian Haase'
10
10
 
11
11
  s.files = `git ls-files`.split($/)
@@ -16,4 +16,5 @@ Gem::Specification.new do |s|
16
16
  s.required_ruby_version = '>= 1.8.7'
17
17
 
18
18
  s.add_development_dependency "rake"
19
+ s.add_development_dependency "rspec", '~> 2.14'
19
20
  end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ require 'smbhash'
3
+
4
+ describe Smbhash do
5
+ describe '.lm_hash' do
6
+ it 'returns a valid lanman hash' do
7
+ expect(Smbhash.lm_hash("password")).to eq("E52CAC67419A9A224A3B108F3FA6CB6D")
8
+ expect(Smbhash.lm_hash("paSSWOrd")).to eq("E52CAC67419A9A224A3B108F3FA6CB6D")
9
+ expect(Smbhash.lm_hash("abcdefgabcdefg")).to eq("E0C510199CC66ABDE0C510199CC66ABD")
10
+ expect(Smbhash.lm_hash("SecREt01")).to eq("FF3750BCC2B22412C2265B23734E0DAC")
11
+ end
12
+
13
+ context 'when more than 14 chars are given as password' do
14
+ it 'raises an ArgumentError' do
15
+ expect { Smbhash.lm_hash('X' * 15) }.to raise_error(ArgumentError, /14 characters/)
16
+ end
17
+ end
18
+ end
19
+
20
+ describe '.ntlm_hash' do
21
+ it 'returns a valid ntlm hash' do
22
+ expect(Smbhash.ntlm_hash("password")).to eq("8846F7EAEE8FB117AD06BDD830B7586C")
23
+ end
24
+
25
+ context 'when more than 255 chars are given as password' do
26
+ it 'raises an ArgumentError' do
27
+ expect { Smbhash.ntlm_hash('X' * 256) }.to raise_error(ArgumentError, /255 characters/)
28
+ end
29
+ end
30
+ end
31
+
32
+ describe '.ntlmgen' do
33
+ it 'returns the output of .lm_hash and .htlm_hash as array' do
34
+ expect(Smbhash).to receive(:lm_hash).with("password", anything())
35
+ expect(Smbhash).to receive(:ntlm_hash).with("password", anything())
36
+ Smbhash.ntlmgen("password")
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,7 @@
1
+ require 'rspec'
2
+
3
+ RSpec.configure do |c|
4
+ c.expect_with :rspec do |c|
5
+ c.syntax = :expect
6
+ end
7
+ end
metadata CHANGED
@@ -1,27 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smbhash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Christian Haase
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-04-11 00:00:00.000000000 Z
11
+ date: 2022-04-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
- requirement: &20347200 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
- version_requirements: *20347200
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.14'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.14'
25
41
  description: An implementation of lanman and nt md4 hash functions for use in Samba
26
42
  style smbpasswd entries
27
43
  email:
@@ -29,38 +45,41 @@ executables: []
29
45
  extensions: []
30
46
  extra_rdoc_files: []
31
47
  files:
32
- - .travis.yml
48
+ - ".gitignore"
49
+ - ".travis.yml"
50
+ - Gemfile
51
+ - Gemfile.lock
33
52
  - README.md
34
53
  - Rakefile
35
54
  - lib/smbhash.rb
36
55
  - lib/smbhash/methods18.rb
37
56
  - lib/smbhash/methods19.rb
38
57
  - smbhash.gemspec
39
- - test/test_samba_encrypt.rb
40
- homepage: https://github.com/krissi/ruby-smbhash
58
+ - spec/smbhash/smbhash_spec.rb
59
+ - spec/spec_helper.rb
60
+ homepage: https://krissi.github.io/ruby-smbhash/
41
61
  licenses:
42
62
  - MIT
63
+ metadata: {}
43
64
  post_install_message:
44
65
  rdoc_options: []
45
66
  require_paths:
46
67
  - lib
47
68
  required_ruby_version: !ruby/object:Gem::Requirement
48
- none: false
49
69
  requirements:
50
- - - ! '>='
70
+ - - ">="
51
71
  - !ruby/object:Gem::Version
52
72
  version: 1.8.7
53
73
  required_rubygems_version: !ruby/object:Gem::Requirement
54
- none: false
55
74
  requirements:
56
- - - ! '>='
75
+ - - ">="
57
76
  - !ruby/object:Gem::Version
58
77
  version: '0'
59
78
  requirements: []
60
- rubyforge_project:
61
- rubygems_version: 1.8.15
79
+ rubygems_version: 3.1.6
62
80
  signing_key:
63
- specification_version: 3
81
+ specification_version: 4
64
82
  summary: Lanman/NT hash generator
65
83
  test_files:
66
- - test/test_samba_encrypt.rb
84
+ - spec/smbhash/smbhash_spec.rb
85
+ - spec/spec_helper.rb
@@ -1,39 +0,0 @@
1
- require 'test/unit'
2
- require 'stringio'
3
- require 'smbhash'
4
-
5
- class SambaEncryptTest < Test::Unit::TestCase
6
- def test_lm_hash
7
- assert_equal("E52CAC67419A9A224A3B108F3FA6CB6D",
8
- Smbhash.lm_hash("password"))
9
- assert_equal("E52CAC67419A9A224A3B108F3FA6CB6D",
10
- Smbhash.lm_hash("paSSWOrd"))
11
- assert_equal("E0C510199CC66ABDE0C510199CC66ABD",
12
- Smbhash.lm_hash("abcdefgabcdefg"))
13
- assert_equal("FF3750BCC2B22412C2265B23734E0DAC",
14
- Smbhash.lm_hash("SecREt01"))
15
- begin
16
- stderr = $stderr
17
- $stderr = StringIO.new
18
- assert_equal("E0C510199CC66ABDE0C510199CC66ABD",
19
- Smbhash.lm_hash("abcdefgabcdefg" + "X"))
20
- assert_equal("E0C510199CC66ABDE0C510199CC66ABD",
21
- Smbhash.lm_hash("abcdefgabcdefg" + "X" * 100))
22
- assert_equal("password is truncated to 14 characters\n" * 2,
23
- $stderr.string)
24
- ensure
25
- $stderr = stderr
26
- end
27
- end
28
-
29
- def test_ntlm_hash
30
- assert_equal("8846F7EAEE8FB117AD06BDD830B7586C",
31
- Smbhash.ntlm_hash("password"))
32
- end
33
-
34
- def test_ntlmgen
35
- assert_equal(["E52CAC67419A9A224A3B108F3FA6CB6D", "8846F7EAEE8FB117AD06BDD830B7586C"],
36
- Smbhash.ntlmgen("password"))
37
- end
38
-
39
- end