123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
-
- var asn1 = require("../")
- var assert = require("assert")
-
- var BerReader = asn1.BerReader
-
- describe("lib/ber/reader.js", function() {
- describe("readByte()", function() {
- it("can read a value", function() {
- var reader = new BerReader(Buffer.from([0xde]))
- assert.equal(reader.readByte(), 0xde)
- })
- })
-
- describe("readInt()", function() {
- it("can read zero", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x01, 0x00]))
- assert.equal(reader.readInt(), 0)
- assert.equal(reader.length, 1)
- })
-
- it("can read a 1 byte positive integer - lowest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x01, 0x01]))
- assert.equal(reader.readInt(), 1)
- assert.equal(reader.length, 1)
- })
-
- it("can read a 1 byte positive integer - middle", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x01, 0x34]))
- assert.equal(reader.readInt(), 52)
- assert.equal(reader.length, 1)
- })
-
- it("can read a 1 byte positive integer - highest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x01, 0x7f]))
- assert.equal(reader.readInt(), 127)
- assert.equal(reader.length, 1)
- })
-
- it("can read a 2 byte positive integer - lowest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x02, 0x00, 0x80]))
- assert.equal(reader.readInt(), 128)
- assert.equal(reader.length, 2)
- })
-
- it("can read a 2 byte positive integer - middle", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x02, 0x7e, 0xde]))
- assert.equal(reader.readInt(), 0x7ede)
- assert.equal(reader.length, 2)
- })
-
- it("can read a 2 byte positive integer - highest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x02, 0x7f, 0xff]))
- assert.equal(reader.readInt(), 32767)
- assert.equal(reader.length, 2)
- })
-
- it("can read a 3 byte positive integer - lowest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x03, 0x00, 0x80, 0x00]))
- assert.equal(reader.readInt(), 32768)
- assert.equal(reader.length, 3)
- })
-
- it("can read a 3 byte positive integer - middle", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x03, 0x7e, 0xde, 0x03]))
- assert.equal(reader.readInt(), 8314371)
- assert.equal(reader.length, 3)
- })
-
- it("can read a 3 byte positive integer - highest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x03, 0x7e, 0xde, 0x03]))
- assert.equal(reader.readInt(), 0x7ede03)
- assert.equal(reader.length, 0x03)
- })
-
- it("can read a 4 byte positive integer - lowest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x04, 0x00, 0x80, 0x00, 0x00]))
- assert.equal(reader.readInt(), 8388608)
- assert.equal(reader.length, 4)
- })
-
- it("can read a 4 byte positive integer - middle", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x04, 0x7e, 0xde, 0x03, 0x01]))
- assert.equal(reader.readInt(), 2128478977)
- assert.equal(reader.length, 4)
- })
-
- it("can read a 4 byte positive integer - highest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x04, 0x7f, 0xff, 0xff, 0xff]))
- assert.equal(reader.readInt(), 2147483647)
- assert.equal(reader.length, 4)
- })
-
- it("can read a 5 byte positive integer - lowest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x05, 0x00, 0x80, 0x00, 0x00, 0x00]))
- assert.equal(reader.readInt(), 2147483648)
- assert.equal(reader.length, 5)
- })
-
- it("can read a 5 byte positive integer - middle", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x05, 0x00, 0x8b, 0xde, 0x03, 0x01]))
- assert.equal(reader.readInt(), 2346582785)
- assert.equal(reader.length, 5)
- })
-
- it("can read a 5 byte positive integer - highest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x05, 0x00, 0xff, 0xff, 0xff, 0xff]))
- assert.equal(reader.readInt(), 4294967295)
- assert.equal(reader.length, 5)
- })
-
- it("can read a 1 byte negative integer - lowest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x01, 0x80]))
- assert.equal(reader.readInt(), -128)
- assert.equal(reader.length, 1)
- })
-
- it("can read a 1 byte negative integer - middle", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x01, 0xdc]))
- assert.equal(reader.readInt(), -36)
- assert.equal(reader.length, 1)
- })
-
- it("can read a 1 byte negative integer - highest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x01, 0xff]))
- assert.equal(reader.readInt(), -1)
- assert.equal(reader.length, 1)
- })
-
- it("can read a 2 byte negative integer - lowest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x02, 0x80, 0x00]))
- assert.equal(reader.readInt(), -32768)
- assert.equal(reader.length, 2)
- })
-
- it("can read a 2 byte negative integer - middle", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x02, 0xc0, 0x4e]))
- assert.equal(reader.readInt(), -16306)
- assert.equal(reader.length, 2)
- })
-
- it("can read a 2 byte negative integer - highest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x02, 0xff, 0x7f]))
- assert.equal(reader.readInt(), -129)
- assert.equal(reader.length, 2)
- })
-
- it("can read a 3 byte negative integer - lowest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x03, 0x80, 0x00, 0x00]))
- assert.equal(reader.readInt(), -8388608)
- assert.equal(reader.length, 3)
- })
-
- it("can read a 3 byte negative integer - middle", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x03, 0xff, 0x00, 0x19]))
- assert.equal(reader.readInt(), -65511)
- assert.equal(reader.length, 3)
- })
-
- it("can read a 3 byte negative integer - highest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x03, 0xff, 0x7f, 0xff]))
- assert.equal(reader.readInt(), -32769)
- assert.equal(reader.length, 3)
- })
-
- it("can read a 4 byte negative integer - lowest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x04, 0x80, 0x00, 0x00, 0x00]))
- assert.equal(reader.readInt(), -2147483648)
- assert.equal(reader.length, 4)
- })
-
- it("can read a 4 byte negative integer - middle", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x04, 0x91, 0x7c, 0x22, 0x1f]))
- assert.equal(reader.readInt(), -1854135777)
- assert.equal(reader.length, 4)
- })
-
- it("can read a 4 byte negative integer - highest", function() {
- var reader = new BerReader(Buffer.from([0x02, 0x04, 0xff, 0x7f, 0xff, 0xff]))
- assert.equal(reader.readInt(), -8388609)
- assert.equal(reader.length, 4)
- })
- })
-
- describe("readBoolean()", function() {
- it("can read a true value", function() {
- var reader = new BerReader(Buffer.from([0x01, 0x01, 0xff]))
- assert.equal(reader.readBoolean(), true)
- assert.equal(reader.length, 0x01)
- })
-
- it("can read a false value", function() {
- var reader = new BerReader(Buffer.from([0x01, 0x01, 0x00]))
- assert.equal(reader.readBoolean(), false)
- assert.equal(reader.length, 0x01)
- })
- })
-
- describe("readEnumeration()", function() {
- it("can read a value", function() {
- var reader = new BerReader(Buffer.from([0x0a, 0x01, 0x20]))
- assert.equal(reader.readEnumeration(), 0x20, 'wrong value')
- assert.equal(reader.length, 0x01, 'wrong length')
- })
- })
-
- describe("readOID()", function() {
- it("does not convert to unsigned", function() {
- // Make sure 2887117176 is NOT converted to -1407850120
- var buffer = Buffer.from([6, 18, 43, 6, 1, 4, 1, 245, 12, 1, 1, 5, 1, 1, 19, 138, 224, 215, 210, 120])
- var reader = new BerReader(buffer)
- assert.equal(reader.readOID(), "1.3.6.1.4.1.14988.1.1.5.1.1.19.2887117176")
- assert.equal(reader.length, 18)
- })
- })
-
- describe("readString()", function() {
- it("can read a value", function() {
- var string = 'cn=foo,ou=unit,o=test'
- var buffer = Buffer.alloc(string.length + 2)
- buffer[0] = 0x04
- buffer[1] = Buffer.byteLength(string)
- buffer.write(string, 2)
-
- var reader = new BerReader(buffer)
- assert.equal(reader.readString(), string)
- assert.equal(reader.length, string.length)
- })
- })
-
- describe("readSequence()", function() {
- it("can read a sequence", function() {
- var reader = new BerReader(Buffer.from([0x30, 0x03, 0x01, 0x01, 0xff]))
- assert.equal(reader.readSequence(), 0x30)
- assert.equal(reader.length, 0x03)
- assert.equal(reader.readBoolean(), true)
- assert.equal(reader.length, 0x01)
- })
- })
-
- describe("readBitString()", function() {
- it("can read a bit string", function() {
- var reader = new BerReader(Buffer.from([0x03, 0x07, 0x04, 0x0a, 0x3b, 0x5f, 0x29, 0x1c, 0xd0]))
- assert.equal(reader.readBitString(), '00001010001110110101111100101001000111001101')
- assert.equal(reader.length, 7)
- })
- })
-
- describe("complex sequences", function() {
- it("are processed correctly", function() {
- var buffer = Buffer.alloc(14);
-
- // An anonymous LDAP v3 BIND request
- buffer[0] = 0x30 // Sequence
- buffer[1] = 12 // len
- buffer[2] = 0x02 // ASN.1 Integer
- buffer[3] = 1 // len
- buffer[4] = 0x04 // msgid (make up 4)
- buffer[5] = 0x60 // Bind Request
- buffer[6] = 7 // len
- buffer[7] = 0x02 // ASN.1 Integer
- buffer[8] = 1 // len
- buffer[9] = 0x03 // v3
- buffer[10] = 0x04 // String (bind dn)
- buffer[11] = 0 // len
- buffer[12] = 0x80 // ContextSpecific (choice)
- buffer[13] = 0 // simple bind
-
- var reader = new BerReader(buffer)
- assert.equal(reader.readSequence(), 48)
- assert.equal(reader.length, 12)
- assert.equal(reader.readInt(), 4)
- assert.equal(reader.readSequence(), 96)
- assert.equal(reader.length, 7)
- assert.equal(reader.readInt(), 3)
- assert.equal(reader.readString(), "")
- assert.equal(reader.length, 0)
- assert.equal(reader.readByte(), 0x80)
- assert.equal(reader.readByte(), 0)
- assert.equal(null, reader.readByte())
- })
- })
-
- describe("long strings", function() {
- it("can be parsed", function() {
- var buffer = Buffer.alloc(256)
- var string = "2;649;CN=Red Hat CS 71GA Demo,O=Red Hat CS 71GA Demo,C=US;"
- + "CN=RHCS Agent - admin01,UID=admin01,O=redhat,C=US [1] This is "
- + "Teena Vradmin's description."
- buffer[0] = 0x04
- buffer[1] = 0x81
- buffer[2] = 0x94
- buffer.write(string, 3)
-
- var reader = new BerReader(buffer.slice(0, 3 + string.length));
- assert.equal(reader.readString(), string)
- })
- })
- })
|