nodered_cfg/node_modules/asn1-ber/test/unittests_lib-ber-writer.js

588 行
15 KiB
JavaScript

var asn1 = require("../")
var assert = require("assert")
var BerWriter = asn1.BerWriter
describe("lib/ber/writer.js", function() {
describe("writeByte()", function() {
it("can write a value", function() {
var writer = new BerWriter()
writer.writeByte(0xC2)
var buffer = writer.buffer
assert.equal(buffer.length, 1)
assert.equal(buffer[0], 0xc2)
})
})
describe("writeInt()", function() {
it("can write zero", function() {
var writer = new BerWriter()
writer.writeInt(0)
var buffer = writer.buffer
assert.equal(buffer.length, 3)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x01)
assert.equal(buffer[2], 0x00)
})
it("can write 1 byte positive integers - lowest", function() {
var writer = new BerWriter()
writer.writeInt(1)
var buffer = writer.buffer
assert.equal(buffer.length, 3)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x01)
assert.equal(buffer[2], 0x01)
})
it("can write 1 byte positive integers - middle", function() {
var writer = new BerWriter()
writer.writeInt(101)
var buffer = writer.buffer
assert.equal(buffer.length, 3)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x01)
assert.equal(buffer[2], 0x65)
})
it("can write 1 byte positive integers - highest", function() {
var writer = new BerWriter()
writer.writeInt(127)
var buffer = writer.buffer
assert.equal(buffer.length, 3)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x01)
assert.equal(buffer[2], 0x7f)
})
it("can write 2 byte positive integers - lowest", function() {
var writer = new BerWriter()
writer.writeInt(128)
var buffer = writer.buffer
assert.equal(buffer.length, 4)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x02)
assert.equal(buffer[2], 0x00)
assert.equal(buffer[3], 0x80)
})
it("can write 2 byte positive integers - middle", function() {
var writer = new BerWriter()
writer.writeInt(9374)
var buffer = writer.buffer
assert.equal(buffer.length, 4)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x02)
assert.equal(buffer[2], 0x24)
assert.equal(buffer[3], 0x9e)
})
it("can write 2 byte positive integers - highest", function() {
var writer = new BerWriter()
writer.writeInt(32767)
var buffer = writer.buffer
assert.equal(buffer.length, 4)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x02)
assert.equal(buffer[2], 0x7f)
assert.equal(buffer[3], 0xff)
})
it("can write 3 byte positive integers - lowest", function() {
var writer = new BerWriter()
writer.writeInt(32768)
var buffer = writer.buffer
assert.equal(buffer.length, 5)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x03)
assert.equal(buffer[2], 0x00)
assert.equal(buffer[3], 0x80)
assert.equal(buffer[4], 0x00)
})
it("can write 3 byte positive integers - middle", function() {
var writer = new BerWriter()
writer.writeInt(5938243)
var buffer = writer.buffer
assert.equal(buffer.length, 5)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x03)
assert.equal(buffer[2], 0x5a)
assert.equal(buffer[3], 0x9c)
assert.equal(buffer[4], 0x43)
})
it("can write 3 byte positive integers - highest", function() {
var writer = new BerWriter()
writer.writeInt(8388607)
var buffer = writer.buffer
assert.equal(buffer.length, 5)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x03)
assert.equal(buffer[2], 0x7f)
assert.equal(buffer[3], 0xff)
assert.equal(buffer[4], 0xff)
})
it("can write 4 byte positive integers - lowest", function() {
var writer = new BerWriter()
writer.writeInt(8388608)
var buffer = writer.buffer
assert.equal(buffer.length, 6)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x04)
assert.equal(buffer[2], 0x00)
assert.equal(buffer[3], 0x80)
assert.equal(buffer[4], 0x00)
assert.equal(buffer[5], 0x00)
})
it("can write 4 byte positive integers - middle", function() {
var writer = new BerWriter()
writer.writeInt(1483722690)
var buffer = writer.buffer
assert.equal(buffer.length, 6)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x04)
assert.equal(buffer[2], 0x58)
assert.equal(buffer[3], 0x6f)
assert.equal(buffer[4], 0xcf)
assert.equal(buffer[5], 0xc2)
})
it("can write 4 byte positive integers - highest", function() {
var writer = new BerWriter()
writer.writeInt(2147483647)
var buffer = writer.buffer
assert.equal(buffer.length, 6)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x04)
assert.equal(buffer[2], 0x7f)
assert.equal(buffer[3], 0xff)
assert.equal(buffer[4], 0xff)
assert.equal(buffer[5], 0xff)
})
it("can write 5 byte positive integers - lowest", function() {
var writer = new BerWriter()
writer.writeInt(2147483648)
var buffer = writer.buffer
assert.equal(buffer.length, 7)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x05)
assert.equal(buffer[2], 0x00)
assert.equal(buffer[3], 0x80)
assert.equal(buffer[4], 0x00)
assert.equal(buffer[5], 0x00)
assert.equal(buffer[6], 0x00)
})
it("can write 5 byte positive integers - middle", function() {
var writer = new BerWriter()
writer.writeInt(3843548325)
var buffer = writer.buffer
assert.equal(buffer.length, 7)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x05)
assert.equal(buffer[2], 0x00)
assert.equal(buffer[3], 0xe5)
assert.equal(buffer[4], 0x17)
assert.equal(buffer[5], 0xe4)
assert.equal(buffer[6], 0xa5)
})
it("can write 5 byte positive integers - highest", function() {
var writer = new BerWriter()
writer.writeInt(4294967295)
var buffer = writer.buffer
assert.equal(buffer.length, 7)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x05)
assert.equal(buffer[2], 0x00)
assert.equal(buffer[3], 0xff)
assert.equal(buffer[4], 0xff)
assert.equal(buffer[5], 0xff)
assert.equal(buffer[6], 0xff)
})
it("can write 1 byte negative integers - lowest", function() {
var writer = new BerWriter()
writer.writeInt(-128)
var buffer = writer.buffer
assert.equal(buffer.length, 3)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x01)
assert.equal(buffer[2], 0x80)
})
it("can write 1 byte negative integers - middle", function() {
var writer = new BerWriter()
writer.writeInt(-73)
var buffer = writer.buffer
assert.equal(buffer.length, 3)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x01)
assert.equal(buffer[2], 0xb7)
})
it("can write 1 byte negative integers - highest", function() {
var writer = new BerWriter()
writer.writeInt(-1)
var buffer = writer.buffer
assert.equal(buffer.length, 3)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x01)
assert.equal(buffer[2], 0xff)
})
it("can write 2 byte negative integers - lowest", function() {
var writer = new BerWriter()
writer.writeInt(-32768)
var buffer = writer.buffer
assert.equal(buffer.length, 4)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x02)
assert.equal(buffer[2], 0x80)
assert.equal(buffer[3], 0x00)
})
it("can write 2 byte negative integers - middle", function() {
var writer = new BerWriter()
writer.writeInt(-22400)
var buffer = writer.buffer
assert.equal(buffer.length, 4)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x02)
assert.equal(buffer[2], 0xa8)
assert.equal(buffer[3], 0x80)
})
it("can write 2 byte negative integers - highest", function() {
var writer = new BerWriter()
writer.writeInt(-129)
var buffer = writer.buffer
assert.equal(buffer.length, 4)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x02)
assert.equal(buffer[2], 0xff)
assert.equal(buffer[3], 0x7f)
})
it("can write 3 byte negative integers - lowest", function() {
var writer = new BerWriter()
writer.writeInt(-8388608)
var buffer = writer.buffer
assert.equal(buffer.length, 5)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x03)
assert.equal(buffer[2], 0x80)
assert.equal(buffer[3], 0x00)
assert.equal(buffer[4], 0x00)
})
it("can write 3 byte negative integers - middle", function() {
var writer = new BerWriter()
writer.writeInt(-481653)
var buffer = writer.buffer
assert.equal(buffer.length, 5)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x03)
assert.equal(buffer[2], 0xf8)
assert.equal(buffer[3], 0xa6)
assert.equal(buffer[4], 0x8b)
})
it("can write 3 byte negative integers - highest", function() {
var writer = new BerWriter()
writer.writeInt(-32769)
var buffer = writer.buffer
assert.equal(buffer.length, 5)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x03)
assert.equal(buffer[2], 0xff)
assert.equal(buffer[3], 0x7f)
assert.equal(buffer[4], 0xff)
})
it("can write 4 byte negative integers - lowest", function() {
var writer = new BerWriter()
writer.writeInt(-2147483648)
var buffer = writer.buffer
assert.equal(buffer.length, 6)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x04)
assert.equal(buffer[2], 0x80)
assert.equal(buffer[3], 0x00)
assert.equal(buffer[4], 0x00)
assert.equal(buffer[5], 0x00)
})
it("can write 4 byte negative integers - middle", function() {
var writer = new BerWriter()
writer.writeInt(-1522904131)
var buffer = writer.buffer
assert.equal(buffer.length, 6)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x04)
assert.equal(buffer[2], 0xa5)
assert.equal(buffer[3], 0x3a)
assert.equal(buffer[4], 0x53)
assert.equal(buffer[5], 0xbd)
})
it("can write 4 byte negative integers - highest", function() {
var writer = new BerWriter()
writer.writeInt(-8388609)
var buffer = writer.buffer
assert.equal(buffer.length, 6)
assert.equal(buffer[0], 0x02)
assert.equal(buffer[1], 0x04)
assert.equal(buffer[2], 0xff)
assert.equal(buffer[3], 0x7f)
assert.equal(buffer[4], 0xff)
assert.equal(buffer[5], 0xff)
})
})
describe("writeBoolean()", function() {
it("can write a true and false value", function() {
var writer = new BerWriter()
writer.writeBoolean(true)
writer.writeBoolean(false)
var buffer = writer.buffer
assert.equal(buffer.length, 6)
assert.equal(buffer[0], 0x01)
assert.equal(buffer[1], 0x01)
assert.equal(buffer[2], 0xff)
assert.equal(buffer[3], 0x01)
assert.equal(buffer[4], 0x01)
assert.equal(buffer[5], 0x00)
})
})
describe("writeString()", function() {
it("can write a value", function() {
var writer = new BerWriter()
writer.writeString("hello world")
var buffer = writer.buffer
assert.equal(buffer.length, 13)
assert.equal(buffer[0], 0x04)
assert.equal(buffer[1], 11)
assert.equal(buffer.slice(2).toString("utf8"), "hello world")
})
})
describe("writeBuffer()", function() {
it("can write a value", function() {
var writer = new BerWriter()
writer.writeString("hello world")
var expected = Buffer.from([
0x04, 0x0b, 0x30, 0x09, 0x02, 0x01, 0x0f, 0x01,
0x01, 0xff, 0x01, 0x01, 0xff
])
writer.writeBuffer(expected.slice(2, expected.length), 0x04)
buffer = writer.buffer;
assert.equal(buffer.length, 26)
assert.equal(buffer[0], 0x04)
assert.equal(buffer[1], 11)
assert.equal(buffer.slice(2, 13).toString("utf8"), "hello world")
assert.equal(buffer[13], expected[0])
assert.equal(buffer[14], expected[1])
for (var i = 13, j = 0; i < buffer.length && j < expected.length; i++, j++)
assert.equal(buffer[i], expected[j])
})
})
describe("writeStringArray()", function() {
it("can write an array of strings", function() {
var writer = new BerWriter()
writer.writeStringArray(["hello world", "fubar!"])
var buffer = writer.buffer
assert.equal(buffer.length, 21)
assert.equal(buffer[0], 0x04)
assert.equal(buffer[1], 11)
assert.equal(buffer.slice(2, 13).toString("utf8"), "hello world")
assert.equal(buffer[13], 0x04)
assert.equal(buffer[14], 6)
assert.equal(buffer.slice(15).toString("utf8"), "fubar!")
})
})
describe("oversized data", function() {
it("results in a buffer resize", function() {
var writer = new BerWriter({size: 2})
writer.writeString("hello world")
var buffer = writer.buffer
assert.equal(buffer.length, 13)
assert.equal(buffer[0], 0x04)
assert.equal(buffer[1], 11)
assert.equal(buffer.slice(2).toString("utf8"), "hello world")
})
})
describe("complex sequences", function() {
it("are processed correctly", function() {
var writer = new BerWriter({size: 25})
writer.startSequence()
writer.writeString("hello world")
writer.endSequence()
var buffer = writer.buffer
assert.equal(buffer.length, 15)
assert.equal(buffer[0], 0x30)
assert.equal(buffer[1], 13)
assert.equal(buffer[2], 0x04)
assert.equal(buffer[3], 11)
assert.equal(buffer.slice(4).toString("utf8"), "hello world")
})
})
describe("nested sequences", function() {
it("are processed correctly", function() {
var writer = new BerWriter({size: 25})
writer.startSequence()
writer.writeString("hello world")
writer.startSequence()
writer.writeString("hello world")
writer.endSequence()
writer.endSequence()
var buffer = writer.buffer
assert.equal(buffer.length, 30)
assert.equal(buffer[0], 0x30)
assert.equal(buffer[1], 28)
assert.equal(buffer[2], 0x04)
assert.equal(buffer[3], 11)
assert.equal(buffer.slice(4, 15).toString("utf8"), "hello world")
assert.equal(buffer[15], 0x30)
assert.equal(buffer[16], 13)
assert.equal(buffer[17], 0x04)
assert.equal(buffer[18], 11)
assert.equal(buffer.slice(19, 30).toString("utf8"), "hello world")
})
})
describe("multiple sequences", function() {
it("are processed correctly", function() {
// An anonymous LDAP v3 BIND request
var dn = "cn=foo,ou=unit,o=test"
var writer = new BerWriter()
writer.startSequence()
writer.writeInt(3)
writer.startSequence(0x60)
writer.writeInt(3)
writer.writeString(dn)
writer.writeByte(0x80)
writer.writeByte(0x00)
writer.endSequence()
writer.endSequence()
var buffer = writer.buffer
assert.equal(buffer.length, 35)
assert.equal(buffer[0], 0x30)
assert.equal(buffer[1], 33)
assert.equal(buffer[2], 0x02)
assert.equal(buffer[3], 1)
assert.equal(buffer[4], 0x03)
assert.equal(buffer[5], 0x60)
assert.equal(buffer[6], 28)
assert.equal(buffer[7], 0x02)
assert.equal(buffer[8], 1)
assert.equal(buffer[9], 0x03)
assert.equal(buffer[10], 0x04)
assert.equal(buffer[11], dn.length)
assert.equal(buffer.slice(12, 33).toString("utf8"), dn)
assert.equal(buffer[33], 0x80)
assert.equal(buffer[34], 0x00)
})
})
describe("writeOID()", function() {
it("can write a value", function() {
var writer = new BerWriter()
writer.writeOID("1.2.840.113549.1.1.1")
var buffer = writer.buffer
assert.equal(buffer.toString("hex"), "06092a864886f70d010101")
})
})
})