@topgunbuild/webcrypto
Version:
An isomorphic WebCrypto for Javascript in Node and the browser
5 lines • 148 kB
JavaScript
"use strict";var TopGunWebCrypto=(()=>{var ii=Object.create;var Ft=Object.defineProperty;var oi=Object.getOwnPropertyDescriptor;var ai=Object.getOwnPropertyNames;var ci=Object.getPrototypeOf,ui=Object.prototype.hasOwnProperty;var Gr=(i=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+i+'" is not supported')});var Fn=(i,e)=>{for(var t in e)Ft(i,t,{get:e[t],enumerable:!0})},Jn=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ai(e))!ui.call(i,n)&&n!==t&&Ft(i,n,{get:()=>e[n],enumerable:!(r=oi(e,n))||r.enumerable});return i};var qr=(i,e,t)=>(t=i!=null?ii(ci(i)):{},Jn(e||!i||!i.__esModule?Ft(t,"default",{value:i,enumerable:!0}):t,i)),li=i=>Jn(Ft({},"__esModule",{value:!0}),i);var ho={};Fn(ho,{default:()=>lo});var hi="[object ArrayBuffer]",f=class{static isArrayBuffer(e){return Object.prototype.toString.call(e)===hi}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e).slice().buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let r=f.toUint8Array(e),n=f.toUint8Array(t);if(r.length!==n.byteLength)return!1;for(let s=0;s<r.length;s++)if(r[s]!==n[s])return!1;return!0}static concat(...e){if(Array.isArray(e[0])){let t=e[0],r=0;for(let o of t)r+=o.byteLength;let n=new Uint8Array(r),s=0;for(let o of t){let a=this.toUint8Array(o);n.set(a,s),s+=a.length}return e[1]?this.toView(n,e[1]):n.buffer}else return this.concat(e)}},Jt=class{static fromString(e){let t=unescape(encodeURIComponent(e)),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r.buffer}static toString(e){let t=f.toUint8Array(e),r="";for(let s=0;s<t.length;s++)r+=String.fromCharCode(t[s]);return decodeURIComponent(escape(r))}},re=class{static toString(e,t=!1){let r=f.toArrayBuffer(e),n=new DataView(r),s="";for(let o=0;o<r.byteLength;o+=2){let a=n.getUint16(o,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let r=new ArrayBuffer(e.length*2),n=new DataView(r);for(let s=0;s<e.length;s++)n.setUint16(s*2,e.charCodeAt(s),t);return r}},w=class{static isHex(e){return typeof e=="string"&&/^[a-z0-9]+$/i.test(e)}static isBase64(e){return typeof e=="string"&&/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}static isBase64Url(e){return typeof e=="string"&&/^[a-zA-Z0-9-_]+$/i.test(e)}static ToString(e,t="utf8"){let r=f.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(r);case"binary":return this.ToBinary(r);case"hex":return this.ToHex(r);case"base64":return this.ToBase64(r);case"base64url":return this.ToBase64Url(r);case"utf16le":return re.toString(r,!0);case"utf16":case"utf16be":return re.toString(r);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return re.fromString(e,!0);case"utf16":case"utf16be":return re.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=f.toUint8Array(e);if(typeof btoa<"u"){let r=this.ToString(t,"binary");return btoa(r)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!w.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!w.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=w.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return Jt.fromString(e);case"utf16":case"utf16be":return re.fromString(e);case"utf16le":case"usc2":return re.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=w.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return Jt.toString(e);case"utf16":case"utf16be":return re.toString(e);case"utf16le":case"usc2":return re.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,r=new Uint8Array(t);for(let n=0;n<t;n++)r[n]=e.charCodeAt(n);return r.buffer}static ToBinary(e){let t=f.toUint8Array(e),r="";for(let n=0;n<t.length;n++)r+=String.fromCharCode(t[n]);return r}static ToHex(e){let t=f.toUint8Array(e),r="",n=[],s=t.length;for(let o=0;o<s;o++){let a=t[o].toString(16).padStart(2,"0");n.push(a)}return n.join(r)}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!w.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let r=new Uint8Array(t.length/2);for(let n=0;n<t.length;n=n+2){let s=t.slice(n,n+2);r[n/2]=parseInt(s,16)}return r.buffer}static ToUtf16String(e,t=!1){return re.toString(e,t)}static FromUtf16String(e,t=!1){return re.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let r=0;r<t;r++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};w.DEFAULT_UTF8_ENCODING="utf8";function Wr(...i){let e=i.map(n=>n.byteLength).reduce((n,s)=>n+s),t=new Uint8Array(e),r=0;return i.map(n=>new Uint8Array(n)).forEach(n=>{for(let s of n)t[r++]=s}),t.buffer}var he={};Fn(he,{Any:()=>we,BaseBlock:()=>P,BaseStringBlock:()=>Bt,BitString:()=>Ue,BmpString:()=>Me,Boolean:()=>_e,CharacterString:()=>Ze,Choice:()=>ut,Constructed:()=>T,DATE:()=>Kt,DateTime:()=>Ut,Duration:()=>It,EndOfContent:()=>kt,Enumerated:()=>$e,GeneralString:()=>Xe,GeneralizedTime:()=>Qe,GraphicString:()=>Ye,HexBlock:()=>ve,IA5String:()=>We,Integer:()=>$,Null:()=>ue,NumericString:()=>Je,ObjectIdentifier:()=>je,OctetString:()=>me,Primitive:()=>ke,PrintableString:()=>ze,RawData:()=>Zr,RelativeObjectIdentifier:()=>Ct,Repeated:()=>et,Sequence:()=>q,Set:()=>W,TIME:()=>Ot,TeletexString:()=>Ge,TimeOfDay:()=>Nt,UTCTime:()=>Oe,UniversalString:()=>Fe,Utf8String:()=>ne,ValueBlock:()=>_,VideotexString:()=>qe,ViewWriter:()=>ct,VisibleString:()=>Ie,compareSchema:()=>Ne,fromBER:()=>xe,verifySchema:()=>Ei});function De(i,e){let t=0;if(i.length===1)return i[0];for(let r=i.length-1;r>=0;r--)t+=i[i.length-1-r]*Math.pow(2,e*r);return t}function Ke(i,e,t=-1){let r=t,n=i,s=0,o=Math.pow(2,e);for(let a=1;a<8;a++){if(i<o){let c;if(r<0)c=new ArrayBuffer(a),s=a;else{if(r<a)return new ArrayBuffer(0);c=new ArrayBuffer(r),s=r}let u=new Uint8Array(c);for(let h=a-1;h>=0;h--){let l=Math.pow(2,h*e);u[s-h-1]=Math.floor(n/l),n-=u[s-h-1]*l}return c}o*=Math.pow(2,e)}return new ArrayBuffer(0)}function zt(...i){let e=0,t=0;for(let s of i)e+=s.length;let r=new ArrayBuffer(e),n=new Uint8Array(r);for(let s of i)n.set(s,t),t+=s.length;return n}function Yr(){let i=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=i[0]===255&&i[1]&128,c=i[0]===0&&(i[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=i[0]&128;let r=De(t,8),n=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(n);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=i[a];return s[0]&=127,De(s,8)-r}function zn(i){let e=i<0?i*-1:i,t=128;for(let r=1;r<8;r++){if(e<=t){if(i<0){let o=t-e,a=Ke(o,8,r),c=new Uint8Array(a);return c[0]|=128,a}let n=Ke(e,8,r),s=new Uint8Array(n);if(s[0]&128){let o=n.slice(0),a=new Uint8Array(o);n=new ArrayBuffer(n.byteLength+1),s=new Uint8Array(n);for(let c=0;c<o.byteLength;c++)s[c+1]=a[c];s[0]=0}return n}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function Gn(i,e){if(i.byteLength!==e.byteLength)return!1;let t=new Uint8Array(i),r=new Uint8Array(e);for(let n=0;n<t.length;n++)if(t[n]!==r[n])return!1;return!0}function z(i,e){let t=i.toString(10);if(e<t.length)return"";let r=e-t.length,n=new Array(r);for(let o=0;o<r;o++)n[o]="0";return n.join("").concat(t)}var yo=Math.log(2);function Gt(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function Qr(i){let e=0,t=0;for(let n=0;n<i.length;n++){let s=i[n];e+=s.byteLength}let r=new Uint8Array(e);for(let n=0;n<i.length;n++){let s=i[n];r.set(new Uint8Array(s),t),t+=s.byteLength}return r.buffer}function Se(i,e,t,r){return e instanceof Uint8Array?e.byteLength?t<0?(i.error="Wrong parameter: inputOffset less than zero",!1):r<0?(i.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-r<0?(i.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(i.error="Wrong parameter: inputBuffer has zero length",!1):(i.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var ct=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return Qr(this.items)}},At=[new Uint8Array([1])],qn="0123456789",Xr="name",Wn="valueHexView",pi="isHexOnly",di="idBlock",gi="tagClass",mi="tagNumber",wi="isConstructed",vi="fromBER",Ai="toBER",bi="local",G="",le=new ArrayBuffer(0),cr=new Uint8Array(0),bt="EndOfContent",Xn="OCTET STRING",Zn="BIT STRING";function ve(i){var e;return e=class extends i{constructor(...r){var n;super(...r);let s=r[0]||{};this.isHexOnly=(n=s.isHexOnly)!==null&&n!==void 0?n:!1,this.valueHexView=s.valueHex?f.toUint8Array(s.valueHex):cr}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(r){this.valueHexView=new Uint8Array(r)}fromBER(r,n,s){let o=r instanceof ArrayBuffer?new Uint8Array(r):r;if(!Se(this,o,n,s))return-1;let a=n+s;return this.valueHexView=o.subarray(n,a),this.valueHexView.length?(this.blockLength=s,a):(this.warnings.push("Zero buffer length"),n)}toBER(r=!1){return this.isHexOnly?r?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",le)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:w.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Be=class{constructor({blockLength:e=0,error:t=G,warnings:r=[],valueBeforeDecode:n=cr}={}){this.blockLength=e,this.error=t,this.warnings=r,this.valueBeforeDecodeView=f.toUint8Array(n)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:w.ToHex(this.valueBeforeDecodeView)}}};Be.NAME="baseBlock";var _=class extends Be{fromBER(e,t,r){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};_.NAME="valueBlock";var qt=class extends ve(Be){constructor({idBlock:e={}}={}){var t,r,n,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?f.toUint8Array(e.valueHex):cr,this.tagClass=(r=e.tagClass)!==null&&r!==void 0?r:-1,this.tagNumber=(n=e.tagNumber)!==null&&n!==void 0?n:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",le}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let n=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,n[0]=t}return n.buffer}if(!this.isHexOnly){let n=Ke(this.tagNumber,7),s=new Uint8Array(n),o=n.byteLength,a=new Uint8Array(o+1);if(a[0]=t|31,!e){for(let c=0;c<o-1;c++)a[c+1]=s[c]|128;a[o]=s[o-1]}return a.buffer}let r=new Uint8Array(this.valueHexView.byteLength+1);if(r[0]=t|31,!e){let n=this.valueHexView;for(let s=0;s<n.length-1;s++)r[s+1]=n[s]|128;r[this.valueHexView.byteLength]=n[n.length-1]}return r.buffer}fromBER(e,t,r){let n=f.toUint8Array(e);if(!Se(this,n,t,r))return-1;let s=n.subarray(t,t+r);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,u=this.valueHexView=new Uint8Array(255),h=255;for(;s[c]&128;){if(u[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===h){h+=255;let A=new Uint8Array(h);for(let k=0;k<u.length;k++)A[k]=u[k];u=this.valueHexView=new Uint8Array(h)}}this.blockLength=c+1,u[c-1]=s[c]&127;let l=new Uint8Array(c);for(let A=0;A<c;A++)l[A]=u[A];u=this.valueHexView=new Uint8Array(c),u.set(l),this.blockLength<=9?this.tagNumber=De(u,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};qt.NAME="identificationBlock";var Wt=class extends Be{constructor({lenBlock:e={}}={}){var t,r,n;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(r=e.longFormUsed)!==null&&r!==void 0?r:!1,this.length=(n=e.length)!==null&&n!==void 0?n:0}fromBER(e,t,r){let n=f.toUint8Array(e);if(!Se(this,n,t,r))return-1;let s=n.subarray(t,t+r);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let o=s[0]&127;if(o>8)return this.error="Too big integer",-1;if(o+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=n.subarray(a,a+o);return c[o-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=De(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=o+1,t+this.blockLength}toBER(e=!1){let t,r;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(r=new Uint8Array(t),r[0]=128),t;if(this.longFormUsed){let n=Ke(this.length,8);if(n.byteLength>127)return this.error="Too big length",le;if(t=new ArrayBuffer(n.byteLength+1),e)return t;let s=new Uint8Array(n);r=new Uint8Array(t),r[0]=n.byteLength|128;for(let o=0;o<n.byteLength;o++)r[o+1]=s[o];return t}return t=new ArrayBuffer(1),e===!1&&(r=new Uint8Array(t),r[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};Wt.NAME="lengthBlock";var p={},P=class extends Be{constructor({name:e=G,optional:t=!1,primitiveSchema:r,...n}={},s){super(n),this.name=e,this.optional=t,r&&(this.primitiveSchema=r),this.idBlock=new qt(n),this.lenBlock=new Wt(n),this.valueBlock=s?new s(n):new _(n)}fromBER(e,t,r){let n=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?r:this.lenBlock.length);return n===-1?(this.error=this.valueBlock.error,n):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),n)}toBER(e,t){let r=t||new ct;t||Qn(this);let n=this.idBlock.toBER(e);if(r.write(n),this.lenBlock.isIndefiniteForm)r.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,r),r.write(new ArrayBuffer(2));else{let s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let o=this.lenBlock.toBER(e);r.write(o),r.write(s)}return t?le:r.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():w.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${w.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),r=e.toBER();return Gn(t,r)}};P.NAME="BaseBlock";function Qn(i){if(i instanceof p.Constructed)for(let e of i.valueBlock.value)Qn(e)&&(i.lenBlock.isIndefiniteForm=!0);return!!i.lenBlock.isIndefiniteForm}var Bt=class extends P{constructor({value:e=G,...t}={},r){super(t,r),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,r){let n=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?r:this.lenBlock.length);return n===-1?(this.error=this.valueBlock.error,n):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),n)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};Bt.NAME="BaseStringBlock";var Yt=class extends ve(_){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Yt.NAME="PrimitiveValueBlock";var es,ke=class extends P{constructor(e={}){super(e,Yt),this.idBlock.isConstructed=!1}};es=ke;p.Primitive=es;ke.NAME="PRIMITIVE";function Bi(i,e){if(i instanceof e)return i;let t=new e;return t.idBlock=i.idBlock,t.lenBlock=i.lenBlock,t.warnings=i.warnings,t.valueBeforeDecodeView=i.valueBeforeDecodeView,t}function lt(i,e=0,t=i.length){let r=e,n=new P({},_),s=new Be;if(!Se(s,i,e,t))return n.error=s.error,{offset:-1,result:n};if(!i.subarray(e,e+t).length)return n.error="Zero buffer length",{offset:-1,result:n};let a=n.idBlock.fromBER(i,e,t);if(n.idBlock.warnings.length&&n.warnings.concat(n.idBlock.warnings),a===-1)return n.error=n.idBlock.error,{offset:-1,result:n};if(e=a,t-=n.idBlock.blockLength,a=n.lenBlock.fromBER(i,e,t),n.lenBlock.warnings.length&&n.warnings.concat(n.lenBlock.warnings),a===-1)return n.error=n.lenBlock.error,{offset:-1,result:n};if(e=a,t-=n.lenBlock.blockLength,!n.idBlock.isConstructed&&n.lenBlock.isIndefiniteForm)return n.error="Indefinite length form used for primitive encoding form",{offset:-1,result:n};let c=P;switch(n.idBlock.tagClass){case 1:if(n.idBlock.tagNumber>=37&&n.idBlock.isHexOnly===!1)return n.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:n};switch(n.idBlock.tagNumber){case 0:if(n.idBlock.isConstructed&&n.lenBlock.length>0)return n.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:n};c=p.EndOfContent;break;case 1:c=p.Boolean;break;case 2:c=p.Integer;break;case 3:c=p.BitString;break;case 4:c=p.OctetString;break;case 5:c=p.Null;break;case 6:c=p.ObjectIdentifier;break;case 10:c=p.Enumerated;break;case 12:c=p.Utf8String;break;case 13:c=p.RelativeObjectIdentifier;break;case 14:c=p.TIME;break;case 15:return n.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:n};case 16:c=p.Sequence;break;case 17:c=p.Set;break;case 18:c=p.NumericString;break;case 19:c=p.PrintableString;break;case 20:c=p.TeletexString;break;case 21:c=p.VideotexString;break;case 22:c=p.IA5String;break;case 23:c=p.UTCTime;break;case 24:c=p.GeneralizedTime;break;case 25:c=p.GraphicString;break;case 26:c=p.VisibleString;break;case 27:c=p.GeneralString;break;case 28:c=p.UniversalString;break;case 29:c=p.CharacterString;break;case 30:c=p.BmpString;break;case 31:c=p.DATE;break;case 32:c=p.TimeOfDay;break;case 33:c=p.DateTime;break;case 34:c=p.Duration;break;default:{let u=n.idBlock.isConstructed?new p.Constructed:new p.Primitive;u.idBlock=n.idBlock,u.lenBlock=n.lenBlock,u.warnings=n.warnings,n=u}}break;case 2:case 3:case 4:default:c=n.idBlock.isConstructed?p.Constructed:p.Primitive}return n=Bi(n,c),a=n.fromBER(i,e,n.lenBlock.isIndefiniteForm?t:n.lenBlock.length),n.valueBeforeDecodeView=i.subarray(r,r+n.blockLength),{offset:a,result:n}}function xe(i){if(!i.byteLength){let e=new P({},_);return e.error="Input buffer has zero length",{offset:-1,result:e}}return lt(f.toUint8Array(i).slice(),0,i.byteLength)}function ki(i,e){return i?1:e}var ge=class extends _{constructor({value:e=[],isIndefiniteForm:t=!1,...r}={}){super(r),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,r){let n=f.toUint8Array(e);if(!Se(this,n,t,r))return-1;if(this.valueBeforeDecodeView=n.subarray(t,t+r),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let s=t;for(;ki(this.isIndefiniteForm,r)>0;){let o=lt(n,s,r);if(o.offset===-1)return this.error=o.result.error,this.warnings.concat(o.result.warnings),-1;if(s=o.offset,this.blockLength+=o.result.blockLength,r-=o.result.blockLength,this.value.push(o.result),this.isIndefiniteForm&&o.result.constructor.NAME===bt)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===bt?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let r=t||new ct;for(let n=0;n<this.value.length;n++)this.value[n].toBER(e,r);return t?le:r.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};ge.NAME="ConstructedValueBlock";var ts,T=class extends P{constructor(e={}){super(e,ge),this.idBlock.isConstructed=!0}fromBER(e,t,r){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let n=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?r:this.lenBlock.length);return n===-1?(this.error=this.valueBlock.error,n):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),n)}onAsciiEncoding(){let e=[];for(let r of this.valueBlock.value)e.push(r.toString("ascii").split(`
`).map(n=>` ${n}`).join(`
`));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
${e.join(`
`)}`:`${t} :`}};ts=T;p.Constructed=ts;T.NAME="CONSTRUCTED";var Xt=class extends _{fromBER(e,t,r){return t}toBER(e){return le}};Xt.override="EndOfContentValueBlock";var rs,kt=class extends P{constructor(e={}){super(e,Xt),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};rs=kt;p.EndOfContent=rs;kt.NAME=bt;var ns,ue=class extends P{constructor(e={}){super(e,_),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,r){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=r,t+r>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+r}toBER(e,t){let r=new ArrayBuffer(2);if(!e){let n=new Uint8Array(r);n[0]=5,n[1]=0}return t&&t.write(r),r}onAsciiEncoding(){return`${this.constructor.NAME}`}};ns=ue;p.Null=ns;ue.NAME="NULL";var Zt=class extends ve(_){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=f.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,r){let n=f.toUint8Array(e);return Se(this,n,t,r)?(this.valueHexView=n.subarray(t,t+r),r>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,Yr.call(this),this.blockLength=r,t+r):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};Zt.NAME="BooleanValueBlock";var ss,_e=class extends P{constructor(e={}){super(e,Zt),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};ss=_e;p.Boolean=ss;_e.NAME="BOOLEAN";var Qt=class extends ve(ge){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,r){let n=0;if(this.isConstructed){if(this.isHexOnly=!1,n=ge.prototype.fromBER.call(this,e,t,r),n===-1)return n;for(let s=0;s<this.value.length;s++){let o=this.value[s].constructor.NAME;if(o===bt){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(o!==Xn)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,n=super.fromBER(e,t,r),this.blockLength=r;return n}toBER(e,t){return this.isConstructed?ge.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Qt.NAME="OctetStringValueBlock";var is,me=class extends P{constructor({idBlock:e={},lenBlock:t={},...r}={}){var n,s;(n=r.isConstructed)!==null&&n!==void 0||(r.isConstructed=!!(!((s=r.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:r.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!r.isIndefiniteForm},...r},Qt),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,r){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,r===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+r);try{if(s.byteLength){let o=lt(s,0,s.byteLength);o.offset!==-1&&o.offset===r&&(this.valueBlock.value=[o.result])}}catch{}}return super.fromBER(e,t,r)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?T.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${w.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof me&&e.push(t.valueBlock.valueHexView);return f.concat(e)}};is=me;p.OctetString=is;me.NAME=Xn;var er=class extends ve(ge){constructor({unusedBits:e=0,isConstructed:t=!1,...r}={}){super(r),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,r){if(!r)return t;let n=-1;if(this.isConstructed){if(n=ge.prototype.fromBER.call(this,e,t,r),n===-1)return n;for(let a of this.value){let c=a.constructor.NAME;if(c===bt){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==Zn)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let u=a.valueBlock;if(this.unusedBits>0&&u.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=u.unusedBits}return n}let s=f.toUint8Array(e);if(!Se(this,s,t,r))return-1;let o=s.subarray(t,t+r);if(this.unusedBits=o[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=o.subarray(1);try{if(a.byteLength){let c=lt(a,0,a.byteLength);c.offset!==-1&&c.offset===r-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=o.subarray(1),this.blockLength=o.length,t+r}toBER(e,t){if(this.isConstructed)return ge.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return le;let r=new Uint8Array(this.valueHexView.length+1);return r[0]=this.unusedBits,r.set(this.valueHexView,1),r.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};er.NAME="BitStringValueBlock";var os,Ue=class extends P{constructor({idBlock:e={},lenBlock:t={},...r}={}){var n,s;(n=r.isConstructed)!==null&&n!==void 0||(r.isConstructed=!!(!((s=r.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:r.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!r.isIndefiniteForm},...r},er),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,r){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,r)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return T.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let n of t)e.push(n.toString(2).padStart(8,"0"));let r=e.join("");return`${this.constructor.NAME} : ${r.substring(0,r.length-this.valueBlock.unusedBits)}`}}};os=Ue;p.BitString=os;Ue.NAME=Zn;var as;function Si(i,e){let t=new Uint8Array([0]),r=new Uint8Array(i),n=new Uint8Array(e),s=r.slice(0),o=s.length-1,a=n.slice(0),c=a.length-1,u=0,h=c<o?o:c,l=0;for(let A=h;A>=0;A--,l++){switch(!0){case l<a.length:u=s[o-l]+a[c-l]+t[0];break;default:u=s[o-l]+t[0]}switch(t[0]=u/10,!0){case l>=s.length:s=zt(new Uint8Array([u%10]),s);break;default:s[o-l]=u%10}}return t[0]>0&&(s=zt(t,s)),s}function Yn(i){if(i>=At.length)for(let e=At.length;e<=i;e++){let t=new Uint8Array([0]),r=At[e-1].slice(0);for(let n=r.length-1;n>=0;n--){let s=new Uint8Array([(r[n]<<1)+t[0]]);t[0]=s[0]/10,r[n]=s[0]%10}t[0]>0&&(r=zt(t,r)),At.push(r)}return At[i]}function xi(i,e){let t=0,r=new Uint8Array(i),n=new Uint8Array(e),s=r.slice(0),o=s.length-1,a=n.slice(0),c=a.length-1,u,h=0;for(let l=c;l>=0;l--,h++)switch(u=s[o-h]-a[c-h]-t,!0){case u<0:t=1,s[o-h]=u+10;break;default:t=0,s[o-h]=u}if(t>0)for(let l=o-c+1;l>=0;l--,h++)if(u=s[o-h]-t,u<0)t=1,s[o-h]=u+10;else{t=0,s[o-h]=u;break}return s.slice()}var St=class extends ve(_){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=Yr.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(zn(e))}get valueDec(){return this._valueDec}fromDER(e,t,r,n=0){let s=this.fromBER(e,t,r);if(s===-1)return s;let o=this.valueHexView;return o[0]===0&&o[1]&128?this.valueHexView=o.subarray(1):n!==0&&o.length<n&&(n-o.length>1&&(n=o.length+1),this.valueHexView=o.subarray(n-o.length)),s}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let r=new Uint8Array(this.valueHexView.length+1);r[0]=0,r.set(t,1),this.valueHexView=r}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,r){let n=super.fromBER(e,t,r);return n===-1||this.setValueHex(),n}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),r=0,n,s=this.valueHexView,o="",a=!1;for(let c=s.byteLength-1;c>=0;c--){n=s[c];for(let u=0;u<8;u++){if((n&1)===1)switch(r){case e:t=xi(Yn(r),t),o="-";break;default:t=Si(t,Yn(r))}r++,n>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(o+=qn.charAt(t[c]));return a===!1&&(o+=qn.charAt(0)),o}};as=St;St.NAME="IntegerValueBlock";Object.defineProperty(as.prototype,"valueHex",{set:function(i){this.valueHexView=new Uint8Array(i),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var cs,$=class extends P{constructor(e={}){super(e,St),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Gt(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Gt();let t=BigInt(e),r=new ct,n=t.toString(16).replace(/^-/,""),s=new Uint8Array(w.FromHex(n));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let u=BigInt(`0x${w.ToHex(a)}`)+t,h=f.toUint8Array(w.FromHex(u.toString(16)));h[0]|=128,r.write(h)}else s[0]&128&&r.write(new Uint8Array([0])),r.write(s);return new $({valueHex:r.final()})}convertToDER(){let e=new $({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new $({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};cs=$;p.Integer=cs;$.NAME="INTEGER";var us,$e=class extends ${constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};us=$e;p.Enumerated=us;$e.NAME="ENUMERATED";var xt=class extends ve(_){constructor({valueDec:e=-1,isFirstSid:t=!1,...r}={}){super(r),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,r){if(!r)return t;let n=f.toUint8Array(e);if(!Se(this,n,t,r))return-1;let s=n.subarray(t,t+r);this.valueHexView=new Uint8Array(r);for(let a=0;a<r&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let o=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)o[a]=this.valueHexView[a];return this.valueHexView=o,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=De(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Gt();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let r=new Uint8Array(t.length/7);for(let n=0;n<r.length;n++)r[n]=parseInt(t.slice(n*7,n*7+7),2)+(n+1<r.length?128:0);this.fromBER(r.buffer,0,r.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let n=this.valueHexView,s=new Uint8Array(this.blockLength);for(let o=0;o<this.blockLength-1;o++)s[o]=n[o]|128;return s[this.blockLength-1]=n[this.blockLength-1],s.buffer}let t=Ke(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",le;let r=new Uint8Array(t.byteLength);if(!e){let n=new Uint8Array(t),s=t.byteLength-1;for(let o=0;o<s;o++)r[o]=n[o]|128;r[s]=n[s]}return r}toString(){let e="";if(this.isHexOnly)e=w.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};xt.NAME="sidBlock";var tr=class extends _{constructor({value:e=G,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,r){let n=t;for(;r>0;){let s=new xt;if(n=s.fromBER(e,n,r),n===-1)return this.blockLength=0,this.error=s.error,n;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,r-=s.blockLength,this.value.push(s)}return n}toBER(e){let t=[];for(let r=0;r<this.value.length;r++){let n=this.value[r].toBER(e);if(n.byteLength===0)return this.error=this.value[r].error,le;t.push(n)}return Qr(t)}fromString(e){this.value=[];let t=0,r=0,n="",s=!1;do if(r=e.indexOf(".",t),r===-1?n=e.substring(t):n=e.substring(t,r),t=r+1,s){let o=this.value[0],a=0;switch(o.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(n,10);if(isNaN(c))return;o.valueDec=c+a,s=!1}else{let o=new xt;if(n>Number.MAX_SAFE_INTEGER){Gt();let a=BigInt(n);o.valueBigInt=a}else if(o.valueDec=parseInt(n,10),isNaN(o.valueDec))return;this.value.length||(o.isFirstSid=!0,s=!0),this.value.push(o)}while(r!==-1)}toString(){let e="",t=!1;for(let r=0;r<this.value.length;r++){t=this.value[r].isHexOnly;let n=this.value[r].toString();r!==0&&(e=`${e}.`),t?(n=`{${n}}`,this.value[r].isFirstSid?e=`2.{${n} - 80}`:e+=n):e+=n}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};tr.NAME="ObjectIdentifierValueBlock";var ls,je=class extends P{constructor(e={}){super(e,tr),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};ls=je;p.ObjectIdentifier=ls;je.NAME="OBJECT IDENTIFIER";var Et=class extends ve(Be){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,r){if(r===0)return t;let n=f.toUint8Array(e);if(!Se(this,n,t,r))return-1;let s=n.subarray(t,t+r);this.valueHexView=new Uint8Array(r);for(let a=0;a<r&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let o=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)o[a]=this.valueHexView[a];return this.valueHexView=o,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=De(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let n=this.valueHexView,s=new Uint8Array(this.blockLength);for(let o=0;o<this.blockLength-1;o++)s[o]=n[o]|128;return s[this.blockLength-1]=n[this.blockLength-1],s.buffer}let t=Ke(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",le;let r=new Uint8Array(t.byteLength);if(!e){let n=new Uint8Array(t),s=t.byteLength-1;for(let o=0;o<s;o++)r[o]=n[o]|128;r[s]=n[s]}return r.buffer}toString(){let e="";return this.isHexOnly?e=w.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Et.NAME="relativeSidBlock";var rr=class extends _{constructor({value:e=G,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,r){let n=t;for(;r>0;){let s=new Et;if(n=s.fromBER(e,n,r),n===-1)return this.blockLength=0,this.error=s.error,n;this.blockLength+=s.blockLength,r-=s.blockLength,this.value.push(s)}return n}toBER(e,t){let r=[];for(let n=0;n<this.value.length;n++){let s=this.value[n].toBER(e);if(s.byteLength===0)return this.error=this.value[n].error,le;r.push(s)}return Qr(r)}fromString(e){this.value=[];let t=0,r=0,n="";do{r=e.indexOf(".",t),r===-1?n=e.substring(t):n=e.substring(t,r),t=r+1;let s=new Et;if(s.valueDec=parseInt(n,10),isNaN(s.valueDec))return!0;this.value.push(s)}while(r!==-1);return!0}toString(){let e="",t=!1;for(let r=0;r<this.value.length;r++){t=this.value[r].isHexOnly;let n=this.value[r].toString();r!==0&&(e=`${e}.`),t&&(n=`{${n}}`),e+=n}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};rr.NAME="RelativeObjectIdentifierValueBlock";var hs,Ct=class extends P{constructor(e={}){super(e,rr),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};hs=Ct;p.RelativeObjectIdentifier=hs;Ct.NAME="RelativeObjectIdentifier";var fs,q=class extends T{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};fs=q;p.Sequence=fs;q.NAME="SEQUENCE";var ys,W=class extends T{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};ys=W;p.Set=ys;W.NAME="SET";var nr=class extends ve(_){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=G}toJSON(){return{...super.toJSON(),value:this.value}}};nr.NAME="StringValueBlock";var sr=class extends nr{};sr.NAME="SimpleStringValueBlock";var M=class extends Bt{constructor({...e}={}){super(e,sr)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,f.toUint8Array(e))}fromString(e){let t=e.length,r=this.valueBlock.valueHexView=new Uint8Array(t);for(let n=0;n<t;n++)r[n]=e.charCodeAt(n);this.valueBlock.value=e}};M.NAME="SIMPLE STRING";var ir=class extends M{fromBuffer(e){this.valueBlock.valueHexView=f.toUint8Array(e);try{this.valueBlock.value=w.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=w.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(w.FromUtf8String(e)),this.valueBlock.value=e}};ir.NAME="Utf8StringValueBlock";var ps,ne=class extends ir{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};ps=ne;p.Utf8String=ps;ne.NAME="UTF8String";var or=class extends M{fromBuffer(e){this.valueBlock.value=w.ToUtf16String(e),this.valueBlock.valueHexView=f.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(w.FromUtf16String(e))}};or.NAME="BmpStringValueBlock";var ds,Me=class extends or{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};ds=Me;p.BmpString=ds;Me.NAME="BMPString";var ar=class extends M{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),r=new Uint8Array(t);for(let n=0;n<r.length;n+=4)r[n]=r[n+3],r[n+1]=r[n+2],r[n+2]=0,r[n+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,r=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let n=0;n<t;n++){let s=Ke(e.charCodeAt(n),8),o=new Uint8Array(s);if(o.length>4)continue;let a=4-o.length;for(let c=o.length-1;c>=0;c--)r[n*4+c+a]=o[c]}this.valueBlock.value=e}};ar.NAME="UniversalStringValueBlock";var gs,Fe=class extends ar{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};gs=Fe;p.UniversalString=gs;Fe.NAME="UniversalString";var ms,Je=class extends M{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};ms=Je;p.NumericString=ms;Je.NAME="NumericString";var ws,ze=class extends M{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};ws=ze;p.PrintableString=ws;ze.NAME="PrintableString";var vs,Ge=class extends M{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};vs=Ge;p.TeletexString=vs;Ge.NAME="TeletexString";var As,qe=class extends M{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};As=qe;p.VideotexString=As;qe.NAME="VideotexString";var bs,We=class extends M{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};bs=We;p.IA5String=bs;We.NAME="IA5String";var Bs,Ye=class extends M{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Bs=Ye;p.GraphicString=Bs;Ye.NAME="GraphicString";var ks,Ie=class extends M{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};ks=Ie;p.VisibleString=ks;Ie.NAME="VisibleString";var Ss,Xe=class extends M{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Ss=Xe;p.GeneralString=Ss;Xe.NAME="GeneralString";var xs,Ze=class extends M{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};xs=Ze;p.CharacterString=xs;Ze.NAME="CharacterString";var Es,Oe=class extends Ie{constructor({value:e,valueDate:t,...r}={}){if(super(r),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let n=0;n<e.length;n++)this.valueBlock.valueHexView[n]=e.charCodeAt(n)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,f.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),r=new Uint8Array(t);for(let n=0;n<e.length;n++)r[n]=e.charCodeAt(n);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let r=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(r===null){this.error="Wrong input string for conversion";return}let n=parseInt(r[1],10);n>=50?this.year=1900+n:this.year=2e3+n,this.month=parseInt(r[2],10),this.day=parseInt(r[3],10),this.hour=parseInt(r[4],10),this.minute=parseInt(r[5],10),this.second=parseInt(r[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=z(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=z(this.month,2),t[2]=z(this.day,2),t[3]=z(this.hour,2),t[4]=z(this.minute,2),t[5]=z(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};Es=Oe;p.UTCTime=Es;Oe.NAME="UTCTime";var Cs,Qe=class extends Oe{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(e){let t=!1,r="",n="",s=0,o,a=0,c=0;if(e[e.length-1]==="Z")r=e.substring(0,e.length-1),t=!0;else{let l=new Number(e[e.length-1]);if(isNaN(l.valueOf()))throw new Error("Wrong input string for conversion");r=e}if(t){if(r.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(r.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let l=1,A=r.indexOf("+"),k="";if(A===-1&&(A=r.indexOf("-"),l=-1),A!==-1){if(k=r.substring(A+1),r=r.substring(0,A),k.length!==2&&k.length!==4)throw new Error("Wrong input string for conversion");let N=parseInt(k.substring(0,2),10);if(isNaN(N.valueOf()))throw new Error("Wrong input string for conversion");if(a=l*N,k.length===4){if(N=parseInt(k.substring(2,4),10),isNaN(N.valueOf()))throw new Error("Wrong input string for conversion");c=l*N}}}let u=r.indexOf(".");if(u===-1&&(u=r.indexOf(",")),u!==-1){let l=new Number(`0${r.substring(u)}`);if(isNaN(l.valueOf()))throw new Error("Wrong input string for conversion");s=l.valueOf(),n=r.substring(0,u)}else n=r;switch(!0){case n.length===8:if(o=/(\d{4})(\d{2})(\d{2})/ig,u!==-1)throw new Error("Wrong input string for conversion");break;case n.length===10:if(o=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,u!==-1){let l=60*s;this.minute=Math.floor(l),l=60*(l-this.minute),this.second=Math.floor(l),l=1e3*(l-this.second),this.millisecond=Math.floor(l)}break;case n.length===12:if(o=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,u!==-1){let l=60*s;this.second=Math.floor(l),l=1e3*(l-this.second),this.millisecond=Math.floor(l)}break;case n.length===14:if(o=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,u!==-1){let l=1e3*s;this.millisecond=Math.floor(l)}break;default:throw new Error("Wrong input string for conversion")}let h=o.exec(n);if(h===null)throw new Error("Wrong input string for conversion");for(let l=1;l<h.length;l++)switch(l){case 1:this.year=parseInt(h[l],10);break;case 2:this.month=parseInt(h[l],10);break;case 3:this.day=parseInt(h[l],10);break;case 4:this.hour=parseInt(h[l],10)+a;break;case 5:this.minute=parseInt(h[l],10)+c;break;case 6:this.second=parseInt(h[l],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let l=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=l.getUTCFullYear(),this.month=l.getUTCMonth(),this.day=l.getUTCDay(),this.hour=l.getUTCHours(),this.minute=l.getUTCMinutes(),this.second=l.getUTCSeconds(),this.millisecond=l.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(z(this.year,4)),t.push(z(this.month,2)),t.push(z(this.day,2)),t.push(z(this.hour,2)),t.push(z(this.minute,2)),t.push(z(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(z(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Cs=Qe;p.GeneralizedTime=Cs;Qe.NAME="GeneralizedTime";var Ks,Kt=class extends ne{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};Ks=Kt;p.DATE=Ks;Kt.NAME="DATE";var Ns,Nt=class extends ne{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Ns=Nt;p.TimeOfDay=Ns;Nt.NAME="TimeOfDay";var Us,Ut=class extends ne{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Us=Ut;p.DateTime=Us;