1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
require 'spec_helper'
describe Net::NTLM::Client::Session do
let(:t2_challenge) { Net::NTLM::Message.decode64 "TlRMTVNTUAACAAAADAAMADgAAAA1goriAAyk1DmJUnUAAAAAAAAAAFAAUABEAAAABgLwIwAAAA9TAEUAUgBWAEUAUgACAAwAUwBFAFIAVgBFAFIAAQAMAFMARQBSAFYARQBSAAQADABzAGUAcgB2AGUAcgADAAwAcwBlAHIAdgBlAHIABwAIADd7mrNaB9ABAAAAAA==" }
let(:inst) { Net::NTLM::Client::Session.new(nil, t2_challenge) }
let(:user_session_key) {["3c4918ff0b33e2603e5d7ceaf34bb7d5"].pack("H*")}
let(:client_sign_key) {["f7f97a82ec390f9c903dac4f6aceb132"].pack("H*")}
let(:client_seal_key) {["6f0d99535033951cbe499cd1914fe9ee"].pack("H*")}
let(:server_sign_key) {["f7f97a82ec390f9c903dac4f6aceb132"].pack("H*")}
let(:server_seal_key) {["6f0d99535033951cbe499cd1914fe9ee"].pack("H*")}
describe "#sign_message" do
it "signs a message and when KEY_EXCHANGE is true" do
expect(inst).to receive(:client_sign_key).and_return(client_sign_key)
expect(inst).to receive(:client_seal_key).and_return(client_seal_key)
expect(inst).to receive(:negotiate_key_exchange?).and_return(true)
sm = inst.sign_message("Test Message")
str = "01000000b35ccd60c110c52f00000000"
expect(sm.unpack("H*")[0]).to eq(str)
end
end
describe "#verify_signature" do
it "verifies a message signature" do
expect(inst).to receive(:server_sign_key).and_return(server_sign_key)
expect(inst).to receive(:server_seal_key).and_return(server_seal_key)
expect(inst).to receive(:negotiate_key_exchange?).and_return(true)
sig = "01000000b35ccd60c110c52f00000000"
sm = inst.verify_signature([sig].pack("H*"), "Test Message")
expect(sm).to be true
end
end
describe "#seal_message" do
it "should seal the message" do
expect(inst).to receive(:client_seal_key).and_return(client_seal_key)
emsg = inst.seal_message("rubyntlm")
expect(emsg.unpack("H*")[0]).to eq("d7389b9604f6274f")
end
end
describe "#unseal_message" do
it "should unseal the message" do
expect(inst).to receive(:server_seal_key).and_return(server_seal_key)
msg = inst.unseal_message(["d7389b9604f6274f"].pack("H*"))
expect(msg).to eq("rubyntlm")
end
end
describe "#exported_session_key" do
it "returns a random 16-byte key when negotiate_key_exchange? is true" do
expect(inst).to receive(:negotiate_key_exchange?).and_return(true)
expect(inst).not_to receive(:user_session_key)
inst.exported_session_key
end
it "returns the user_session_key when negotiate_key_exchange? is false" do
expect(inst).to receive(:negotiate_key_exchange?).and_return(false)
expect(inst).to receive(:user_session_key).and_return(user_session_key)
inst.exported_session_key
end
end
end
|