{"version":3,"sources":["webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/async-validator/dist-web/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/base/node.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/assert/assert.js"],"names":["constants","exports","_reverse","map","res","Object","keys","forEach","key","value","der","r","decoders","pem","_extends","assign","target","i","arguments","length","source","prototype","hasOwnProperty","call","apply","this","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","p","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","e","_construct","Parent","args","Class","a","push","instance","Function","bind","_wrapNativeSuper","_cache","Map","fn","toString","indexOf","_isNativeFunction","TypeError","has","get","set","Wrapper","constructor","create","enumerable","writable","configurable","formatRegExp","convertFieldsError","errors","fields","error","field","format","_len","Array","_key","f","len","slice","str","String","replace","x","Number","JSON","stringify","_","isEmptyValue","type","isArray","isNativeStringType","asyncSerialArray","arr","func","callback","index","arrLength","next","original","process","AsyncValidationError","_Error","_this","subClass","superClass","_inheritsLoose","Error","asyncMap","objArr","option","first","_pending","Promise","resolve","reject","flattenArr","ret","k","flattenObjArr","firstFields","objArrKeys","objArrLength","total","results","pending","count","asyncParallelArray","complementError","rule","oe","message","fullField","deepMerge","s","required","options","messages","pattern","email","url","RegExp","hex","types","integer","number","parseInt","array","regexp","date","getTime","getMonth","getYear","isNaN","object","method","match","ENUM","rules","whitespace","test","ruleType","range","min","max","val","num","join","lastIndex","mismatch","type$1","validators","string","ENUM$1","dateObject","Date","any","newMessages","parse","invalid","clone","cloned","Schema","descriptor","_messages","define","z","item","validate","source_","oc","messages$1","series","transform","validator","getValidationMethod","getType","errorFields","data","doIt","deep","defaultField","addFullfield","schema","cb","suppressWarning","warning","concat","fieldsSchema","fieldSchema","errs","finalErrors","asyncValidator","then","add","_errors","complete","messageIndex","splice","register","encoders","inherits","Buffer","Node","DEREncoder","entity","enc","name","tree","DERNode","_init","body","parent","two","encodeTag","tag","primitive","cls","reporter","tagByName","tagClassByName","module","encode","_encode","_encodeComposite","content","encodedTag","header","alloc","_createEncoderBuffer","lenOctets","j","_encodeStr","unused","buf","writeUInt16BE","charCodeAt","_isNumstr","_isPrintstr","_encodeObjid","id","values","relative","split","size","ident","objid","offset","_encodeTime","time","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","_encodeNull","_encodeInt","isBuffer","numArray","toArray","sign","unshift","from","out","copy","_encodeBool","_use","obj","_getEncoder","_skipDefault","dataBuffer","state","_baseState","defaultBuffer","_encodeValue","base","Reporter","DecoderBuffer","EncoderBuffer","isEncoderBuffer","byteLength","isDecoderBuffer","save","restore","isEmpty","readUInt8","skip","raw","fail","bytes","_reporterState","write","asn1","bignum","assert","tags","methods","children","reverseArgs","choice","optional","use","useDecoder","explicit","implicit","contains","_wrap","stateProps","cstate","prop","filter","child","equal","_useArgs","arg","def","newKey","_decode","input","wrapResult","prevObj","result","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","start","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","some","node","_encodeChoice","_encodePrimitive","PEMEncoder","label","reverse","tagClass","0","1","2","3","DERDecoder","PEMDecoder","decode","lines","toUpperCase","re","end","base64","derDecodeTag","oct","tagStr","derDecodeLen","buffer","decodedTag","_skipUntilEnd","decoder","possibleEnd","fromCharCode","readUInt16BE","numstr","printstr","identifiers","subident","second","tmp","year","mon","day","hour","sec","UTC","_getDecoder","ReporterError","msg","rethrow","pathLen","prev","now","err","inherited","elem","stack","partial","captureStackTrace","Entity","_createNamed","Base","Generated","_initNamed","objectAssign","compare","b","y","Math","global","_isBuffer","util","hasOwn","pSlice","functionsHaveNames","pToString","isView","arrbuf","ArrayBuffer","DataView","ok","regex","getName","isFunction","truncate","n","inspect","something","rawname","actual","expected","operator","stackStartFunction","AssertionError","_deepEqual","strict","memos","isDate","isRegExp","multiline","ignoreCase","Float32Array","Float64Array","Uint8Array","actualIndex","actualVisitedObjects","isPrimitive","aIsArgs","isArguments","bIsArgs","ka","objectKeys","kb","sort","objEquiv","expectedException","isPrototypeOf","_throws","shouldThrow","block","_tryBlock","userProvidedMessage","isUnexpectedException","generatedMessage","self","getMessage","fn_name","idx","next_line","substring","notEqual","deepEqual","deepStrictEqual","notDeepEqual","notDeepStrictEqual","strictEqual","notStrictEqual","throws","doesNotThrow","ifError"],"mappings":"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","file":"js/chunk-vendors~45a04bff.9100811b.js","sourcesContent":["'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\n/* eslint no-console:0 */\nvar formatRegExp = /%[sdj%]/g;\nvar warning = function warning() {}; // don't print warning message when in production env or node runtime\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {\n warning = function warning(type, errors) {\n if (typeof console !== 'undefined' && console.warn) {\n if (errors.every(function (e) {\n return typeof e === 'string';\n })) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nfunction convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n var fields = {};\n errors.forEach(function (error) {\n var field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\nfunction format() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var i = 1;\n var f = args[0];\n var len = args.length;\n\n if (typeof f === 'function') {\n return f.apply(null, args.slice(1));\n }\n\n if (typeof f === 'string') {\n var str = String(f).replace(formatRegExp, function (x) {\n if (x === '%%') {\n return '%';\n }\n\n if (i >= len) {\n return x;\n }\n\n switch (x) {\n case '%s':\n return String(args[i++]);\n\n case '%d':\n return Number(args[i++]);\n\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n\n break;\n\n default:\n return x;\n }\n });\n return str;\n }\n\n return f;\n}\n\nfunction isNativeStringType(type) {\n return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern';\n}\n\nfunction isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n\n return false;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n var results = [];\n var total = 0;\n var arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors);\n total++;\n\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(function (a) {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n var index = 0;\n var arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n\n var original = index;\n index = index + 1;\n\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n var ret = [];\n Object.keys(objArr).forEach(function (k) {\n ret.push.apply(ret, objArr[k]);\n });\n return ret;\n}\n\nvar AsyncValidationError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(AsyncValidationError, _Error);\n\n function AsyncValidationError(errors, fields) {\n var _this;\n\n _this = _Error.call(this, 'Async Validation Error') || this;\n _this.errors = errors;\n _this.fields = fields;\n return _this;\n }\n\n return AsyncValidationError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\nfunction asyncMap(objArr, option, func, callback) {\n if (option.first) {\n var _pending = new Promise(function (resolve, reject) {\n var next = function next(errors) {\n callback(errors);\n return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve();\n };\n\n var flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n\n _pending[\"catch\"](function (e) {\n return e;\n });\n\n return _pending;\n }\n\n var firstFields = option.firstFields || [];\n\n if (firstFields === true) {\n firstFields = Object.keys(objArr);\n }\n\n var objArrKeys = Object.keys(objArr);\n var objArrLength = objArrKeys.length;\n var total = 0;\n var results = [];\n var pending = new Promise(function (resolve, reject) {\n var next = function next(errors) {\n results.push.apply(results, errors);\n total++;\n\n if (total === objArrLength) {\n callback(results);\n return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve();\n }\n };\n\n if (!objArrKeys.length) {\n callback(results);\n resolve();\n }\n\n objArrKeys.forEach(function (key) {\n var arr = objArr[key];\n\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending[\"catch\"](function (e) {\n return e;\n });\n return pending;\n}\nfunction complementError(rule) {\n return function (oe) {\n if (oe && oe.message) {\n oe.field = oe.field || rule.fullField;\n return oe;\n }\n\n return {\n message: typeof oe === 'function' ? oe() : oe,\n field: oe.field || rule.fullField\n };\n };\n}\nfunction deepMerge(target, source) {\n if (source) {\n for (var s in source) {\n if (source.hasOwnProperty(s)) {\n var value = source[s];\n\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = _extends({}, target[s], value);\n } else {\n target[s] = value;\n }\n }\n }\n }\n\n return target;\n}\n\n/**\n * Rule for validating required fields.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction required(rule, value, source, errors, options, type) {\n if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {\n errors.push(format(options.messages.required, rule.fullField));\n }\n}\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(format(options.messages.whitespace, rule.fullField));\n }\n}\n\n/* eslint max-len:0 */\n\nvar pattern = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n url: new RegExp(\"^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$\", 'i'),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i\n};\nvar types = {\n integer: function integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n \"float\": function float(value) {\n return types.number(value) && !types.integer(value);\n },\n array: function array(value) {\n return Array.isArray(value);\n },\n regexp: function regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date: function date(value) {\n return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime());\n },\n number: function number(value) {\n if (isNaN(value)) {\n return false;\n }\n\n return typeof value === 'number';\n },\n object: function object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method: function method(value) {\n return typeof value === 'function';\n },\n email: function email(value) {\n return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;\n },\n url: function url(value) {\n return typeof value === 'string' && !!value.match(pattern.url);\n },\n hex: function hex(value) {\n return typeof value === 'string' && !!value.match(pattern.hex);\n }\n};\n/**\n * Rule for validating the type of a value.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required(rule, value, source, errors, options);\n return;\n }\n\n var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];\n var ruleType = rule.type;\n\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n } // straight typeof check\n\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n }\n}\n\n/**\n * Rule for validating minimum and maximum allowed values.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction range(rule, value, source, errors, options) {\n var len = typeof rule.len === 'number';\n var min = typeof rule.min === 'number';\n var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n\n var spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var val = value;\n var key = null;\n var num = typeof value === 'number';\n var str = typeof value === 'string';\n var arr = Array.isArray(value);\n\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n } // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n\n\n if (!key) {\n return false;\n }\n\n if (arr) {\n val = value.length;\n }\n\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n\n if (len) {\n if (val !== rule.len) {\n errors.push(format(options.messages[key].len, rule.fullField, rule.len));\n }\n } else if (min && !max && val < rule.min) {\n errors.push(format(options.messages[key].min, rule.fullField, rule.min));\n } else if (max && !min && val > rule.max) {\n errors.push(format(options.messages[key].max, rule.fullField, rule.max));\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));\n }\n}\n\nvar ENUM = 'enum';\n/**\n * Rule for validating a value exists in an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction enumerable(rule, value, source, errors, options) {\n rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n\n if (rule[ENUM].indexOf(value) === -1) {\n errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));\n }\n}\n\n/**\n * Rule for validating a regular expression pattern.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction pattern$1(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n\n if (!rule.pattern.test(value)) {\n errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n }\n } else if (typeof rule.pattern === 'string') {\n var _pattern = new RegExp(rule.pattern);\n\n if (!_pattern.test(value)) {\n errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n }\n }\n }\n}\n\nvar rules = {\n required: required,\n whitespace: whitespace,\n type: type,\n range: range,\n \"enum\": enumerable,\n pattern: pattern$1\n};\n\n/**\n * Performs validation for string types.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction string(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, 'string');\n\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n\n callback(errors);\n}\n\n/**\n * Validates a function.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction method(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\n/**\n * Validates a number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction number(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\n/**\n * Validates a boolean.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction _boolean(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\n/**\n * Validates the regular expression type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction regexp(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\n/**\n * Validates a number is an integer.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction integer(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\n/**\n * Validates a number is a floating point number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction floatFn(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\n/**\n * Validates an array.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction array(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if ((value === undefined || value === null) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, 'array');\n\n if (value !== undefined && value !== null) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\n/**\n * Validates an object.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction object(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\nvar ENUM$1 = 'enum';\n/**\n * Validates an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction enumerable$1(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules[ENUM$1](rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\n/**\n * Validates a regular expression pattern.\n *\n * Performs validation when a rule only contains\n * a pattern property but is not declared as a string type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction pattern$2(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\nfunction date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value);\n\n if (validate) {\n if (isEmptyValue(value, 'date') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value, 'date')) {\n var dateObject;\n\n if (value instanceof Date) {\n dateObject = value;\n } else {\n dateObject = new Date(value);\n }\n\n rules.type(rule, dateObject, source, errors, options);\n\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n\n callback(errors);\n}\n\nfunction required$1(rule, value, callback, source, options) {\n var errors = [];\n var type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n}\n\nfunction type$1(rule, value, callback, source, options) {\n var ruleType = rule.type;\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, ruleType);\n\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n}\n\n/**\n * Performs validation for any type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nfunction any(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n }\n\n callback(errors);\n}\n\nvar validators = {\n string: string,\n method: method,\n number: number,\n \"boolean\": _boolean,\n regexp: regexp,\n integer: integer,\n \"float\": floatFn,\n array: array,\n object: object,\n \"enum\": enumerable$1,\n pattern: pattern$2,\n date: date,\n url: type$1,\n hex: type$1,\n email: type$1,\n required: required$1,\n any: any\n};\n\nfunction newMessages() {\n return {\n \"default\": 'Validation error on field %s',\n required: '%s is required',\n \"enum\": '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid'\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n \"boolean\": '%s is not a %s',\n integer: '%s is not an %s',\n \"float\": '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s'\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters'\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s'\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length'\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s'\n },\n clone: function clone() {\n var cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n }\n };\n}\nvar messages = newMessages();\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\n\nfunction Schema(descriptor) {\n this.rules = null;\n this._messages = messages;\n this.define(descriptor);\n}\n\nSchema.prototype = {\n messages: function messages(_messages) {\n if (_messages) {\n this._messages = deepMerge(newMessages(), _messages);\n }\n\n return this._messages;\n },\n define: function define(rules) {\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n\n this.rules = {};\n var z;\n var item;\n\n for (z in rules) {\n if (rules.hasOwnProperty(z)) {\n item = rules[z];\n this.rules[z] = Array.isArray(item) ? item : [item];\n }\n }\n },\n validate: function validate(source_, o, oc) {\n var _this = this;\n\n if (o === void 0) {\n o = {};\n }\n\n if (oc === void 0) {\n oc = function oc() {};\n }\n\n var source = source_;\n var options = o;\n var callback = oc;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback();\n }\n\n return Promise.resolve();\n }\n\n function complete(results) {\n var i;\n var errors = [];\n var fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n var _errors;\n\n errors = (_errors = errors).concat.apply(_errors, e);\n } else {\n errors.push(e);\n }\n }\n\n for (i = 0; i < results.length; i++) {\n add(results[i]);\n }\n\n if (!errors.length) {\n errors = null;\n fields = null;\n } else {\n fields = convertFieldsError(errors);\n }\n\n callback(errors, fields);\n }\n\n if (options.messages) {\n var messages$1 = this.messages();\n\n if (messages$1 === messages) {\n messages$1 = newMessages();\n }\n\n deepMerge(messages$1, options.messages);\n options.messages = messages$1;\n } else {\n options.messages = this.messages();\n }\n\n var arr;\n var value;\n var series = {};\n var keys = options.keys || Object.keys(this.rules);\n keys.forEach(function (z) {\n arr = _this.rules[z];\n value = source[z];\n arr.forEach(function (r) {\n var rule = r;\n\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = _extends({}, source);\n }\n\n value = source[z] = rule.transform(value);\n }\n\n if (typeof rule === 'function') {\n rule = {\n validator: rule\n };\n } else {\n rule = _extends({}, rule);\n }\n\n rule.validator = _this.getValidationMethod(rule);\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = _this.getType(rule);\n\n if (!rule.validator) {\n return;\n }\n\n series[z] = series[z] || [];\n series[z].push({\n rule: rule,\n value: value,\n source: source,\n field: z\n });\n });\n });\n var errorFields = {};\n return asyncMap(series, options, function (data, doIt) {\n var rule = data.rule;\n var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');\n deep = deep && (rule.required || !rule.required && data.value);\n rule.field = data.field;\n\n function addFullfield(key, schema) {\n return _extends({}, schema, {\n fullField: rule.fullField + \".\" + key\n });\n }\n\n function cb(e) {\n if (e === void 0) {\n e = [];\n }\n\n var errors = e;\n\n if (!Array.isArray(errors)) {\n errors = [errors];\n }\n\n if (!options.suppressWarning && errors.length) {\n Schema.warning('async-validator:', errors);\n }\n\n if (errors.length && rule.message !== undefined) {\n errors = [].concat(rule.message);\n }\n\n errors = errors.map(complementError(rule));\n\n if (options.first && errors.length) {\n errorFields[rule.field] = 1;\n return doIt(errors);\n }\n\n if (!deep) {\n doIt(errors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message !== undefined) {\n errors = [].concat(rule.message).map(complementError(rule));\n } else if (options.error) {\n errors = [options.error(rule, format(options.messages.required, rule.field))];\n }\n\n return doIt(errors);\n }\n\n var fieldsSchema = {};\n\n if (rule.defaultField) {\n for (var k in data.value) {\n if (data.value.hasOwnProperty(k)) {\n fieldsSchema[k] = rule.defaultField;\n }\n }\n }\n\n fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);\n\n for (var f in fieldsSchema) {\n if (fieldsSchema.hasOwnProperty(f)) {\n var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];\n fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n }\n }\n\n var schema = new Schema(fieldsSchema);\n schema.messages(options.messages);\n\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n\n schema.validate(data.value, data.rule.options || options, function (errs) {\n var finalErrors = [];\n\n if (errors && errors.length) {\n finalErrors.push.apply(finalErrors, errors);\n }\n\n if (errs && errs.length) {\n finalErrors.push.apply(finalErrors, errs);\n }\n\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n var res;\n\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n res = rule.validator(rule, data.value, cb, data.source, options);\n\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(rule.message || rule.field + \" fails\");\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n\n if (res && res.then) {\n res.then(function () {\n return cb();\n }, function (e) {\n return cb(e);\n });\n }\n }, function (results) {\n complete(results);\n });\n },\n getType: function getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n\n if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n\n return rule.type || 'string';\n },\n getValidationMethod: function getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n\n var keys = Object.keys(rule);\n var messageIndex = keys.indexOf('message');\n\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n\n return validators[this.getType(rule)] || false;\n }\n};\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error('Cannot register a validator by type, validator is not a function');\n }\n\n validators[type] = validator;\n};\n\nSchema.warning = warning;\nSchema.messages = messages;\nSchema.validators = validators;\n\nexport default Schema;\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n"],"sourceRoot":""}