smbhash 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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