rubyntlm 0.6.1 → 0.6.2
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/.gitignore +4 -3
- data/.rspec +2 -2
- data/.travis.yml +13 -12
- data/CHANGELOG.md +118 -6
- data/Gemfile +3 -3
- data/LICENSE +19 -19
- data/Rakefile +25 -22
- data/lib/net/ntlm.rb +266 -266
- data/lib/net/ntlm/blob.rb +28 -28
- data/lib/net/ntlm/channel_binding.rb +65 -65
- data/lib/net/ntlm/client.rb +65 -65
- data/lib/net/ntlm/client/session.rb +237 -237
- data/lib/net/ntlm/encode_util.rb +48 -48
- data/lib/net/ntlm/exceptions.rb +14 -14
- data/lib/net/ntlm/field.rb +34 -34
- data/lib/net/ntlm/field_set.rb +129 -129
- data/lib/net/ntlm/int16_le.rb +25 -25
- data/lib/net/ntlm/int32_le.rb +24 -24
- data/lib/net/ntlm/int64_le.rb +25 -25
- data/lib/net/ntlm/message.rb +129 -129
- data/lib/net/ntlm/message/type0.rb +16 -16
- data/lib/net/ntlm/message/type1.rb +18 -18
- data/lib/net/ntlm/message/type2.rb +102 -102
- data/lib/net/ntlm/message/type3.rb +131 -131
- data/lib/net/ntlm/security_buffer.rb +47 -47
- data/lib/net/ntlm/string.rb +34 -34
- data/lib/net/ntlm/target_info.rb +89 -89
- data/lib/net/ntlm/version.rb +11 -11
- data/rubyntlm.gemspec +29 -28
- data/spec/lib/net/ntlm/blob_spec.rb +16 -16
- data/spec/lib/net/ntlm/channel_binding_spec.rb +17 -17
- data/spec/lib/net/ntlm/client/session_spec.rb +68 -68
- data/spec/lib/net/ntlm/client_spec.rb +64 -64
- data/spec/lib/net/ntlm/encode_util_spec.rb +16 -16
- data/spec/lib/net/ntlm/field_set_spec.rb +33 -33
- data/spec/lib/net/ntlm/field_spec.rb +34 -34
- data/spec/lib/net/ntlm/int16_le_spec.rb +17 -17
- data/spec/lib/net/ntlm/int32_le_spec.rb +18 -18
- data/spec/lib/net/ntlm/int64_le_spec.rb +18 -18
- data/spec/lib/net/ntlm/message/type0_spec.rb +20 -20
- data/spec/lib/net/ntlm/message/type1_spec.rb +131 -131
- data/spec/lib/net/ntlm/message/type2_spec.rb +132 -132
- data/spec/lib/net/ntlm/message/type3_spec.rb +225 -225
- data/spec/lib/net/ntlm/message_spec.rb +16 -16
- data/spec/lib/net/ntlm/security_buffer_spec.rb +64 -64
- data/spec/lib/net/ntlm/string_spec.rb +72 -72
- data/spec/lib/net/ntlm/target_info_spec.rb +76 -76
- data/spec/lib/net/ntlm/version_spec.rb +27 -27
- data/spec/lib/net/ntlm_spec.rb +127 -127
- data/spec/spec_helper.rb +22 -22
- data/spec/support/certificates/sha_256_hash.pem +19 -19
- data/spec/support/shared/examples/net/ntlm/field_shared.rb +25 -25
- data/spec/support/shared/examples/net/ntlm/fieldset_shared.rb +239 -239
- data/spec/support/shared/examples/net/ntlm/int_shared.rb +43 -43
- data/spec/support/shared/examples/net/ntlm/message_shared.rb +35 -35
- metadata +17 -3
@@ -1,17 +1,17 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Net::NTLM::ChannelBinding do
|
4
|
-
let(:certificates_path) { 'spec/support/certificates' }
|
5
|
-
let(:sha_256_path) { File.join(certificates_path, 'sha_256_hash.pem') }
|
6
|
-
let(:sha_256_cert) { OpenSSL::X509::Certificate.new(File.read(sha_256_path)) }
|
7
|
-
let(:cert_hash) { "\x04\x0E\x56\x28\xEC\x4A\x98\x29\x91\x70\x73\x62\x03\x7B\xB2\x3C".force_encoding(Encoding::ASCII_8BIT) }
|
8
|
-
|
9
|
-
subject { Net::NTLM::ChannelBinding.create(sha_256_cert) }
|
10
|
-
|
11
|
-
describe '#channel_binding_token' do
|
12
|
-
|
13
|
-
it 'returns the correct hash' do
|
14
|
-
expect(subject.channel_binding_token).to eq cert_hash
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Net::NTLM::ChannelBinding do
|
4
|
+
let(:certificates_path) { 'spec/support/certificates' }
|
5
|
+
let(:sha_256_path) { File.join(certificates_path, 'sha_256_hash.pem') }
|
6
|
+
let(:sha_256_cert) { OpenSSL::X509::Certificate.new(File.read(sha_256_path)) }
|
7
|
+
let(:cert_hash) { "\x04\x0E\x56\x28\xEC\x4A\x98\x29\x91\x70\x73\x62\x03\x7B\xB2\x3C".force_encoding(Encoding::ASCII_8BIT) }
|
8
|
+
|
9
|
+
subject { Net::NTLM::ChannelBinding.create(sha_256_cert) }
|
10
|
+
|
11
|
+
describe '#channel_binding_token' do
|
12
|
+
|
13
|
+
it 'returns the correct hash' do
|
14
|
+
expect(subject.channel_binding_token).to eq cert_hash
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,68 +1,68 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Net::NTLM::Client::Session do
|
4
|
-
let(:t2_challenge) { Net::NTLM::Message.decode64 "TlRMTVNTUAACAAAADAAMADgAAAA1goriAAyk1DmJUnUAAAAAAAAAAFAAUABEAAAABgLwIwAAAA9TAEUAUgBWAEUAUgACAAwAUwBFAFIAVgBFAFIAAQAMAFMARQBSAFYARQBSAAQADABzAGUAcgB2AGUAcgADAAwAcwBlAHIAdgBlAHIABwAIADd7mrNaB9ABAAAAAA==" }
|
5
|
-
let(:inst) { Net::NTLM::Client::Session.new(nil, t2_challenge) }
|
6
|
-
let(:user_session_key) {["3c4918ff0b33e2603e5d7ceaf34bb7d5"].pack("H*")}
|
7
|
-
let(:client_sign_key) {["f7f97a82ec390f9c903dac4f6aceb132"].pack("H*")}
|
8
|
-
let(:client_seal_key) {["6f0d99535033951cbe499cd1914fe9ee"].pack("H*")}
|
9
|
-
let(:server_sign_key) {["f7f97a82ec390f9c903dac4f6aceb132"].pack("H*")}
|
10
|
-
let(:server_seal_key) {["6f0d99535033951cbe499cd1914fe9ee"].pack("H*")}
|
11
|
-
|
12
|
-
describe "#sign_message" do
|
13
|
-
|
14
|
-
it "signs a message and when KEY_EXCHANGE is true" do
|
15
|
-
expect(inst).to receive(:client_sign_key).and_return(client_sign_key)
|
16
|
-
expect(inst).to receive(:client_seal_key).and_return(client_seal_key)
|
17
|
-
expect(inst).to receive(:negotiate_key_exchange?).and_return(true)
|
18
|
-
sm = inst.sign_message("Test Message")
|
19
|
-
str = "01000000b35ccd60c110c52f00000000"
|
20
|
-
expect(sm.unpack("H*")[0]).to eq(str)
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#verify_signature" do
|
26
|
-
|
27
|
-
it "verifies a message signature" do
|
28
|
-
expect(inst).to receive(:server_sign_key).and_return(server_sign_key)
|
29
|
-
expect(inst).to receive(:server_seal_key).and_return(server_seal_key)
|
30
|
-
expect(inst).to receive(:negotiate_key_exchange?).and_return(true)
|
31
|
-
sig = "01000000b35ccd60c110c52f00000000"
|
32
|
-
sm = inst.verify_signature([sig].pack("H*"), "Test Message")
|
33
|
-
expect(sm).to be true
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
describe "#seal_message" do
|
39
|
-
it "should seal the message" do
|
40
|
-
expect(inst).to receive(:client_seal_key).and_return(client_seal_key)
|
41
|
-
emsg = inst.seal_message("rubyntlm")
|
42
|
-
expect(emsg.unpack("H*")[0]).to eq("d7389b9604f6274f")
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe "#unseal_message" do
|
47
|
-
it "should unseal the message" do
|
48
|
-
expect(inst).to receive(:server_seal_key).and_return(server_seal_key)
|
49
|
-
msg = inst.unseal_message(["d7389b9604f6274f"].pack("H*"))
|
50
|
-
expect(msg).to eq("rubyntlm")
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "#exported_session_key" do
|
55
|
-
it "returns a random 16-byte key when negotiate_key_exchange? is true" do
|
56
|
-
expect(inst).to receive(:negotiate_key_exchange?).and_return(true)
|
57
|
-
expect(inst).not_to receive(:user_session_key)
|
58
|
-
inst.exported_session_key
|
59
|
-
end
|
60
|
-
|
61
|
-
it "returns the user_session_key when negotiate_key_exchange? is false" do
|
62
|
-
expect(inst).to receive(:negotiate_key_exchange?).and_return(false)
|
63
|
-
expect(inst).to receive(:user_session_key).and_return(user_session_key)
|
64
|
-
inst.exported_session_key
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Net::NTLM::Client::Session do
|
4
|
+
let(:t2_challenge) { Net::NTLM::Message.decode64 "TlRMTVNTUAACAAAADAAMADgAAAA1goriAAyk1DmJUnUAAAAAAAAAAFAAUABEAAAABgLwIwAAAA9TAEUAUgBWAEUAUgACAAwAUwBFAFIAVgBFAFIAAQAMAFMARQBSAFYARQBSAAQADABzAGUAcgB2AGUAcgADAAwAcwBlAHIAdgBlAHIABwAIADd7mrNaB9ABAAAAAA==" }
|
5
|
+
let(:inst) { Net::NTLM::Client::Session.new(nil, t2_challenge) }
|
6
|
+
let(:user_session_key) {["3c4918ff0b33e2603e5d7ceaf34bb7d5"].pack("H*")}
|
7
|
+
let(:client_sign_key) {["f7f97a82ec390f9c903dac4f6aceb132"].pack("H*")}
|
8
|
+
let(:client_seal_key) {["6f0d99535033951cbe499cd1914fe9ee"].pack("H*")}
|
9
|
+
let(:server_sign_key) {["f7f97a82ec390f9c903dac4f6aceb132"].pack("H*")}
|
10
|
+
let(:server_seal_key) {["6f0d99535033951cbe499cd1914fe9ee"].pack("H*")}
|
11
|
+
|
12
|
+
describe "#sign_message" do
|
13
|
+
|
14
|
+
it "signs a message and when KEY_EXCHANGE is true" do
|
15
|
+
expect(inst).to receive(:client_sign_key).and_return(client_sign_key)
|
16
|
+
expect(inst).to receive(:client_seal_key).and_return(client_seal_key)
|
17
|
+
expect(inst).to receive(:negotiate_key_exchange?).and_return(true)
|
18
|
+
sm = inst.sign_message("Test Message")
|
19
|
+
str = "01000000b35ccd60c110c52f00000000"
|
20
|
+
expect(sm.unpack("H*")[0]).to eq(str)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#verify_signature" do
|
26
|
+
|
27
|
+
it "verifies a message signature" do
|
28
|
+
expect(inst).to receive(:server_sign_key).and_return(server_sign_key)
|
29
|
+
expect(inst).to receive(:server_seal_key).and_return(server_seal_key)
|
30
|
+
expect(inst).to receive(:negotiate_key_exchange?).and_return(true)
|
31
|
+
sig = "01000000b35ccd60c110c52f00000000"
|
32
|
+
sm = inst.verify_signature([sig].pack("H*"), "Test Message")
|
33
|
+
expect(sm).to be true
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#seal_message" do
|
39
|
+
it "should seal the message" do
|
40
|
+
expect(inst).to receive(:client_seal_key).and_return(client_seal_key)
|
41
|
+
emsg = inst.seal_message("rubyntlm")
|
42
|
+
expect(emsg.unpack("H*")[0]).to eq("d7389b9604f6274f")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#unseal_message" do
|
47
|
+
it "should unseal the message" do
|
48
|
+
expect(inst).to receive(:server_seal_key).and_return(server_seal_key)
|
49
|
+
msg = inst.unseal_message(["d7389b9604f6274f"].pack("H*"))
|
50
|
+
expect(msg).to eq("rubyntlm")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#exported_session_key" do
|
55
|
+
it "returns a random 16-byte key when negotiate_key_exchange? is true" do
|
56
|
+
expect(inst).to receive(:negotiate_key_exchange?).and_return(true)
|
57
|
+
expect(inst).not_to receive(:user_session_key)
|
58
|
+
inst.exported_session_key
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns the user_session_key when negotiate_key_exchange? is false" do
|
62
|
+
expect(inst).to receive(:negotiate_key_exchange?).and_return(false)
|
63
|
+
expect(inst).to receive(:user_session_key).and_return(user_session_key)
|
64
|
+
inst.exported_session_key
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -1,64 +1,64 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Net::NTLM::Client do
|
4
|
-
let(:inst) { Net::NTLM::Client.new("test", "test01", :workstation => "testhost") }
|
5
|
-
let(:user_session_key) {["3c4918ff0b33e2603e5d7ceaf34bb7d5"].pack("H*")}
|
6
|
-
|
7
|
-
describe "#init_context" do
|
8
|
-
|
9
|
-
it "returns a default Type1 message" do
|
10
|
-
t1 = inst.init_context
|
11
|
-
expect(t1).to be_instance_of Net::NTLM::Message::Type1
|
12
|
-
expect(t1.domain).to eq("")
|
13
|
-
expect(t1.workstation).to eq("testhost")
|
14
|
-
expect(t1).to have_flag(:UNICODE)
|
15
|
-
expect(t1).to have_flag(:OEM)
|
16
|
-
expect(t1).to have_flag(:SIGN)
|
17
|
-
expect(t1).to have_flag(:SEAL)
|
18
|
-
expect(t1).to have_flag(:REQUEST_TARGET)
|
19
|
-
expect(t1).to have_flag(:NTLM)
|
20
|
-
expect(t1).to have_flag(:ALWAYS_SIGN)
|
21
|
-
expect(t1).to have_flag(:NTLM2_KEY)
|
22
|
-
expect(t1).to have_flag(:KEY128)
|
23
|
-
expect(t1).to have_flag(:KEY_EXCHANGE)
|
24
|
-
expect(t1).to have_flag(:KEY56)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "clears session variable on new init_context" do
|
28
|
-
inst.instance_variable_set :@session, "BADSESSION"
|
29
|
-
expect(inst.session).to eq("BADSESSION")
|
30
|
-
inst.init_context
|
31
|
-
expect(inst.session).to be_nil
|
32
|
-
end
|
33
|
-
|
34
|
-
it "returns a Type1 message with custom flags" do
|
35
|
-
flags = Net::NTLM::FLAGS[:UNICODE] | Net::NTLM::FLAGS[:REQUEST_TARGET] | Net::NTLM::FLAGS[:NTLM]
|
36
|
-
inst = Net::NTLM::Client.new("test", "test01", :workstation => "testhost", :flags => flags)
|
37
|
-
t1 = inst.init_context
|
38
|
-
expect(t1).to be_instance_of Net::NTLM::Message::Type1
|
39
|
-
expect(t1.domain).to eq("")
|
40
|
-
expect(t1.workstation).to eq("testhost")
|
41
|
-
expect(t1).to have_flag(:UNICODE)
|
42
|
-
expect(t1).not_to have_flag(:OEM)
|
43
|
-
expect(t1).not_to have_flag(:SIGN)
|
44
|
-
expect(t1).not_to have_flag(:SEAL)
|
45
|
-
expect(t1).to have_flag(:REQUEST_TARGET)
|
46
|
-
expect(t1).to have_flag(:NTLM)
|
47
|
-
expect(t1).not_to have_flag(:ALWAYS_SIGN)
|
48
|
-
expect(t1).not_to have_flag(:NTLM2_KEY)
|
49
|
-
expect(t1).not_to have_flag(:KEY128)
|
50
|
-
expect(t1).not_to have_flag(:KEY_EXCHANGE)
|
51
|
-
expect(t1).not_to have_flag(:KEY56)
|
52
|
-
end
|
53
|
-
|
54
|
-
it "calls authenticate! when we receive a Challenge Message" do
|
55
|
-
t2_challenge = "TlRMTVNTUAACAAAADAAMADgAAAA1goriAAyk1DmJUnUAAAAAAAAAAFAAUABEAAAABgLwIwAAAA9TAEUAUgBWAEUAUgACAAwAUwBFAFIAVgBFAFIAAQAMAFMARQBSAFYARQBSAAQADABzAGUAcgB2AGUAcgADAAwAcwBlAHIAdgBlAHIABwAIADd7mrNaB9ABAAAAAA=="
|
56
|
-
session = double("session")
|
57
|
-
expect(session).to receive(:authenticate!)
|
58
|
-
expect(Net::NTLM::Client::Session).to receive(:new).with(inst, instance_of(Net::NTLM::Message::Type2), nil).and_return(session)
|
59
|
-
inst.init_context t2_challenge
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Net::NTLM::Client do
|
4
|
+
let(:inst) { Net::NTLM::Client.new("test", "test01", :workstation => "testhost") }
|
5
|
+
let(:user_session_key) {["3c4918ff0b33e2603e5d7ceaf34bb7d5"].pack("H*")}
|
6
|
+
|
7
|
+
describe "#init_context" do
|
8
|
+
|
9
|
+
it "returns a default Type1 message" do
|
10
|
+
t1 = inst.init_context
|
11
|
+
expect(t1).to be_instance_of Net::NTLM::Message::Type1
|
12
|
+
expect(t1.domain).to eq("")
|
13
|
+
expect(t1.workstation).to eq("testhost")
|
14
|
+
expect(t1).to have_flag(:UNICODE)
|
15
|
+
expect(t1).to have_flag(:OEM)
|
16
|
+
expect(t1).to have_flag(:SIGN)
|
17
|
+
expect(t1).to have_flag(:SEAL)
|
18
|
+
expect(t1).to have_flag(:REQUEST_TARGET)
|
19
|
+
expect(t1).to have_flag(:NTLM)
|
20
|
+
expect(t1).to have_flag(:ALWAYS_SIGN)
|
21
|
+
expect(t1).to have_flag(:NTLM2_KEY)
|
22
|
+
expect(t1).to have_flag(:KEY128)
|
23
|
+
expect(t1).to have_flag(:KEY_EXCHANGE)
|
24
|
+
expect(t1).to have_flag(:KEY56)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "clears session variable on new init_context" do
|
28
|
+
inst.instance_variable_set :@session, "BADSESSION"
|
29
|
+
expect(inst.session).to eq("BADSESSION")
|
30
|
+
inst.init_context
|
31
|
+
expect(inst.session).to be_nil
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns a Type1 message with custom flags" do
|
35
|
+
flags = Net::NTLM::FLAGS[:UNICODE] | Net::NTLM::FLAGS[:REQUEST_TARGET] | Net::NTLM::FLAGS[:NTLM]
|
36
|
+
inst = Net::NTLM::Client.new("test", "test01", :workstation => "testhost", :flags => flags)
|
37
|
+
t1 = inst.init_context
|
38
|
+
expect(t1).to be_instance_of Net::NTLM::Message::Type1
|
39
|
+
expect(t1.domain).to eq("")
|
40
|
+
expect(t1.workstation).to eq("testhost")
|
41
|
+
expect(t1).to have_flag(:UNICODE)
|
42
|
+
expect(t1).not_to have_flag(:OEM)
|
43
|
+
expect(t1).not_to have_flag(:SIGN)
|
44
|
+
expect(t1).not_to have_flag(:SEAL)
|
45
|
+
expect(t1).to have_flag(:REQUEST_TARGET)
|
46
|
+
expect(t1).to have_flag(:NTLM)
|
47
|
+
expect(t1).not_to have_flag(:ALWAYS_SIGN)
|
48
|
+
expect(t1).not_to have_flag(:NTLM2_KEY)
|
49
|
+
expect(t1).not_to have_flag(:KEY128)
|
50
|
+
expect(t1).not_to have_flag(:KEY_EXCHANGE)
|
51
|
+
expect(t1).not_to have_flag(:KEY56)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "calls authenticate! when we receive a Challenge Message" do
|
55
|
+
t2_challenge = "TlRMTVNTUAACAAAADAAMADgAAAA1goriAAyk1DmJUnUAAAAAAAAAAFAAUABEAAAABgLwIwAAAA9TAEUAUgBWAEUAUgACAAwAUwBFAFIAVgBFAFIAAQAMAFMARQBSAFYARQBSAAQADABzAGUAcgB2AGUAcgADAAwAcwBlAHIAdgBlAHIABwAIADd7mrNaB9ABAAAAAA=="
|
56
|
+
session = double("session")
|
57
|
+
expect(session).to receive(:authenticate!)
|
58
|
+
expect(Net::NTLM::Client::Session).to receive(:new).with(inst, instance_of(Net::NTLM::Message::Type2), nil).and_return(session)
|
59
|
+
inst.init_context t2_challenge
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -1,16 +1,16 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Net::NTLM::EncodeUtil do
|
4
|
-
|
5
|
-
context '#encode_utf16le' do
|
6
|
-
it 'should convert an ASCII string to UTF' do
|
7
|
-
expect(Net::NTLM::EncodeUtil.encode_utf16le('Test'.encode(::Encoding::ASCII_8BIT).freeze)).to eq("T\x00e\x00s\x00t\x00")
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
context '#decode_utf16le' do
|
12
|
-
it 'should convert a UTF string to ASCII' do
|
13
|
-
expect(Net::NTLM::EncodeUtil.decode_utf16le("T\x00e\x00s\x00t\x00".freeze)).to eq('Test')
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Net::NTLM::EncodeUtil do
|
4
|
+
|
5
|
+
context '#encode_utf16le' do
|
6
|
+
it 'should convert an ASCII string to UTF' do
|
7
|
+
expect(Net::NTLM::EncodeUtil.encode_utf16le('Test'.encode(::Encoding::ASCII_8BIT).freeze)).to eq("T\x00e\x00s\x00t\x00")
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context '#decode_utf16le' do
|
12
|
+
it 'should convert a UTF string to ASCII' do
|
13
|
+
expect(Net::NTLM::EncodeUtil.decode_utf16le("T\x00e\x00s\x00t\x00".freeze)).to eq('Test')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,33 +1,33 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Net::NTLM::FieldSet do
|
4
|
-
|
5
|
-
fields = []
|
6
|
-
|
7
|
-
it_behaves_like 'a fieldset', fields
|
8
|
-
|
9
|
-
subject(:fieldset_class) do
|
10
|
-
Class.new(Net::NTLM::FieldSet)
|
11
|
-
end
|
12
|
-
|
13
|
-
context 'an instance' do
|
14
|
-
subject(:fieldset_object) do
|
15
|
-
fieldset_class.string(:test_string, { :value => 'Test', :active => true, :size => 4})
|
16
|
-
fieldset_class.string(:test_string2, { :value => 'Foo', :active => true, :size => 3})
|
17
|
-
fieldset_class.new
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should serialize all the fields' do
|
21
|
-
expect(fieldset_object.serialize).to eq('TestFoo')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should parse a string across the fields' do
|
25
|
-
fieldset_object.parse('FooBarBaz')
|
26
|
-
expect(fieldset_object.serialize).to eq('FooBarB')
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should return an aggregate size of all the fields' do
|
30
|
-
expect(fieldset_object.size).to eq(7)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Net::NTLM::FieldSet do
|
4
|
+
|
5
|
+
fields = []
|
6
|
+
|
7
|
+
it_behaves_like 'a fieldset', fields
|
8
|
+
|
9
|
+
subject(:fieldset_class) do
|
10
|
+
Class.new(Net::NTLM::FieldSet)
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'an instance' do
|
14
|
+
subject(:fieldset_object) do
|
15
|
+
fieldset_class.string(:test_string, { :value => 'Test', :active => true, :size => 4})
|
16
|
+
fieldset_class.string(:test_string2, { :value => 'Foo', :active => true, :size => 3})
|
17
|
+
fieldset_class.new
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should serialize all the fields' do
|
21
|
+
expect(fieldset_object.serialize).to eq('TestFoo')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should parse a string across the fields' do
|
25
|
+
fieldset_object.parse('FooBarBaz')
|
26
|
+
expect(fieldset_object.serialize).to eq('FooBarB')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should return an aggregate size of all the fields' do
|
30
|
+
expect(fieldset_object.size).to eq(7)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,34 +1,34 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Net::NTLM::Field do
|
4
|
-
|
5
|
-
it_behaves_like 'a field', 'Foo', false
|
6
|
-
|
7
|
-
context 'with no size specified' do
|
8
|
-
let (:field_without_size) { Net::NTLM::Field.new({ :value => 'Foo', :active => true }) }
|
9
|
-
it 'should set size to 0 if not active' do
|
10
|
-
expect(field_without_size.size).to eq(0)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'should return 0 if active but no size specified' do
|
14
|
-
field_without_size.active = true
|
15
|
-
expect(field_without_size.size).to eq(0)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'with a size specified' do
|
20
|
-
let (:field_with_size) { Net::NTLM::Field.new({ :value => 'Foo', :active => true, :size => 100 }) }
|
21
|
-
|
22
|
-
it 'should return the size provided in the initialize options if active' do
|
23
|
-
expect(field_with_size.size).to eq(100)
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'should still return 0 if not active' do
|
27
|
-
field_with_size.active = false
|
28
|
-
expect(field_with_size.size).to eq(0)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Net::NTLM::Field do
|
4
|
+
|
5
|
+
it_behaves_like 'a field', 'Foo', false
|
6
|
+
|
7
|
+
context 'with no size specified' do
|
8
|
+
let (:field_without_size) { Net::NTLM::Field.new({ :value => 'Foo', :active => true }) }
|
9
|
+
it 'should set size to 0 if not active' do
|
10
|
+
expect(field_without_size.size).to eq(0)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should return 0 if active but no size specified' do
|
14
|
+
field_without_size.active = true
|
15
|
+
expect(field_without_size.size).to eq(0)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'with a size specified' do
|
20
|
+
let (:field_with_size) { Net::NTLM::Field.new({ :value => 'Foo', :active => true, :size => 100 }) }
|
21
|
+
|
22
|
+
it 'should return the size provided in the initialize options if active' do
|
23
|
+
expect(field_with_size.size).to eq(100)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should still return 0 if not active' do
|
27
|
+
field_with_size.active = false
|
28
|
+
expect(field_with_size.size).to eq(0)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
end
|