react / wstein / node_modules / browserify / node_modules / crypto-browserify / node_modules / public-encrypt / node_modules / parse-asn1 / node_modules / asn1.js / test / use-test.js
80620 viewsvar assert = require('assert');1var asn1 = require('..');2var bn = asn1.bignum;3var fixtures = require('./fixtures');4var jsonEqual = fixtures.jsonEqual;56var Buffer = require('buffer').Buffer;78describe('asn1.js models', function() {9describe('plain use', function() {10it('should encode submodel', function() {11var SubModel = asn1.define('SubModel', function() {12this.seq().obj(13this.key('b').octstr()14);15});16var Model = asn1.define('Model', function() {17this.seq().obj(18this.key('a').int(),19this.key('sub').use(SubModel)20);21});2223var data = {a: new bn(1), sub: {b: new Buffer("XXX")}};24var wire = Model.encode(data, 'der');25assert.equal(wire.toString('hex'), '300a02010130050403585858');26var back = Model.decode(wire, 'der');27jsonEqual(back, data);28});2930it('should honour implicit tag from parent', function() {31var SubModel = asn1.define('SubModel', function() {32this.seq().obj(33this.key('x').octstr()34)35});36var Model = asn1.define('Model', function() {37this.seq().obj(38this.key('a').int(),39this.key('sub').use(SubModel).implicit(0)40);41});4243var data = {a: new bn(1), sub: {x: new Buffer("123")}};44var wire = Model.encode(data, 'der');45assert.equal(wire.toString('hex'), '300a020101a0050403313233');46var back = Model.decode(wire, 'der');47jsonEqual(back, data);48});4950it('should honour explicit tag from parent', function() {51var SubModel = asn1.define('SubModel', function() {52this.seq().obj(53this.key('x').octstr()54)55});56var Model = asn1.define('Model', function() {57this.seq().obj(58this.key('a').int(),59this.key('sub').use(SubModel).explicit(0)60);61});6263var data = {a: new bn(1), sub: {x: new Buffer("123")}};64var wire = Model.encode(data, 'der');65assert.equal(wire.toString('hex'), '300c020101a00730050403313233');66var back = Model.decode(wire, 'der');67jsonEqual(back, data);6869});7071it('should get model with function call', function() {72var SubModel = asn1.define('SubModel', function() {73this.seq().obj(74this.key('x').octstr()75)76});77var Model = asn1.define('Model', function() {78this.seq().obj(79this.key('a').int(),80this.key('sub').use(function(obj) {81assert.equal(obj.a, 1);82return SubModel;83})84);85});8687var data = {a: new bn(1), sub: {x: new Buffer("123")}};88var wire = Model.encode(data, 'der');89assert.equal(wire.toString('hex'), '300a02010130050403313233');90var back = Model.decode(wire, 'der');91jsonEqual(back, data);9293});9495it('should support recursive submodels', function() {96var PlainSubModel = asn1.define('PlainSubModel', function() {97this.int();98});99var RecursiveModel = asn1.define('RecursiveModel', function() {100this.seq().obj(101this.key('plain').bool(),102this.key('content').use(function(obj) {103if(obj.plain) {104return PlainSubModel;105} else {106return RecursiveModel;107}108})109);110});111112var data = {113'plain': false,114'content': {115'plain': true,116'content': new bn(1)117}118};119var wire = RecursiveModel.encode(data, 'der');120assert.equal(wire.toString('hex'), '300b01010030060101ff020101');121var back = RecursiveModel.decode(wire, 'der');122jsonEqual(back, data);123});124125});126});127128129130