53 lines
1.6 KiB
Ruby
Executable File
53 lines
1.6 KiB
Ruby
Executable File
require 'securerandom'
|
|
|
|
RSpec.describe Rex::Proto::LDAP::DnBinary do
|
|
let(:dn) do
|
|
'CN=User,CN=Users,DC=msf,DC=local'
|
|
end
|
|
|
|
let(:data) do
|
|
'abc123'
|
|
end
|
|
|
|
let(:sample) do
|
|
described_class.new(dn, data)
|
|
end
|
|
|
|
it 'encodes to the expected value' do
|
|
expect(sample.encode).to eq('B:12:616263313233:CN=User,CN=Users,DC=msf,DC=local')
|
|
end
|
|
|
|
it 'encodes an empty value' do
|
|
initial = described_class.new(dn, '')
|
|
encoded = initial.encode
|
|
expect(encoded).to eq('B:0::CN=User,CN=Users,DC=msf,DC=local')
|
|
decoded = described_class.decode(encoded)
|
|
expect(decoded.data).to eq('')
|
|
end
|
|
|
|
it 'throws exception with completely wrong format' do
|
|
expect { described_class.decode('definitely not a DN string') }.to raise_error(ArgumentError)
|
|
end
|
|
|
|
it 'throws exception without DN' do
|
|
expect { described_class.decode('B:12:616263313233') }.to raise_error(ArgumentError)
|
|
end
|
|
|
|
it 'throws exception on odd number of hex chars' do
|
|
expect { described_class.decode('B:11:61626331323:the_dn') }.to raise_error(ArgumentError)
|
|
end
|
|
|
|
it 'throws exception on inconsistent number of hex chars' do
|
|
expect { described_class.decode('B:12:626331323:the_dn') }.to raise_error(ArgumentError)
|
|
end
|
|
|
|
it 'reversibly decodes a random value' do
|
|
data = SecureRandom.bytes((SecureRandom.rand * 100).to_i + 1)
|
|
initial = described_class.new(dn, data)
|
|
encoded = initial.encode
|
|
decoded = described_class.decode(encoded)
|
|
expect(decoded.dn).to eq(initial.dn)
|
|
expect(decoded.data).to eq(initial.data)
|
|
end
|
|
end
|