spec/lib/net/ntlm_spec.rb in rubyntlm-0.6.1 vs spec/lib/net/ntlm_spec.rb in rubyntlm-0.6.2
- old
+ new
@@ -1,127 +1,127 @@
-require "spec_helper"
-
-describe Net::NTLM do
- let(:passwd) {"SecREt01"}
- let(:user) {"user"}
- let(:domain) {"DOMAIN"}
- let(:challenge) {["0123456789abcdef"].pack("H*")}
- let(:client_ch) {["ffffff0011223344"].pack("H*")}
- let(:timestamp) {1055844000}
- let(:trgt_info) {[
- "02000c0044004f004d00410049004e00" +
- "01000c00530045005200560045005200" +
- "0400140064006f006d00610069006e00" +
- "2e0063006f006d000300220073006500" +
- "72007600650072002e0064006f006d00" +
- "610069006e002e0063006f006d000000" +
- "0000"
- ].pack("H*")}
- let(:padded_pwd) { passwd.upcase.ljust(14, "\0")}
- let(:keys) { Net::NTLM.gen_keys(padded_pwd)}
-
- it 'should convert a value to 64-bit LE Integer' do
- expect(Net::NTLM.pack_int64le(42)).to eq("\x2A\x00\x00\x00\x00\x00\x00\x00")
- end
-
- it 'should split a string into an array of slices, 7 chars or less' do
- expect(Net::NTLM.split7("HelloWorld!")).to eq([ 'HelloWo', 'rld!'])
- end
-
- it 'should generate DES keys from the supplied string' do
- first_key = ["52a2516b252a5161"].pack('H*')
- second_key = ["3180010101010101"].pack('H*')
- expect(Net::NTLM.gen_keys(padded_pwd)).to eq([first_key, second_key])
- end
-
- it 'should encrypt the string with DES for each key supplied' do
- first_crypt = ["ff3750bcc2b22412"].pack('H*')
- second_crypt = ["c2265b23734e0dac"].pack('H*')
- expect(Net::NTLM::apply_des(Net::NTLM::LM_MAGIC, keys)).to eq([first_crypt, second_crypt])
- end
-
- it 'should generate an lm_hash' do
- expect(Net::NTLM::lm_hash(passwd)).to eq(["ff3750bcc2b22412c2265b23734e0dac"].pack("H*"))
- end
-
- it 'should generate an ntlm_hash' do
- expect(Net::NTLM::ntlm_hash(passwd)).to eq(["cd06ca7c7e10c99b1d33b7485a2ed808"].pack("H*"))
- end
-
- it 'should generate an ntlmv2_hash' do
- expect(Net::NTLM::ntlmv2_hash(user, passwd, domain)).to eq(["04b8e0ba74289cc540826bab1dee63ae"].pack("H*"))
- end
-
- context 'when a user passes an NTLM hash for pass-the-hash' do
- let(:passwd) { Net::NTLM::EncodeUtil.encode_utf16le('ff3750bcc2b22412c2265b23734e0dac:cd06ca7c7e10c99b1d33b7485a2ed808') }
-
- it 'should return the correct ntlmv2 hash' do
- expect(Net::NTLM::ntlmv2_hash(user, passwd, domain)).to eq(["04b8e0ba74289cc540826bab1dee63ae"].pack("H*"))
- end
- end
-
- it 'should generate an lm_response' do
- expect(Net::NTLM::lm_response(
- {
- :lm_hash => Net::NTLM::lm_hash(passwd),
- :challenge => challenge
- }
- )).to eq(["c337cd5cbd44fc9782a667af6d427c6de67c20c2d3e77c56"].pack("H*"))
- end
-
- it 'should generate an ntlm_response' do
- ntlm_hash = Net::NTLM::ntlm_hash(passwd)
- expect(Net::NTLM::ntlm_response(
- {
- :ntlm_hash => ntlm_hash,
- :challenge => challenge
- }
- )).to eq(["25a98c1c31e81847466b29b2df4680f39958fb8c213a9cc6"].pack("H*"))
- end
-
- it 'should generate a lvm2_response' do
- expect(Net::NTLM::lmv2_response(
- {
- :ntlmv2_hash => Net::NTLM::ntlmv2_hash(user, passwd, domain),
- :challenge => challenge
- },
- { :client_challenge => client_ch }
- )).to eq(["d6e6152ea25d03b7c6ba6629c2d6aaf0ffffff0011223344"].pack("H*"))
- end
-
- it 'should generate a ntlmv2_response' do
- expect(Net::NTLM::ntlmv2_response(
- {
- :ntlmv2_hash => Net::NTLM::ntlmv2_hash(user, passwd, domain),
- :challenge => challenge,
- :target_info => trgt_info
- },
- {
- :timestamp => timestamp,
- :client_challenge => client_ch
- }
- )).to eq([
- "cbabbca713eb795d04c97abc01ee4983" +
- "01010000000000000090d336b734c301" +
- "ffffff00112233440000000002000c00" +
- "44004f004d00410049004e0001000c00" +
- "53004500520056004500520004001400" +
- "64006f006d00610069006e002e006300" +
- "6f006d00030022007300650072007600" +
- "650072002e0064006f006d0061006900" +
- "6e002e0063006f006d00000000000000" +
- "0000"
- ].pack("H*"))
- end
-
- it 'should generate a ntlm2_session' do
- session = Net::NTLM::ntlm2_session(
- {
- :ntlm_hash => Net::NTLM::ntlm_hash(passwd),
- :challenge => challenge
- },
- { :client_challenge => client_ch }
- )
- expect(session[0]).to eq(["ffffff001122334400000000000000000000000000000000"].pack("H*"))
- expect(session[1]).to eq(["10d550832d12b2ccb79d5ad1f4eed3df82aca4c3681dd455"].pack("H*"))
- end
-end
+require "spec_helper"
+
+describe Net::NTLM do
+ let(:passwd) {"SecREt01"}
+ let(:user) {"user"}
+ let(:domain) {"DOMAIN"}
+ let(:challenge) {["0123456789abcdef"].pack("H*")}
+ let(:client_ch) {["ffffff0011223344"].pack("H*")}
+ let(:timestamp) {1055844000}
+ let(:trgt_info) {[
+ "02000c0044004f004d00410049004e00" +
+ "01000c00530045005200560045005200" +
+ "0400140064006f006d00610069006e00" +
+ "2e0063006f006d000300220073006500" +
+ "72007600650072002e0064006f006d00" +
+ "610069006e002e0063006f006d000000" +
+ "0000"
+ ].pack("H*")}
+ let(:padded_pwd) { passwd.upcase.ljust(14, "\0")}
+ let(:keys) { Net::NTLM.gen_keys(padded_pwd)}
+
+ it 'should convert a value to 64-bit LE Integer' do
+ expect(Net::NTLM.pack_int64le(42)).to eq("\x2A\x00\x00\x00\x00\x00\x00\x00")
+ end
+
+ it 'should split a string into an array of slices, 7 chars or less' do
+ expect(Net::NTLM.split7("HelloWorld!")).to eq([ 'HelloWo', 'rld!'])
+ end
+
+ it 'should generate DES keys from the supplied string' do
+ first_key = ["52a2516b252a5161"].pack('H*')
+ second_key = ["3180010101010101"].pack('H*')
+ expect(Net::NTLM.gen_keys(padded_pwd)).to eq([first_key, second_key])
+ end
+
+ it 'should encrypt the string with DES for each key supplied' do
+ first_crypt = ["ff3750bcc2b22412"].pack('H*')
+ second_crypt = ["c2265b23734e0dac"].pack('H*')
+ expect(Net::NTLM::apply_des(Net::NTLM::LM_MAGIC, keys)).to eq([first_crypt, second_crypt])
+ end
+
+ it 'should generate an lm_hash' do
+ expect(Net::NTLM::lm_hash(passwd)).to eq(["ff3750bcc2b22412c2265b23734e0dac"].pack("H*"))
+ end
+
+ it 'should generate an ntlm_hash' do
+ expect(Net::NTLM::ntlm_hash(passwd)).to eq(["cd06ca7c7e10c99b1d33b7485a2ed808"].pack("H*"))
+ end
+
+ it 'should generate an ntlmv2_hash' do
+ expect(Net::NTLM::ntlmv2_hash(user, passwd, domain)).to eq(["04b8e0ba74289cc540826bab1dee63ae"].pack("H*"))
+ end
+
+ context 'when a user passes an NTLM hash for pass-the-hash' do
+ let(:passwd) { Net::NTLM::EncodeUtil.encode_utf16le('ff3750bcc2b22412c2265b23734e0dac:cd06ca7c7e10c99b1d33b7485a2ed808') }
+
+ it 'should return the correct ntlmv2 hash' do
+ expect(Net::NTLM::ntlmv2_hash(user, passwd, domain)).to eq(["04b8e0ba74289cc540826bab1dee63ae"].pack("H*"))
+ end
+ end
+
+ it 'should generate an lm_response' do
+ expect(Net::NTLM::lm_response(
+ {
+ :lm_hash => Net::NTLM::lm_hash(passwd),
+ :challenge => challenge
+ }
+ )).to eq(["c337cd5cbd44fc9782a667af6d427c6de67c20c2d3e77c56"].pack("H*"))
+ end
+
+ it 'should generate an ntlm_response' do
+ ntlm_hash = Net::NTLM::ntlm_hash(passwd)
+ expect(Net::NTLM::ntlm_response(
+ {
+ :ntlm_hash => ntlm_hash,
+ :challenge => challenge
+ }
+ )).to eq(["25a98c1c31e81847466b29b2df4680f39958fb8c213a9cc6"].pack("H*"))
+ end
+
+ it 'should generate a lvm2_response' do
+ expect(Net::NTLM::lmv2_response(
+ {
+ :ntlmv2_hash => Net::NTLM::ntlmv2_hash(user, passwd, domain),
+ :challenge => challenge
+ },
+ { :client_challenge => client_ch }
+ )).to eq(["d6e6152ea25d03b7c6ba6629c2d6aaf0ffffff0011223344"].pack("H*"))
+ end
+
+ it 'should generate a ntlmv2_response' do
+ expect(Net::NTLM::ntlmv2_response(
+ {
+ :ntlmv2_hash => Net::NTLM::ntlmv2_hash(user, passwd, domain),
+ :challenge => challenge,
+ :target_info => trgt_info
+ },
+ {
+ :timestamp => timestamp,
+ :client_challenge => client_ch
+ }
+ )).to eq([
+ "cbabbca713eb795d04c97abc01ee4983" +
+ "01010000000000000090d336b734c301" +
+ "ffffff00112233440000000002000c00" +
+ "44004f004d00410049004e0001000c00" +
+ "53004500520056004500520004001400" +
+ "64006f006d00610069006e002e006300" +
+ "6f006d00030022007300650072007600" +
+ "650072002e0064006f006d0061006900" +
+ "6e002e0063006f006d00000000000000" +
+ "0000"
+ ].pack("H*"))
+ end
+
+ it 'should generate a ntlm2_session' do
+ session = Net::NTLM::ntlm2_session(
+ {
+ :ntlm_hash => Net::NTLM::ntlm_hash(passwd),
+ :challenge => challenge
+ },
+ { :client_challenge => client_ch }
+ )
+ expect(session[0]).to eq(["ffffff001122334400000000000000000000000000000000"].pack("H*"))
+ expect(session[1]).to eq(["10d550832d12b2ccb79d5ad1f4eed3df82aca4c3681dd455"].pack("H*"))
+ end
+end