File: session_spec.rb

package info (click to toggle)
ruby-ntlm 0.6.3-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 408 kB
  • sloc: ruby: 2,663; makefile: 6
file content (68 lines) | stat: -rw-r--r-- 2,770 bytes parent folder | download
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