From 0f09596fda6effb83de839c36353462e06ba1f12 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 27 Jun 2026 18:04:36 +0000 Subject: [PATCH 1/6] Initial plan From 9d1221addf0d85846deec304288cd38d2d46562a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 27 Jun 2026 18:08:06 +0000 Subject: [PATCH 2/6] Apply remaining changes --- src/cryptoECC.js | 22 ++++++++++++++++++++++ src/ecdh.js | 14 ++------------ src/ecdsa.js | 14 ++------------ test/Test.Ecdh.js | 5 +++++ test/Test.Ecdsa.js | 5 +++++ 5 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/cryptoECC.js b/src/cryptoECC.js index 3d214a5..d7b7be0 100644 --- a/src/cryptoECC.js +++ b/src/cryptoECC.js @@ -2002,6 +2002,19 @@ function MsrcryptoECC() { var curvesInternal = {}; + var curveElementLengths = { + "P-256": 32, + "P-384": 48, + "P-521": 66, + "BN-254": 32, + "NUMSP256D1": 32, + "NUMSP256T1": 32, + "NUMSP384D1": 48, + "NUMSP384T1": 48, + "NUMSP512D1": 64, + "NUMSP512T1": 64 + }; + var createCurve = function(curveName) { var curveData = curvesInternal[curveName.toUpperCase()]; @@ -2028,8 +2041,17 @@ function MsrcryptoECC() { return opp.validatePoint(point); }; + var curveElementLength = function(curveName) { + if (!curveName) { + return undefined; + } + + return curveElementLengths[curveName.toUpperCase()]; + }; + return { createCurve: createCurve, + curveElementLength: curveElementLength, curves: curvesInternal, sec1EncodingFp: sec1EncodingFp, validatePoint: validateEccPoint, diff --git a/src/ecdh.js b/src/ecdh.js index f267881..8c17abb 100644 --- a/src/ecdh.js +++ b/src/ecdh.js @@ -156,12 +156,7 @@ if ( typeof operations !== "undefined" ) { // Pad each value to the curve's fixed element length so leading zeros // are preserved (matches Chrome / Chromium-based Edge behavior). - var partLen = { - "P-256": 32, "P-384": 48, "P-521": 66, - "NUMSP256D1": 32, "NUMSP256T1": 32, - "NUMSP384D1": 48, "NUMSP384T1": 48, - "NUMSP512D1": 64, "NUMSP512T1": 64 - }[p.algorithm.namedCurve]; + var partLen = cryptoECC.curveElementLength(p.algorithm.namedCurve); var pad = msrcryptoUtilities.padFront; keyPairData.publicKey.x = pad(keyPairData.publicKey.x, 0, partLen); keyPairData.publicKey.y = pad(keyPairData.publicKey.y, 0, partLen); @@ -250,12 +245,7 @@ if ( typeof operations !== "undefined" ) { // Accept keys with or without trimmed leading zeros and pad each // value to the curve's fixed element length (Chrome/Chromium behavior). - var partLen = { - "P-256": 32, "P-384": 48, "P-521": 66, - "NUMSP256D1": 32, "NUMSP256T1": 32, - "NUMSP384D1": 48, "NUMSP384T1": 48, - "NUMSP512D1": 64, "NUMSP512T1": 64 - }[p.algorithm.namedCurve]; + var partLen = cryptoECC.curveElementLength(p.algorithm.namedCurve); if ( keyObject.x ) { keyObject.x = msrcryptoUtilities.padFront(keyObject.x, 0, partLen); } if ( keyObject.y ) { keyObject.y = msrcryptoUtilities.padFront(keyObject.y, 0, partLen); } if ( keyObject.d ) { keyObject.d = msrcryptoUtilities.padFront(keyObject.d, 0, partLen); } diff --git a/src/ecdsa.js b/src/ecdsa.js index 46dc708..2eebfdc 100644 --- a/src/ecdsa.js +++ b/src/ecdsa.js @@ -207,12 +207,7 @@ if (typeof operations !== "undefined") { // Pad each value to the curve's fixed element length so leading zeros // are preserved (matches Chrome / Chromium-based Edge behavior). - var partLen = { - "P-256": 32, "P-384": 48, "P-521": 66, - "NUMSP256D1": 32, "NUMSP256T1": 32, - "NUMSP384D1": 48, "NUMSP384T1": 48, - "NUMSP512D1": 64, "NUMSP512T1": 64 - }[p.algorithm.namedCurve]; + var partLen = cryptoECC.curveElementLength(p.algorithm.namedCurve); function padToCurveLength( array ) { return msrcryptoUtilities.padFront(array, 0, partLen); @@ -307,12 +302,7 @@ if (typeof operations !== "undefined") { // Accept keys with or without trimmed leading zeros and pad each // value to the curve's fixed element length (Chrome/Chromium behavior). - var partLen = { - "P-256": 32, "P-384": 48, "P-521": 66, - "NUMSP256D1": 32, "NUMSP256T1": 32, - "NUMSP384D1": 48, "NUMSP384T1": 48, - "NUMSP512D1": 64, "NUMSP512T1": 64 - }[p.algorithm.namedCurve]; + var partLen = cryptoECC.curveElementLength(p.algorithm.namedCurve); if ( keyObject.x ) { keyObject.x = msrcryptoUtilities.padFront(keyObject.x, 0, partLen); } if ( keyObject.y ) { keyObject.y = msrcryptoUtilities.padFront(keyObject.y, 0, partLen); } if ( keyObject.d ) { keyObject.d = msrcryptoUtilities.padFront(keyObject.d, 0, partLen); } diff --git a/test/Test.Ecdh.js b/test/Test.Ecdh.js index 41adae3..9ad33e9 100644 --- a/test/Test.Ecdh.js +++ b/test/Test.Ecdh.js @@ -125,6 +125,10 @@ function ecdhTests() { ts.keyGeneratePairTest(ecdhKeyAlg("P-521"), ["deriveKey", "deriveBits"], inspectEcdhKey, context(iterations, assert)); }); + QUnit.test(label + " generateKeyTest BN-254", function(assert) { + ts.keyGeneratePairTest(ecdhKeyAlg("BN-254"), ["deriveKey", "deriveBits"], inspectEcdhKey, context(iterations, assert)); + }); + QUnit.test(label + " ts.deriveKeyTest P-256 --> Aes-Cbc-256 ", function(assert) { ts.deriveKeyTest(ecdh.p256.DeriveKey, undefined, context(iterations, assert)); }); @@ -226,6 +230,7 @@ var ecdhKeyLengths = { "P-256": 32, "P-384": 48, "P-521": 66, + "BN-254": 32, "NUMSP256D1": 32, "NUMSP256T1": 32, "NUMSP384D1": 48, diff --git a/test/Test.Ecdsa.js b/test/Test.Ecdsa.js index e0b8215..278386b 100644 --- a/test/Test.Ecdsa.js +++ b/test/Test.Ecdsa.js @@ -248,6 +248,10 @@ function ecdsaTests() { ts.keyGeneratePairTest( ecdsaKeyAlg( "P-521" ), [VERIFY, SIGN], inspectEcdsaKey, context( iterations, assert ) ); } ); + QUnit.test(label + " generateKeyTest BN-254", function(assert) { + ts.keyGeneratePairTest(ecdsaKeyAlg("BN-254"), [VERIFY, SIGN], inspectEcdsaKey, context(iterations, assert)); + }); + QUnit.test(label + " generateKeyTest NUMSP256D1", function(assert) { ts.keyGeneratePairTest(ecdsaKeyAlg("NUMSP256D1"), [VERIFY, SIGN], inspectEcdsaKey, context(iterations, assert)); }); @@ -423,6 +427,7 @@ var ecdsaKeyLengths = { "P-256": 32, "P-384": 48, "P-521": 66, + "BN-254": 32, "NUMSP256D1": 32, "NUMSP256T1": 32, "NUMSP384D1": 48, From 36444a3a486b3e3c1969a2ffca3cfd468a93c010 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 27 Jun 2026 18:25:53 +0000 Subject: [PATCH 3/6] Apply remaining changes --- test/Test.Ecdh.js | 19 +++++-------------- test/Test.Ecdsa.js | 19 +++++-------------- 2 files changed, 10 insertions(+), 28 deletions(-) diff --git a/test/Test.Ecdh.js b/test/Test.Ecdh.js index 9ad33e9..fcea4b0 100644 --- a/test/Test.Ecdh.js +++ b/test/Test.Ecdh.js @@ -226,18 +226,9 @@ function ecdhTests() { }); } -var ecdhKeyLengths = { - "P-256": 32, - "P-384": 48, - "P-521": 66, - "BN-254": 32, - "NUMSP256D1": 32, - "NUMSP256T1": 32, - "NUMSP384D1": 48, - "NUMSP384T1": 48, - "NUMSP512D1": 64, - "NUMSP512T1": 64 -}; +function ecdhCurveElementLength(namedCurve) { + return cryptoECC.curveElementLength(namedCurve); +} function ecdhKeyAlg(namedCurve) { return { @@ -250,7 +241,7 @@ var inspectEcdhKey = { public: function(keyObj, algorithm, usages, reason) { var fail = []; - var expLenMax = ecdhKeyLengths[algorithm.namedCurve]; + var expLenMax = ecdhCurveElementLength(algorithm.namedCurve); var expLenMin = expLenMax; // has crv property equal to "P-521" @@ -309,7 +300,7 @@ var inspectEcdhKey = { // } // } - var expLenMax = ecdhKeyLengths[algorithm.namedCurve]; + var expLenMax = ecdhCurveElementLength(algorithm.namedCurve); var expLenMin = expLenMax; this.public(keyObj, algorithm, usages, reason); diff --git a/test/Test.Ecdsa.js b/test/Test.Ecdsa.js index 278386b..56a201a 100644 --- a/test/Test.Ecdsa.js +++ b/test/Test.Ecdsa.js @@ -423,18 +423,9 @@ function ecdsaTests() { }); } -var ecdsaKeyLengths = { - "P-256": 32, - "P-384": 48, - "P-521": 66, - "BN-254": 32, - "NUMSP256D1": 32, - "NUMSP256T1": 32, - "NUMSP384D1": 48, - "NUMSP384T1": 48, - "NUMSP512D1": 64, - "NUMSP512T1": 64 -}; +function ecdsaCurveElementLength(namedCurve) { + return cryptoECC.curveElementLength(namedCurve); +} function ecdsaKeyAlg(curve) { return { @@ -455,7 +446,7 @@ var inspectEcdsaKey = { var fail = []; - var expLenMax = ecdsaKeyLengths[algorithm.namedCurve]; + var expLenMax = ecdsaCurveElementLength(algorithm.namedCurve); var expLenMin = expLenMax; // has crv property equal to "P-521" @@ -498,7 +489,7 @@ var inspectEcdsaKey = { }, private: function(keyObj, algorithm, usages, reason) { - var expLenMax = ecdsaKeyLengths[algorithm.namedCurve]; + var expLenMax = ecdsaCurveElementLength(algorithm.namedCurve); var expLenMin = expLenMax; this.public(keyObj, algorithm, usages, reason); From 4889d7cf40940726c2de713dbc8ae99dc0b1c5e9 Mon Sep 17 00:00:00 2001 From: Larry Joy Date: Sun, 28 Jun 2026 07:05:21 -0700 Subject: [PATCH 4/6] Rebuild dist for BN-254 padding fix (PR #26) --- dist/msrcrypto.js | 50 ++++++++++++++++++++++--------------------- dist/msrcrypto.min.js | 2 +- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/dist/msrcrypto.js b/dist/msrcrypto.js index c215a97..4b11af7 100644 --- a/dist/msrcrypto.js +++ b/dist/msrcrypto.js @@ -3978,6 +3978,19 @@ function MsrcryptoECC() { var curvesInternal = {}; + var curveElementLengths = { + "P-256": 32, + "P-384": 48, + "P-521": 66, + "BN-254": 32, + "NUMSP256D1": 32, + "NUMSP256T1": 32, + "NUMSP384D1": 48, + "NUMSP384T1": 48, + "NUMSP512D1": 64, + "NUMSP512T1": 64 + }; + var createCurve = function(curveName) { var curveData = curvesInternal[curveName.toUpperCase()]; @@ -4004,8 +4017,17 @@ function MsrcryptoECC() { return opp.validatePoint(point); }; + var curveElementLength = function(curveName) { + if (!curveName) { + return undefined; + } + + return curveElementLengths[curveName.toUpperCase()]; + }; + return { createCurve: createCurve, + curveElementLength: curveElementLength, curves: curvesInternal, sec1EncodingFp: sec1EncodingFp, validatePoint: validateEccPoint, @@ -8089,12 +8111,7 @@ if ( typeof operations !== "undefined" ) { var keyPairData = ecdhInstance.generateKey(); - var partLen = { - "P-256": 32, "P-384": 48, "P-521": 66, - "NUMSP256D1": 32, "NUMSP256T1": 32, - "NUMSP384D1": 48, "NUMSP384T1": 48, - "NUMSP512D1": 64, "NUMSP512T1": 64 - }[p.algorithm.namedCurve]; + var partLen = cryptoECC.curveElementLength(p.algorithm.namedCurve); var pad = msrcryptoUtilities.padFront; keyPairData.publicKey.x = pad(keyPairData.publicKey.x, 0, partLen); keyPairData.publicKey.y = pad(keyPairData.publicKey.y, 0, partLen); @@ -8177,12 +8194,7 @@ if ( typeof operations !== "undefined" ) { keyObject.y = publicKey.y; } - var partLen = { - "P-256": 32, "P-384": 48, "P-521": 66, - "NUMSP256D1": 32, "NUMSP256T1": 32, - "NUMSP384D1": 48, "NUMSP384T1": 48, - "NUMSP512D1": 64, "NUMSP512T1": 64 - }[p.algorithm.namedCurve]; + var partLen = cryptoECC.curveElementLength(p.algorithm.namedCurve); if ( keyObject.x ) { keyObject.x = msrcryptoUtilities.padFront(keyObject.x, 0, partLen); } if ( keyObject.y ) { keyObject.y = msrcryptoUtilities.padFront(keyObject.y, 0, partLen); } if ( keyObject.d ) { keyObject.d = msrcryptoUtilities.padFront(keyObject.d, 0, partLen); } @@ -8583,12 +8595,7 @@ if (typeof operations !== "undefined") { var dtb = cryptoMath.digitsToBytes; - var partLen = { - "P-256": 32, "P-384": 48, "P-521": 66, - "NUMSP256D1": 32, "NUMSP256T1": 32, - "NUMSP384D1": 48, "NUMSP384T1": 48, - "NUMSP512D1": 64, "NUMSP512T1": 64 - }[p.algorithm.namedCurve]; + var partLen = cryptoECC.curveElementLength(p.algorithm.namedCurve); function padToCurveLength( array ) { return msrcryptoUtilities.padFront(array, 0, partLen); @@ -8677,12 +8684,7 @@ if (typeof operations !== "undefined") { keyObject.y = publicKey.y; } - var partLen = { - "P-256": 32, "P-384": 48, "P-521": 66, - "NUMSP256D1": 32, "NUMSP256T1": 32, - "NUMSP384D1": 48, "NUMSP384T1": 48, - "NUMSP512D1": 64, "NUMSP512T1": 64 - }[p.algorithm.namedCurve]; + var partLen = cryptoECC.curveElementLength(p.algorithm.namedCurve); if ( keyObject.x ) { keyObject.x = msrcryptoUtilities.padFront(keyObject.x, 0, partLen); } if ( keyObject.y ) { keyObject.y = msrcryptoUtilities.padFront(keyObject.y, 0, partLen); } if ( keyObject.d ) { keyObject.d = msrcryptoUtilities.padFront(keyObject.d, 0, partLen); } diff --git a/dist/msrcrypto.min.js b/dist/msrcrypto.min.js index 964673b..cfc41a4 100644 --- a/dist/msrcrypto.min.js +++ b/dist/msrcrypto.min.js @@ -16,4 +16,4 @@ // //******************************************************************************* -"use strict";var msrCryptoVersion="1.7.0";(function(Nr,Mr){if(typeof define==="function"&&define.amd){define([],function(){return Nr.msrCrypto=Mr(Nr)})}else if(typeof exports==="object"){module.exports=Mr(Nr)}else{Nr.msrCrypto=Mr(Nr)}})(this,function(Nr){Nr=Nr||{};var Mr=function(){var Q={};Q.register=function(r,t,n){if(!Object.prototype.hasOwnProperty.call(Q,r)||typeof Q[r]!=="object"){Q[r]={}}var l=Q[r];if(!Object.prototype.hasOwnProperty.call(l,t)){l[t]=n}};Q.exists=function(r,t){if(!Object.prototype.hasOwnProperty.call(Q,r)||typeof Q[r]!=="object"){return false}var n=Q[r];return Object.prototype.hasOwnProperty.call(n,t)&&typeof n[t]==="function"};var Vr=(function(){if(typeof document!=="undefined"){try{throw new Error}catch(t){if(t.stack){var r=/\w+:\/\/(?:[^/\s]+\/)*[^/\s]*\.js/.exec(t.stack);return r&&r.length>0?r[0]:null}}}else if(typeof self!=="undefined"&&typeof self.location!=="undefined"){return self.location.href}return null})();var he=false;var xe=typeof Worker!=="undefined";var ee=typeof importScripts==="function"&&self instanceof WorkerGlobalScope;var Qr=false;var $r=typeof ArrayBuffer!=="undefined";var ve=(function(){try{Object.defineProperty({},"oncomplete",{});return true}catch(r){return false}})();var Tr=false;var qr=function(r,t,n,l,F){if(!ve){r[t]=n;return}var v={};l&&(v.get=l);F&&(v.set=F);Object.defineProperty(r,t,v)};var Pr={};var te={};function ge(r,t){if(r!==te){throw new Error("Illegal constructor")}for(var n in t){if(t.hasOwnProperty(n)){this[n]=t[n]}}}var J=(function(){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function t(A){if("console"in self&&"log"in console){console.log(A)}}function n(A,W){var s=F(A);if(s!=="Array"&&s!=="Uint8Array"&&s!=="ArrayBuffer"){throw new Error("invalid input")}var C="";var M=h(A);if(!W){W=false}var O,Y,z,Z,ir,yr,er;var fr;for(fr=0;fr>2;ir=(O&3)<<4|Y>>4;yr=(Y&15)<<2|z>>6;er=z&63;if(isNaN(Y)){yr=er=64}else if(isNaN(z)){er=64}C=C+r.charAt(Z)+r.charAt(ir)+r.charAt(yr)+r.charAt(er)}if(W){return C.replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}return C}function l(A){A=A.replace(/-/g,"+").replace(/_/g,"/");while(A.length%4!==0){A+="="}var W=[];var s,C,M;var O,Y,z,Z;var ir;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(ir=0;ir>4;C=(Y&15)<<4|z>>2;M=(z&3)<<6|Z;W.push(s);if(z!==64){W.push(C)}if(Z!==64){W.push(M)}}return W}function F(A){return Object.prototype.toString.call(A).slice(8,-1)}function v(A,W){var s="";if(typeof W==="undefined"){W=false}for(var C=0;C=2){W.push(parseInt(A.substring(0,2),16));A=A.substring(2,A.length)}return W}function c(A){var W={};for(var s in A){if(A.hasOwnProperty(s)){W[s]=A[s]}}return W}function d(A,W,s){var C=l(A),M=[],O;if(isNaN(W)){return C}else{for(O=0;O>>24&255,A>>>16&255,A>>>8&255,A&255]}function y(A){var W=[];for(var s=0;s1){A=new Uint8Array(A.buffer)}if(A.length===1){return[A[0]]}if(A.length<65536){return Array.apply(null,A)}var W=new Array(A.length);for(var s=0;s>>0;var M=s|0;if(M<0){M=Math.max(C+M,0)}for(;M255){return false}}return true}function H(A,W,s){if(!A){throw new Error(s)}if(W&&F(A)!==W){throw new Error(s)}return true}function N(A){var W=[];for(var s=0,C=0;s>>6|192;W[C++]=M&63|128}else if(M<55296||M>57343){W[C++]=M>>>12|224;W[C++]=M>>>6&63|128;W[C++]=M&63|128}else{M=(M-55296)*1024+(A.charCodeAt(++s)-56320)+65536;W[C++]=M>>>18|240;W[C++]=M>>>12&63|128;W[C++]=M>>>6&63|128;W[C++]=M&63|128}}return W}function K(A){var W="",s;A=h(A);for(var C=0;C65535){var O=Math.floor((s-65536)/1024)+55296;var Y=(s-65536)%1024+56320;W+=String.fromCharCode(O,Y);continue}W+=String.fromCharCode(s)}return W}var D={IndexSizeError:1,HierarchyRequestError:3,WrongDocumentError:4,InvalidCharacterError:5,NoModificationAllowedError:7,NotFoundError:8,NotSupportedError:9,InUseAttributeError:10,InvalidStateError:11,SyntaxError:12,InvalidModificationError:13,NamespaceError:14,InvalidAccessError:15,TypeMismatchError:17,SecurityError:18,NetworkError:19,AbortError:20,URLMismatchError:21,QuotaExceededError:22,TimeoutError:23,InvalidNodeTypeError:24,DataCloneError:25};function U(A,W){W=W||"";try{return new DOMException(W,A)}catch(C){var s=new Error(W);s.name=A;if(D.hasOwnProperty(A)){s.code=D[A]}return s}}function b(A){if(!(A instanceof Array))return false;for(var W=0;W255||s<0)return false}return true}function _(A){return typeof A==="number"&&isFinite(A)&&Math.floor(A)===A};return{consoleLog:t,toBase64:n,fromBase64:l,checkParam:H,getObjectType:F,bytesToHexString:v,bytesToInt32:x,stringToBytes:N,bytesToString:K,unpackData:d,hexToBytesArray:E,int32ToBytes:g,int32ArrayToBytes:y,toArray:h,arraysEqual:m,indexOf:u,clone:c,xorVectors:a,padEnd:w,padFront:f,getVector:e,verifyByteArray:p,error:U,isBytes:b,isInteger:_}})();var Lr=(function(){var r={0:"CUSTOM",1:"BOOLEAN",2:"INTEGER",3:"BIT STRING",4:"OCTET STRING",5:"NULL",6:"OBJECT IDENTIFIER",16:"SEQUENCE",17:"SET",19:"PRINTABLE STRING",23:"UTCTime"};var t={0:"UNIVERSAL",1:"APPLICATION",2:"Context-Defined",3:"PRIVATE"};function n(c,d){d=!!d;var g=r[c[0]&31],y=c[1],a=0,e=!!(c[0]&32),h,w,f;if(y&128){for(a=0,y=0;a<(c[1]&127);a++){y=(y<<8)+c[2+a]}}f=2+a;if(g===void 0||y>c.length){return null}var m=e?[]:{};m.type=g;m.header=f;m.data=c.slice(0,y+f);if(e||d){if(m.type==="BIT STRING"&&c[f]===0){a++}h=c.slice(f,m.data.length);while(h.length>0){w=n(h);if(w===null){break}m.push(w);h=h.slice(w.data.length)}}return m}function l(c){var d=2,g=3,y=4,a=5,e=6,h=16,w=160,f=32;if(c.hasOwnProperty("INTEGER")){var m=c.INTEGER;if(J.isInteger(m))m=v(m);if(m[0]&128)m.unshift(0);var u=[d].concat(F(m),m);return u}if(c.hasOwnProperty("OCTET STRING")){var m=c["OCTET STRING"];if(!(m instanceof Array))m=l(m);var u=[y].concat(F(m),m);return u}if(c.hasOwnProperty("BIT STRING")){var m=c["BIT STRING"];if(!(m instanceof Array))m=l(m);m.unshift(0);var u=[g].concat(F(m),m);return u}if(c.hasOwnProperty("NULL")){return[a,0]}if(c.hasOwnProperty("OBJECT IDENTIFIER")){var m=x(c["OBJECT IDENTIFIER"]);var u=[e].concat(F(m),m);return u}if(c.hasOwnProperty("SEQUENCE")){var p=c.SEQUENCE;var m=[];for(var H=0;H0){d.unshift(c&255);c>>>=8}return d}function x(c){var d=c.split(".");var g=[parseInt(d[0]*40+parseInt(d[1]))];for(var y=2;y0){e.push(a&127|128);a=a>>>7}e[0]=e[0]&127;g=g.concat(e.reverse())}return g}function E(c,d){var g=new Array(d+1).join(" ")+c.type+" ("+c.length+") "+bytesToHexString(c.data).substring(0,16)+"\n";if(!c.children){return g}for(var y=0;y=T){X[0]=X[0]*T;Cr=Cr.concat("0")}for(hr=0;hr=0){var L=0;while(L<8){var rr=1<>>S&1)&S)}return T}function f(I){var T=0;var S=0;while(T=0&&S===0){var L=1<>>=1){if(j===T){hr[++X]=0;j=0}hr[X]+=(cr&1)<>>rr|I[L]<>>k.DIGIT_BITS-S}function H(I,T,S){var R=Math.floor(T/r),L=T%r;return I[R]>>>L|I[R+1]<>>r-S}function N(I,T,S,R,L){while(L-- >0){S[R+L]=I[T+L]}}function K(I){var T,S=0;for(T=0;T=0;j--){R=R+E[rr++]*(I[j]&255);if(E[rr]===l){rr=0;S[L++]=R;R=0}}if(R!==0){S[L]=R}while(S[--T]==null){S[T]=0}return S}function _(I,T,S){var R,L,rr;var j=[0];if(typeof T==="undefined"){T=true}for(R=0;RS&&j[0]===0){j.shift()}}return j}function A(I,T){if(typeof T==="undefined"){if(I<=1){T=1}else{var S=Math.log(I)/Math.LN2;T=Math.ceil(S/r)}}var R=[];while(I>0){R.push(I%l);I=Math.floor(I/l)}while(R.length=0;T--){if(I[T]!==void 0&&I[T]!==0){return T}}return I[0]===0?-1:0}function s(I,T){var S=0,R,L;for(L=0;L=r||S<0){throw new Error("Invalid bit count for shiftRight")}if(R===void 0){R=I.length}var L=R-1;var rr=r-S;for(var j=0;j>>S)&n}T[L]=I[L]>>>S}function O(I,T,S,R){if(S===void 0){S=1}else if(S>=r||S<0){throw new Error("bit count must be smaller than DIGIT_BITS and positive in shiftLeft")}if(R===void 0){R=I.length}var L=r-S;T[R]=I[R-1]>>>r-S||T[R];for(var rr=R-1;rr>0;rr--){T[rr]=(I[rr]<>>L)&n}T[0]=I[0]<>r}for(X=rr;X>r}S.length=L.length;if(j!==0){S[X]=j&n}return j}function z(I,T,S){var R=T.length;if(I.length>r}while(L>r}return rr}function Z(I,T,S){T=typeof T==="number"?[T]:T;var R,L,rr,j,X,cr,hr,vr=I.length,Cr=T.length,kr;for(R=0;R=0;lr--){Cr=hr*l+I[lr];S[lr]=Cr/kr&n;hr=Cr-S[lr]*kr&n}S.length=j;C(S);R[0]=hr;R.length=1;return}var fe=r-1-w(T[X-1]);var zr=L||[];zr.length=X;O(T,zr,fe,X);var ur=rr||[];ur.length=j;O(I,ur,fe,j);ur[j]=ur[j]||0;S.length=j-X+1;R.length=X;for(lr=j-X;lr>=0;lr--){cr=Math.floor((ur[lr+X]*l+ur[lr+X-1])/zr[X-1]);hr=ur[lr+X]*l+ur[lr+X-1]-cr*zr[X-1];while(true){if(cr>=l||cr*zr[X-2]>hr*l+ur[lr+X-2]){cr=cr-1;hr=hr+zr[X-1];if(hr>r}ur[lr+X]=ur[lr+X]+vr&n}}for(gr=0;gr>>fe|ur[gr+1]<0){R=T;L=I}fr(R,L,void 0,void 0,S);return C(S)}function nr(I,T,S,R){var L=new Array(T.length);var rr=new Array(T.length);var j=new Array(T.length);var X=fr(I,T,rr,L,j);S=S||[];if(s(j,g)!==0){S[0]=NaN;S.length=1}else{if((X&1)===1){z(T,L,S)}else{N(L,0,S,0,L.length);S.length=L.length}if(R){C(S,T.length,true)}else{C(S)}}return S}function V(I,T,S,R){var L=[];S=S||[];z(T,[2],L);tr(I,L,T,S);C(S);return S}function tr(I,T,S,R){R=R||[];if(s(T,d)===0){R[0]=1}else if(s(T,g)===0){N(I,0,R,0,I.length);R.length=I.length}else{var L=new wr(S);C(I,L.s,true);L.modExp(I,T,R);R.length=S.length}return R}function wr(I,T){function S(q){var G=1;var $=2;var ar=3;var or=ar&q;for(var Fr=2;Fr<=r;Fr+=1){if($0);k.subtract($,or,ar.temp2);Cr(Xe,$,ar.temp2);return}function rr(q){if(q.length>>31;for(Ir=0;Ir0);k.subtract(G,lr,sr);Cr(dr,G,sr);C(G);return}function gr(q){var G=q.length;var $=q[0];var ar={m:q,mPrime:S($),m0:$,temp1:y(2*G+1),temp2:y(2*G+1)};var or=y(q.length*2);or[or.length]=1;ar.mu=[];ir(or,q,ar.mu,[]);var Fr=y(2*G+1);var xr=y(G+1);var Br=y(2*G+1);var Ir=y(2*G+1);var dr=xr;dr[G]=1;ir(dr,q,Fr,xr,Br,Ir);ar.rModM=C(xr,G,true);var sr=y(2*G+1);var br=sr;br[G*2]=1;ir(br,q,Fr,sr,Br,Ir);ar.rSquaredModm=C(sr,G,true);ar.rCubedModm=y(G);L(sr,sr,ar.rCubedModm,ar);return ar}T=T||gr(I);var lr=T.m;var fe=T.mu;var zr=T.m0;var ur=lr.length;var pr=y(ur+1);var Kr=pr.slice(0,ur);Kr[0]=1;var Or=T.mPrime;var Gr=T.rModM;var pe=T.rSquaredModm;var Hr=T.rCubedModm;var o=y(2*ur+1);var B=y(2*ur+1);var P=new Array(4);P[0]=Gr;P[1]=new Array(ur);P[2]=new Array(ur);P[3]=new Array(ur);return{m:lr,m0:zr,mPrime:Or,mu:fe,rSquaredModm:pe,s:ur,rModM:Gr,rCubedModm:Hr,one:Kr,temp1:o,temp2:B,convertToMontgomeryForm:rr,convertToStandardForm:j,montgomeryMultiply:L,modExp:hr,reduce:kr,ctx:T}}function Ur(I){var T=b(I);var S=T.length;var R=A(0,S);var L=A(1,S);var rr=y(S);var j=y(S);var X=new wr(T);function cr(pr){var Kr=b(pr);if(k.compareDigits(Kr,this.m_modulus)>=0){throw new Error("The number provided is not an element of this group")}C(Kr,this.m_digitWidth,true);return ur(Kr,this)}function hr(pr){var Kr=A(pr,this.m_digitWidth);return ur(Kr,this)}function vr(pr){k.normalizeDigitArray(pr,this.m_digitWidth,true);return ur(pr,this)}function Cr(pr){return s(this.m_modulus,pr.m_modulus)===0}function kr(pr,Kr,Or){var Gr;var pe=this.m_digitWidth;var Hr=Or.m_digits;k.add(pr.m_digits,Kr.m_digits,Hr);var o=(s(Hr,this.m_modulus)>>>31)-1&n;var B=0;for(Gr=0;Gr>r}Hr.length=pe}function gr(pr,Kr,Or){var Gr,pe=this.m_digitWidth;var Hr=Or.m_digits;var o=k.subtract(pr.m_digits,Kr.m_digits,Or.m_digits);if(o===-1){o=0;for(Gr=0;Gr>r}}}function lr(pr,Kr){k.modInv(pr.m_digits,this.m_modulus,Kr.m_digits)}function fe(pr,Kr,Or){return k.modMul(pr.m_digits,Kr.m_digits,this.m_modulus,Or.m_digits,rr,j)}function zr(pr,Kr,Or){Or=Or||ur([],this);if(s(Kr,R)===0){Or.m_digits=A(1,this.m_digitWidth)}else if(s(Kr,L)===0){for(var Gr=0;Gr>>k.DIGIT_BITS}G=G<=0){throw new Error("The scalar k must be in the range 1 <= k < order.")}o=o.slice();if(B.curve.type===1){var G=typeof B.ta!=="undefined";if(!G){gr(B)}lr(o,B,P,q);if(!G){zr(B)}}else{var $=B.isInMontgomeryForm,ar=P.isInMontgomeryForm,or=P.isAffine;if(!$){j(B)}if(!ar){j(P)}S(o,B,P);if(or){cr(P)}if(!$){X(B)}if(!ar){X(P)}}return}function S(o,B,P){var q=B.clone();X(q);if(!vr(q)){throw new Error("Invalid Parameters.")}var G=o[0]&1,$=[];z(B.curve.order,o,$);for(sr=0;sr=0;sr--){for(var br=0;br>>31);for(var _r=0;_r=0;or--){for(Fr=0;Fr<$-1;Fr++){ur(xr,xr)}Sr=Math.floor((Math.abs(br[or])-1)/2);var _r=fe(Br,Sr);var Ee=-(br[or]>>>31);z(B.curve.p,_r.x,dr);for(var Xr=0;Xr<_r.x.length;Xr++){_r.x[Xr]=_r.x[Xr]&~Ee|dr[Xr]&Ee}z(B.curve.p,_r.td,dr);for(Xr=0;Xr<_r.td.length;Xr++){_r.td[Xr]=_r.td[Xr]&~Ee|dr[Xr]&Ee}Or(_r,xr,xr)}z(B.curve.p,xr.x,dr);for(or=0;or=F){g=a(g)}return}function m(){if(a(h(g)).length!==0){throw new Error("buffer.length !== 0")}var u=e();g=[];c=n.slice();y=0;return u}return{name:r,computeHash:w,process:f,finish:m,der:t,hashLen:x,maxMessageSize:4294967295}};var ae=(function(){function r(x,E,c,d,g){var y,a,e,h,w=64,f=4294967295;var m=c[0],u=c[1],p=c[2],H=c[3],N=c[4];for(a=0;a<16;a++){g[a]=t.bytesToInt32(x,E*w+a*4)}for(y=16;y<80;y++){h=g[y-3]^g[y-8]^g[y-14]^g[y-16];g[y]=h<<1|h>>>31}for(a=0;a<80;a++){e=m<<5|m>>>27;e+=a>=60?u^p^H:a>=40?u&p^u&H^p&H:a>=20?u^p^H:u&p^~u&H;e+=N+d[a]+g[a];N=H;H=p;p=u<<30|u>>>2;u=m;m=e}c[0]+=m&f;c[1]+=u&f;c[2]+=p&f;c[3]+=H&f;c[4]+=N&f;return c}var t=J,n=t.unpackData,l=n("Z0UjAe/Nq4mYutz+EDJUdsPS4fA=",4,1),F=n("WoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroY8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdY",4,1),v=n("MCEwCQYFKw4DAhoFAAQU");return{sha1:function(){return we("SHA-1",v,l,F,64,r,160)}}})();if(typeof Q!=="undefined"){ae.instances={};ae.getInstance=function(r){return ae.instances[r]||(ae.instances[r]=ae.sha1())};ae.deleteInstance=function(r){ae.instances[r]=null;delete ae.instances[r]};ae.hash=function(r){if(r.operationSubType==="process"){ae.sha1.process(r.buffer);return}if(r.operationSubType==="finish"){return ae.sha1.finish()}return ae.sha1().computeHash(r.buffer)};Q.register("digest","SHA-1",ae.hash)}Pr["SHA-1"]=ae.sha1;var Ar=(function(){var r=J;function t(c,d,g,y,a){var e,h,w,f,m,u=64,p=4294967295;var H=g[0],N=g[1],K=g[2],D=g[3],U=g[4],b=g[5],_=g[6],A=g[7];for(h=0;h<16;h++){a[h]=r.bytesToInt32(c,d*u+h*4)}for(e=16;e<64;e++){f=a[e-15];m=a[e-2];a[e]=((m>>>17|m<<15)^(m>>>19|m<<13)^m>>>10)+a[e-7]+((f>>>7|f<<25)^(f>>>18|f<<14)^f>>>3)+a[e-16];a[e]=a[e]&p}for(h=0;h<64;h++){w=A+((U>>>6|U<<26)^(U>>>11|U<<21)^(U>>>25|U<<7))+(U&b^~U&_)+y[h]+a[h];D+=w;w+=((H>>>2|H<<30)^(H>>>13|H<<19)^(H>>>22|H<<10))+(H&(N^K)^N&K);A=_;_=b;b=U;U=D;D=K;K=N;N=H;H=w}g[0]=g[0]+H>>>0;g[1]=g[1]+N>>>0;g[2]=g[2]+K>>>0;g[3]=g[3]+D>>>0;g[4]=g[4]+U>>>0;g[5]=g[5]+b>>>0;g[6]=g[6]+_>>>0;g[7]=g[7]+A>>>0;return g}var n,l,F,v,x,E=r.unpackData;l=E("wQWe2DZ81QcwcN0X9w5ZOf/ACzFoWBURZPmPp776T6Q",4,1);F=E("agnmZ7tnroU8bvNypU/1OlEOUn+bBWiMH4PZq1vgzRk",4,1);n=E("QoovmHE3RJG1wPvP6bXbpTlWwltZ8RHxkj+CpKscXtXYB6qYEoNbASQxhb5VDH3Dcr5ddIDesf6b3AanwZvxdOSbacHvvkeGD8GdxiQMocwt6SxvSnSEqlywqdx2+YjamD5RUqgxxm2wAyfIv1l/x8bgC/PVp5FHBspjURQpKWcntwqFLhshOE0sbfxTOA0TZQpzVHZqCruBwskuknIshaK/6KGoGmZLwkuLcMdsUaPRkugZ1pkGJPQONYUQaqBwGaTBFh43bAgnSHdMNLC8tTkcDLNO2KpKW5zKT2gub/N0j4LueKVjb4TIeBSMxwIIkL7/+qRQbOu++aP3xnF48g",4,1);v=E("MC0wDQYJYIZIAWUDBAIEBQAEHA");x=E("MDEwDQYJYIZIAWUDBAIBBQAEIA");return{sha224:function(){return we("SHA-224",v,l,n,64,t,224)},sha256:function(){return we("SHA-256",x,F,n,64,t,256)}}})();if(typeof Q!=="undefined"){Ar.instance224=Ar.instance224||Ar.sha224();Ar.instance256=Ar.instance256||Ar.sha256();Ar.instances={};Ar.getInstance224=function(r){return Ar.instances[r]||(Ar.instances[r]=Ar.sha224())};Ar.getInstance256=function(r){return Ar.instances[r]||(Ar.instances[r]=Ar.sha256())};Ar.deleteInstance=function(r){Ar.instances[r]=null;delete Ar.instances[r]};Ar.hash256=function(r){if(r.operationSubType==="process"){Ar.getInstance256(r.workerid).process(r.buffer);return null}if(r.operationSubType==="finish"){var t=Ar.getInstance256(r.workerid).finish();Ar.deleteInstance(r.workerid);return t}if(r.operationSubType==="abort"){Ar.deleteInstance(r.workerid);return}return Ar.instance256.computeHash(r.buffer)};Ar.hash224=function(r){if(r.operationSubType==="process"){Ar.getInstance224(r.workerid).process(r.buffer);return}if(r.operationSubType==="finish"){var t=Ar.getInstance224(r.workerid).finish()}if(r.operationSubType==="abort"){msrcryptoSha224.deleteInstance(r.workerid);return}return Ar.instance224.computeHash(r.buffer)};Q.register("digest","SHA-224",Ar.hash224);Q.register("digest","SHA-256",Ar.hash256)}Pr["SHA-224"]=Ar.sha224;Pr["SHA-256"]=Ar.sha256;var Rr=(function(){var r=J;function t(y,a,e,h,w){var f=a+h|0;var m=f>>>0>>0;w[0]=y+e+m|0;w[1]=f;return}function n(y,a,e,h,w){var f,m,u=128,p,H,N,K,D,U,b=[],_=[],A=[],W;var s=e[0],C=e[1],M=e[2],O=e[3],Y=e[4],z=e[5],Z=e[6],ir=e[7],yr=e[8],er=e[9],fr=e[10],Wr=e[11],nr=e[12],V=e[13],tr=e[14],wr=e[15];for(f=0;f<32;f++){W=a*u+f*4;w[f]=y.slice(W,W+4);w[f]=w[f][0]<<24|w[f][1]<<16|w[f][2]<<8|w[f][3]}for(f=32;f<160;f+=2){D=w[f-30];U=w[f-29];p=(D>>>1|U<<31)^(D>>>8|U<<24)^D>>>7;H=(U>>>1|D<<31)^(U>>>8|D<<24)^(U>>>7|D<<25);D=w[f-4];U=w[f-3];N=(D>>>19|U<<13)^(U>>>29|D<<3)^D>>>6;K=(U>>>19|D<<13)^(D>>>29|U<<3)^(U>>>6|D<<26);t(N,K,w[f-14],w[f-13],b);t(p,H,b[0],b[1],b);t(w[f-32],w[f-31],b[0],b[1],b);w[f]=b[0];w[f+1]=b[1]}for(m=0;m<160;m+=2){p=(yr>>>14|er<<18)^(yr>>>18|er<<14)^(er>>>9|yr<<23);H=(er>>>14|yr<<18)^(er>>>18|yr<<14)^(yr>>>9|er<<23);N=yr&fr^nr&~yr;K=er&Wr^V&~er;t(tr,wr,p,H,b);t(N,K,h[m],h[m+1],_);t(b[0],b[1],w[m],w[m+1],A);t(_[0],_[1],A[0],A[1],A);t(A[0],A[1],Z,ir,b);Z=b[0];ir=b[1];H=(C>>>28|s<<4)^(s>>>2|C<<30)^(s>>>7|C<<25);p=(s>>>28|C<<4)^(C>>>2|s<<30)^(C>>>7|s<<25);K=C&(O^z)^O&z;N=s&(M^Y)^M&Y;t(A[0],A[1],p,H,b);p=b[0];H=b[1];t(N,K,p,H,b);p=b[0];H=b[1];tr=nr;wr=V;nr=fr;V=Wr;fr=yr;Wr=er;yr=Z;er=ir;Z=Y;ir=z;Y=M;z=O;M=s;O=C;s=p;C=H}t(e[0],e[1],s,C,b);e[0]=b[0];e[1]=b[1];t(e[2],e[3],M,O,b);e[2]=b[0];e[3]=b[1];t(e[4],e[5],Y,z,b);e[4]=b[0];e[5]=b[1];t(e[6],e[7],Z,ir,b);e[6]=b[0];e[7]=b[1];t(e[8],e[9],yr,er,b);e[8]=b[0];e[9]=b[1];t(e[10],e[11],fr,Wr,b);e[10]=b[0];e[11]=b[1];t(e[12],e[13],nr,V,b);e[12]=b[0];e[13]=b[1];t(e[14],e[15],tr,wr,b);e[14]=b[0];e[15]=b[1];return e}var l,F,v,x,E,c,d,g=r.unpackData;l=g("y7udXcEFnthimikqNnzVB5FZAVowcN0XFS/s2PcOWTlnMyZn/8ALMY60SodoWBUR2wwuDWT5j6dHtUgdvvpPpA==",4,1);F=g("agnmZ/O8yQi7Z66FhMqnOzxu83L+lPgrpU/1Ol8dNvFRDlJ/reaC0ZsFaIwrPmwfH4PZq/tBvWtb4M0ZE34heQ",4,1);v=g("QoovmNcoriJxN0SRI+9lzbXA+8/sTTsv6bXbpYGJ27w5VsJb80i1OFnxEfG2BdAZkj+CpK8ZT5urHF7V2m2BGNgHqpijAwJCEoNbAUVwb74kMYW+TuSyjFUMfcPV/7Ticr5ddPJ7iW+A3rH+OxaWsZvcBqclxxI1wZvxdM9pJpTkm2nBnvFK0u++R4Y4TyXjD8GdxouM1bUkDKHMd6ycZS3pLG9ZKwJ1SnSEqm6m5INcsKncvUH71Hb5iNqDEVO1mD5RUu5m36uoMcZtLbQyELADJ8iY+yE/v1l/x77vDuTG4AvzPaiPwtWnkUeTCqclBspjUeADgm8UKSlnCg5ucCe3CoVG0i/8LhshOFwmySZNLG38WsQq7VM4DROdlbPfZQpzVIuvY952agq7PHeyqIHCyS5H7a7mknIshRSCNTuiv+ihTPEDZKgaZku8QjABwkuLcND4l5HHbFGjBlS+MNGS6BnW71IY1pkGJFVlqRD0DjWFV3EgKhBqoHAyu9G4GaTBFrjS0MgeN2wIUUGrUydId0zfjuuZNLC8teGbSKg5HAyzxclaY07YqkrjQYrLW5zKT3dj43NoLm/z1rK4o3SPgu5d77L8eKVjb0MXL2CEyHgUofCrcozHAggaZDnskL7/+iNjHiikUGzr3oK96b75o/eyxnkVxnF48uNyUyvKJz7O6iZhnNGGuMchwMIH6tp91s3g6x71fU9/7m7ReAbwZ6pyF2+6CmN9xaLImKYRP5gEvvkNrhtxCzUTHEcbKNt39SMEfYQyyqt7QMckkzyevgoVyb68Qx1nxJwQDUxMxdS+yz5Ctll/KZz8ZX4qX8tvqzrW+uxsRBmMSkdYFw==",4,1);x=g("MEEwDQYJYIZIAWUDBAICBQAEMA");E=g("MFEwDQYJYIZIAWUDBAIDBQAEQA");c=g("MC0wDQYJYIZIAWUDBAIFBQAEHA");d=g("MDEwDQYJYIZIAWUDBAIGBQAEIA");return{sha384:function(){return we("SHA-384",x,l,v,128,n,384)},sha512:function(){return we("SHA-512",E,F,v,128,n,512)},sha512_224:function(){return we("SHA-512.224",c,F,v,128,n,224)},sha512_256:function(){return we("SHA-512.256",d,F,v,128,n,256)}}})();if(typeof Q!=="undefined"){Rr.instances={};Rr.getInstance384=function(r){return Rr.instances[r]||(Rr.instances[r]=Rr.sha384())};Rr.getInstance512=function(r){return Rr.instances[r]||(Rr.instances[r]=Rr.sha512())};Rr.deleteInstance=function(r){Rr.instances[r]=null;delete Rr.instances[r]};Rr.hash384=function(r){if(r.operationSubType==="process"){Rr.sha384.process(r.buffer);return}if(r.operationSubType==="finish"){return Rr.sha384.finish()}return Rr.sha384().computeHash(r.buffer)};Rr.hash512=function(r){if(r.operationSubType==="process"){Rr.sha512.process(r.buffer);return}if(r.operationSubType==="finish"){return Rr.sha512.finish()}return Rr.sha512().computeHash(r.buffer)};Q.register("digest","SHA-384",Rr.hash384);Q.register("digest","SHA-512",Rr.hash512)}Pr["SHA-384"]=Rr.sha384;Pr["SHA-512"]=Rr.sha512;var Jr=function(r,t){var n={"384":128,"512":128}[t.name.replace(/SHA-/,"")]||64;var l;var F;var v=y();var x;var E;var c;function d(f,m){var u=new Array(f);for(var p=0;pn){return g(t.computeHash(r),n)}return g(r,n)}function a(f){if(!c){c=E.concat(f);t.process(c)}else{t.process(f)}return}function e(){var f=t.finish();var m=x.concat(f);return t.computeHash(m)}function h(){r=null;t=null;v=null}l=new Array(n);F=new Array(n);for(var w=0;w0){l[l.length-1]&=255<6&&O%e===4){U(C)}var Z=N(_(M,O-e),C);A(M,Z,O,0);O+=1}return M};f=W(g);return{encrypt:function(s){var C=s,M;K(C,f,0);for(M=1;M<=w-1;M+=1){U(C);m(C);p(C);K(C,f,4*M*h)}U(C);m(C);K(C,f,4*w*h);return C},decrypt:function(s){var C=s,M;K(C,f,4*w*h);for(M=w-1;M>=1;M-=1){u(C);b(C);K(C,f,4*M*h);H(C)}u(C);b(C);K(C,f,0);return C},clear:function(){},keyLength:a,blockSize:y}}}})();var Te=Te||{};Te.pkcsv7=function(r){function t(l){var F=l.length-1>=0?l.length-1:0;var v=l[F];var x=v.length;var E=x===r;if(E){var c=[];var d;for(d=0;d0;O--){M[O]=(M[O-1]&1)<<7|M[O]>>>1}M[0]=M[0]>>>1;return M}function u(M,O){var Y=Math.floor(O/8);return M[Y]>>7-O%8&1}function p(M){var O=256;for(var Y=1;Y<=4;Y++){O=(O>>>8)+M[M.length-Y];M[M.length-Y]=O&255}return M}function H(M,O){var Y=Math.ceil(O.length/16),z,Z=[];if(a!==M){a=M.slice()}for(var ir=0;ir>>24&255,M>>>16&255,M>>>8&255,M&255]}function K(M){var O=16*Math.ceil(F.length/16)-F.length;return M.concat(t.getVector(O))}function D(){e=0;n=[];y=[];d=t.getVector(16);g=[];a=l=F=null}function U(M,O,Y){F=O||[];v=isNaN(Y)?128:Y;if(v%8!==0){throw J.error("DataError","tagLength must be a multiple of 8")}l=M;if(l.length===12){x=l.concat([0,0,0,1])}else{var z=16*Math.ceil(l.length/16)-l.length;x=h(c,l.concat(t.getVector(z+8)).concat(N(l.length*8)));d=t.getVector(16)}E=p(x.slice());h(c,K(F))}function b(M){e=M.length;var O=H(E,M);h(c,O);var Y=w();var z=H(x,Y).slice(0,v/8);D();return O.slice().concat(z)}function _(M,O){e=M.length;var Y=H(E,M);h(c,M);var z=w();var Z=H(x,z).slice(0,v/8);D();if(t.arraysEqual(Z,O)){return Y}else{return null}}function A(M){n=n.concat(M);var O=n.slice(0,Math.floor(n.length/16)*16);e+=O.length;n=n.slice(O.length);var Y=H(a||E,O);y=y.concat(Y);h(c,Y)}function W(M){n=n.concat(M);var O=n.slice(0,Math.floor((n.length-v/8)/16)*16);e+=O.length;n=n.slice(O.length);var Y=H(a||E,O);y=y.concat(Y);h(c,O)}function s(){var M=H(a,n);y=y.concat(M);e+=n.length;var O=w();var Y=H(x,O).slice(0,v/8);var z=y.slice().concat(Y);D();return z}function C(){var M=Math.floor(v/8);var O=n.slice(-M);n=n.slice(0,n.length-M);var Y=H(a,n);y=y.concat(Y);e+=n.length;var z=w();var Z=H(x,z).slice(0,v/8);var ir=y.slice();D();if(t.arraysEqual(Z,O)){return ir}else{return null}}return{init:U,encrypt:b,decrypt:_,processEncrypt:A,processDecrypt:W,finishEncrypt:s,finishDecrypt:C}};if(typeof Q!=="undefined"){var Yr={};le.encrypt=function(r){var t,n=r.workerid;if(!Yr[n]){Yr[n]=le(de.aes(r.keyData));Yr[n].init(r.algorithm.iv,r.algorithm.additionalData,r.algorithm.tagLength)}if(r.operationSubType==="process"){Yr[n].processEncrypt(r.buffer);return}if(r.operationSubType==="finish"){t=Yr[n].finishEncrypt();Yr[n]=null;return t}t=Yr[n].encrypt(r.buffer);Yr[n]=null;return t};le.decrypt=function(r){var t,n=r.workerid;if(!Yr[n]){Yr[n]=le(de.aes(r.keyData));Yr[n].init(r.algorithm.iv,r.algorithm.additionalData,r.algorithm.tagLength)}if(r.operationSubType==="process"){Yr[n].processDecrypt(r.buffer);return}if(r.operationSubType==="finish"){t=Yr[n].finishDecrypt();Yr[n]=null;if(t===null){throw J.error("OperationError","")}return t}var l=r.algorithm.tagLength?Math.floor(r.algorithm.tagLength/8):16;var F=r.buffer.slice(0,r.buffer.length-l);var v=r.buffer.slice(-l);t=Yr[n].decrypt(F,v);Yr[n]=null;if(t===null){throw J.error("OperationError","")}return t};le.generateKey=function(r){if(r.algorithm.length!==128&&r.algorithm.length!==192&&r.algorithm.length!==256){throw new Error("invalid key length (should be 128, 192, or 256 bits)")}return{type:"keyGeneration",keyData:jr.getBytes(Math.floor(r.algorithm.length/8)),keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"secret"}}};le.importKey=function(r){var t,n=r.keyData.length*8;if(r.format==="jwk"){t=ne.jwkToKey(r.keyData,r.algorithm,["k"])}else if(r.format==="raw"){if(n!==128&&n!==192&&n!==256){throw new Error("invalid key length (should be 128, 192, or 256 bits)")}t={k:J.toArray(r.keyData)}}else{throw new Error("unsupported import format")}return{type:"keyImport",keyData:t.k,keyHandle:{algorithm:r.algorithm,extractable:r.extractable||t.extractable,usages:r.usages,type:"secret"}}};le.exportKey=function(r){if(r.format==="jwk"){return{type:"keyExport",keyHandle:ne.keyToJwk(r.keyHandle,r.keyData)}}if(r.format==="raw"){return{type:"keyExport",keyHandle:r.keyData}}throw new Error("unsupported export format")};Q.register("importKey","AES-GCM",le.importKey);Q.register("exportKey","AES-GCM",le.exportKey);Q.register("generateKey","AES-GCM",le.generateKey);Q.register("encrypt","AES-GCM",le.encrypt);Q.register("decrypt","AES-GCM",le.decrypt)}var ue=function(r){function t(l){var F=[[0]];for(var v=0;v0;a--,g>>>=8){x[a]^=g&255}}}var e=x;for(var v=1;v<=E;v++){e=e.concat(c[v])}return e}function n(l){var F=[];for(var v=0;v=0;g--){for(var v=x;v>=1;v--){var y=x*g+v;for(var a=7;y>0;a--,y>>>=8){d[a]^=y&255}var e=r.decrypt(d.concat(E[v]));d=e.slice(0,8);E[v]=e.slice(8)}}if(d.join(",")!=="166,166,166,166,166,166,166,166"){throw J.error("OperationError","")}for(var v=1;v<=x;v++){c=c.concat(E[v])}return c}return{encrypt:t,decrypt:n}};if(typeof Q!=="undefined"){var me={};ue.workerEncrypt=function(r){var t,n=r.workerid;if(r.buffer.length%8!==0){throw J.error("DataError","The AES-KW input data length is invalid: not a multiple of 8 bytes")}if(!me[n]){me[n]=ue(de.aes(r.keyData))}t=me[n].encrypt(r.buffer);me[n]=null;return t};ue.workerDecrypt=function(r){var t,n=r.workerid;if(r.buffer.length%8!==0){throw J.error("DataError","The AES-KW input data length is invalid: not a multiple of 8 bytes")}if(!me[n]){me[n]=ue(de.aes(r.keyData))}t=me[n].decrypt(r.buffer);me[n]=null;return t};ue.generateKey=function(r){if(r.algorithm.length!==128&&r.algorithm.length!==192&&r.algorithm.length!==256){throw J.error("OperationError","AES key length must be 128, 192, or 256 bits")}return{type:"keyGeneration",keyData:jr.getBytes(Math.floor(r.algorithm.length/8)),keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"secret"}}};ue.importKey=function(r){var t;var n=r.keyData.length*8;if(r.format==="jwk"){t=ne.jwkToKey(r.keyData,r.algorithm,["k"])}else if(r.format==="raw"){if(n!==128&&n!==192&&n!==256){throw J.error("OperationError","AES key length must be 128, 192, or 256 bits")}t={k:J.toArray(r.keyData)}}else{throw new TypeError("Invalid keyFormat argument")}r.algorithm.length=t.k.length*8;return{keyData:t.k,keyHandle:{algorithm:r.algorithm,extractable:r.extractable||t.extractable,usages:r.usages,type:"secret"},type:"keyImport"}};ue.exportKey=function(r){if(r.format==="jwk"){return{type:"keyExport",keyHandle:ne.keyToJwk(r.keyHandle,r.keyData)}}if(r.format==="raw"){return{type:"keyExport",keyHandle:r.keyData}}throw new TypeError("Invalid keyFormat argument")};Q.register("importKey","AES-KW",ue.importKey);Q.register("exportKey","AES-KW",ue.exportKey);Q.register("generateKey","AES-KW",ue.generateKey);Q.register("encrypt","AES-KW",ue.workerEncrypt);Q.register("decrypt","AES-KW",ue.workerDecrypt)}function Be(){if(!(this instanceof Be)){throw new Error("create MsrcryptoPrng object with new keyword")}var r=false;var t;var n;var l;var F;var v=1;var x=Math.pow(2,48);c();function E(a){var e;for(e=a.length-1;e>=0;e-=1){a[e]+=1;if(a[e]>=256){a[e]=0}if(a[e]){break}}}function c(){t=J.getVector(32);n=J.getVector(16);l=32;F=48;v=1}function d(a,e){e=e||[0];if(e.length>F){throw new Error("Incorrect entropy or additionalEntropy length")}e=e.concat(J.getVector(F-e.length));a=a.concat(J.getVector((F-a.length%F)%F));for(var h=0;h=65536){throw new Error("too much random requested")}if(v>x){throw new Error("Reseeding is required")}if(e&&e.length>0){while(e.length=l){a.stopCollectors()}}var y=r&&r.addEventListener||typeof document!=="undefined"&&document.attachEvent;var a=(function(){return{startCollectors:function(){if(!this.collectorsRegistered){if(r.addEventListener){r.addEventListener("mousemove",this.MouseEventCallBack,true);r.addEventListener("load",this.LoadTimeCallBack,true)}else if(document.attachEvent){document.attachEvent("onmousemove",this.MouseEventCallBack);document.attachEvent("onload",this.LoadTimeCallBack)}else{throw new Error("Can't attach events for entropy collection")}this.collectorsRegistered=1}},stopCollectors:function(){if(this.collectorsRegistered){if(r.removeEventListener){r.removeEventListener("mousemove",this.MouseEventCallBack,1);r.removeEventListener("load",this.LoadTimeCallBack,1)}else if(r.detachEvent){r.detachEvent("onmousemove",this.MouseEventCallBack);r.detachEvent("onload",this.LoadTimeCallBack)}this.collectorsRegistered=0}},MouseEventCallBack:function(e){var h=new Date().valueOf();var w=e.x||e.clientX||e.offsetX||0;var f=e.y||e.clientY||e.offsetY||0;var m=[h&255,h>>8&255,h>>16&255,h>>24&255,w&255,w>>8&255,f&255,f>>8&255];g(m)},LoadTimeCallBack:function(){var e=new Date().valueOf();var h=[e&255,e>>8&255,e>>16&255,e>>24&255];g(h)}}})();return{init:function(){d();if(!E&&!F&&y){try{a.startCollectors()}catch(e){}}},reseed:function(e){v.reseed(e)},read:function(e){if(!x){throw new Error("Entropy pool is not initialized.")}var h=v.getBytes(e);d();return h}}}var Ne=(function(){var r=[];var t=[];var n=4096*4;function l(y){var a=new Array(y+1),e=[],h,w,f=Math.sqrt(y)|0;for(h=3;h<=f;h+=2){for(w=h*h;w<=y;w+=h*2){a[w]=0}}for(h=3;h<=y;h+=2){if(a[h]!==0){e.push(h)}}return e}function F(y){var a,e=t.length;for(a=0;a=0){w=h*p+y[e--];h=w-(w/f|0)*f}t[a]=h}return}function x(y){var a=0,e=0,h=0,w;if(k.isZero(y)){return 0}for(a=0;y[a]===0;a++){}for(e=0,w=2;y[a]%w===0;w*=2,e++){}return a*k.DIGIT_BITS+e}function E(y){var a=0,e=0,h=0;if(k.isZero(y)){return 0}for(a=y.length-1;y[a]===0;a--){}for(e=k.DIGIT_BITS-1,h=1<0;h=h>>>1,e--){if((y[a]&h)!==0){break}}return a*k.DIGIT_BITS+e}function c(y,a){var e=y;var h=[];k.subtract(e,[1],h);var w=x(h);var f=[];k.shiftRight(h,f,w);var m=E(e);var u;var p=k.MontgomeryMultiplier(e);for(var H=1;H<=a;H++){var N=false;do{u=g(m)}while(k.compareDigits(u,h)>=0);var K=[];p.modExp(u,f,K,true);if(k.compareDigits(K,[1])===0||k.compareDigits(K,h)===0){continue}for(var D=1;D>>24&255,x>>>16&255,x>>>8&255,x&255];v=n.computeHash(r.concat(F));l=l.concat(v)}return l.slice(0,t)},checkMessageVsMaxHash:function(r,t){if(r.length>(t.maxMessageSize||4294967295)){throw new Error("message too long")}return}};var ie=ie||{};ie.oaep=function(r,t){var n=J,l=jr,F=r.n.length;if(t===null){throw new Error("must supply hashFunction")}function v(E,c){var d,g,y,a,e,h;var w,f,m,u;var p;if(E.length>F-2*(t.hashLen/8)-2){throw new Error("Message too long.")}if(c==null){c=[]}d=t.computeHash(c);g=F-E.length-2*d.length-2;y=n.getVector(g);e=d.concat(y,[1],E);h=l.getBytes(d.length);w=Ae.mgf1(h,F-d.length-1,t);f=n.xorVectors(e,w);m=Ae.mgf1(f,d.length,t);u=n.xorVectors(h,m);p=[0].concat(u).concat(f);E=p.slice();return E}function x(E,c){var d,g,y,a;var e,h,w;var f,m=0;var u=E[0]===0;if(!c){c=[]}d=t.computeHash(c);g=E.slice(1,d.length+1);y=E.slice(d.length+1);a=Ae.mgf1(y,d.length,t);e=n.xorVectors(g,a);h=Ae.mgf1(e,F-d.length-1,t);w=n.xorVectors(y,h);f=w.slice(0,d.length);u=u&&n.arraysEqual(d,f);w=w.slice(d.length);while(!w[m++]){}return{valid:u,data:w.slice(m)}}return{pad:function(E,c){return v(E,c)},unpad:function(E,c){return x(E,c)}}};var ie=ie||{};ie.pkcs1Encrypt=function(r){var t=jr,n=r.n.length;function l(x){var E;if(x.length>n-11){throw new Error("message too long")}E=t.getNonZeroBytes(n-x.length-3);return[0,2].concat(E,[0],x)}function F(x){var E=x[0]===0&&x[1]===2;for(var c=2;c<10;c++){E=E&&!!x[c]}return E}function v(x){var E,c=F(x),d=0;for(E=1;E>>8-(8*y-g);for(var u=0;u0){var v=l;l=F;F=v}var x=[];k.multiply(l,F,x);var E=[];k.subtract(l,[1],E);var c=[];k.subtract(F,[1],c);var d=[];k.multiply(E,c,d);var g=[];k.gcd(n,d,g);var y=k.compareDigits(g,k.One)===0}while(!y);var a=[];k.modInv(n,d,a);var e=[];k.reduce(a,E,e);var h=[];k.reduce(a,c,h);var w=[];k.modInv(F,l,w);var f=k.digitsToBytes;return{privateKey:{n:f(x),e:f(n),d:f(a),p:f(l),q:f(F),dp:f(e),dq:f(h),qi:f(w)},publicKey:{n:f(x),e:f(n)}}};mr.generateKeyPair=function(r){if(typeof r.algorithm.modulusLength==="undefined"){throw new Error("missing modulusLength")}var t;var n=k.bytesToDigits;switch(r.algorithm.modulusLength){case 1024:case 2048:case 4096:t=mr.genRsaKeyFromRandom(r.algorithm.modulusLength,r.algorithm.publicExponent);break;default:throw new Error("invalid modulusLength")}var l=t.privateKey;l.ctxp=new k.MontgomeryMultiplier(n(l.p)).ctx;l.ctxq=new k.MontgomeryMultiplier(n(l.q)).ctx;var F=r.algorithm.name;var v=F.slice(F.indexOf("-")+1).toUpperCase();var x,E;if(F==="RSASSA-PKCS1-V1_5"||F==="RSA-PSS"){x=["verify"];E=["sign"]}else{x=["encrypt","wrapKey"];E=["decrypt","unwrapKey"]}if(r.usages){var c=r.usages;var d=[];var g=[];var y;for(y=0;y=0){d.push(x[y])}}for(y=0;y=0){g.push(E[y])}}x=d;E=g}return{type:"keyGeneration",keyPair:{publicKey:{keyData:t.publicKey,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:x,type:"public"}},privateKey:{keyData:t.privateKey,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:E,type:"private"}}}}};Q.register("sign","RSASSA-PKCS1-V1_5",mr.sign);Q.register("sign","RSA-PSS",mr.sign);Q.register("verify","RSASSA-PKCS1-V1_5",mr.verify);Q.register("verify","RSA-PSS",mr.verify);Q.register("encrypt","RSAES-PKCS1-V1_5",mr.workerEncrypt);Q.register("decrypt","RSAES-PKCS1-V1_5",mr.workerDecrypt);Q.register("encrypt","RSA-OAEP",mr.workerEncrypt);Q.register("decrypt","RSA-OAEP",mr.workerDecrypt);Q.register("importKey","RSA-OAEP",mr.importKey);Q.register("importKey","RSAES-PKCS1-V1_5",mr.importKey);Q.register("importKey","RSASSA-PKCS1-V1_5",mr.importKey);Q.register("importKey","RSA-PSS",mr.importKey);Q.register("exportKey","RSA-OAEP",mr.exportKey);Q.register("exportKey","RSAES-PKCS1-V1_5",mr.exportKey);Q.register("exportKey","RSASSA-PKCS1-V1_5",mr.exportKey);Q.register("exportKey","RSA-PSS",mr.exportKey);Q.register("generateKey","RSA-OAEP",mr.generateKeyPair);Q.register("generateKey","RSAES-PKCS1-V1_5",mr.generateKeyPair);Q.register("generateKey","RSASSA-PKCS1-V1_5",mr.generateKeyPair);Q.register("generateKey","RSA-PSS",mr.generateKeyPair)}var Se=(function(){function r(t){var n=t.algorithm.hash.name,l=Pr[n.toUpperCase()](),F=t.algorithm;var v=Er.toArray(F.algorithmId).concat(Er.toArray(F.partyUInfo),Er.toArray(F.partyVInfo),Er.toArray(F.publicInfo)||[],Er.toArray(F.privateInfo)||[]);var x=Math.ceil(t.length/l.hashLen),E=1,c=t.keyData.concat(v),d=[];for(var g=0;g>>24&255,m>>>16&255,m>>>8&255,m&255]);for(var H=0;H255*E){throw new Error("The length provided for HKDF is too large.")}if(v.length===0){v=J.getVector(E)}a={workerid:0,keyHandle:{algorithm:n},keyData:v,buffer:l};a.keyData=Jr.signHmac(a);for(y=0;y255*c){throw new Error("The length provided for HKDF-CTR is too large.")}y={workerid:0,keyHandle:{algorithm:n},keyData:l,buffer:l};var a=v.concat([0],x,Er.int32ToBytes(F));for(g=1;g<=Math.ceil(E/c);g++){y.buffer=Er.int32ToBytes(g).concat(a);d=d.concat(Jr.signHmac(y))}return d.slice(0,E)}return{deriveBits:r}})();if(typeof Q!=="undefined"){Ke.importKey=function(r){var t;if(r.format==="raw"){t=J.toArray(r.keyData)}else{throw new Error("unsupported import format")}if(r.extractable!==false){throw new Error("only extractable=false is supported.")}return{type:"keyImport",keyData:t,keyHandle:{algorithm:{name:"HKDF-CTR"},extractable:false,usages:r.usages,type:"secret"}}};Q.register("deriveBits","HKDF-CTR",Ke.deriveBits);Q.register("importKey","HKDF-CTR",Ke.importKey)}var Fe=function(r){var t=k.bytesToDigits,n=k.digitsToBytes,l=r,F=new Dr.EllipticCurveOperatorFp(r);function v(c){var d=[],g=jr.getBytes(r.order.length*k.DIGIT_NUM_BYTES);k.reduce(k.bytesToDigits(g),l.order,d);var y=l.allocatePointStorage();F.scalarMultiply(d,l.generator,y);return{privateKey:{x:n(y.x),y:n(y.y),d:n(d)},publicKey:{x:n(y.x),y:n(y.y)}}}function x(c,d,g){var y=new Dr.EllipticCurvePointFp(l,false,t(d.x),t(d.y),null,false);var a=l.allocatePointStorage();F.convertToJacobianForm(a);F.convertToMontgomeryForm(a);F.scalarMultiply(t(c.d),y,a);F.convertToAffineForm(a);F.convertToStandardForm(a);var e=k.digitsToBytes(a.x,true,d.x.length);if(g&&e.length*8>>h;e[e.length-1]=e[e.length-1]&w;return e}function E(c){if(!l.generator.isInMontgomeryForm){F.convertToMontgomeryForm(l.generator)}var d=l.allocatePointStorage();F.convertToJacobianForm(d);F.convertToMontgomeryForm(d);F.scalarMultiply(t(c),l.generator,d);return{x:n(d.x),y:n(d.y)}}return{generateKey:v,deriveBits:x,computePublicKey:E}};var be=null;if(typeof Q!=="undefined"){Fe.deriveBits=function(r){var t=Dr.createCurve(r.algorithm.namedCurve.toUpperCase());var n=r.keyData;var l=r.additionalKeyData;be=Fe(t);var F=be.deriveBits(n,l,r.length);return F};Fe.deriveKey=function(r){throw new Error("not supported");return secretBytes};Fe.generateKey=function(r){var t=Dr.createCurve(r.algorithm.namedCurve.toUpperCase());be=Fe(t);var n=be.generateKey();var l={"P-256":32,"P-384":48,"P-521":66,"NUMSP256D1":32,"NUMSP256T1":32,"NUMSP384D1":48,"NUMSP384T1":48,"NUMSP512D1":64,"NUMSP512T1":64}[r.algorithm.namedCurve];var F=J.padFront;n.publicKey.x=F(n.publicKey.x,0,l);n.publicKey.y=F(n.publicKey.y,0,l);n.privateKey.x=F(n.privateKey.x,0,l);n.privateKey.y=F(n.privateKey.y,0,l);n.privateKey.d=F(n.privateKey.d,0,l);return{type:"keyPairGeneration",keyPair:{publicKey:{keyData:n.publicKey,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:[],type:"public"}},privateKey:{keyData:n.privateKey,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"private"}}}}};Fe.importKey=function(r){try{if(r.format==="raw"){var t=r.keyData;if(t[0]!==4){throw new Error("DataError")}var n=~~((t.length-1)/2);var l=r.algorithm.namedCurve.toUpperCase();var F=t.slice(1,n+1),v=t.slice(n+1);if(Dr.validatePoint(l,F,v)===false){throw new Error("DataError")}return{type:"keyImport",keyData:{x:F,y:v},keyHandle:{algorithm:r.algorithm,extractable:r.extractable||false,usages:r.usages,type:"public"}}}if(r.format==="jwk"){var x=ne.jwkToKey(r.keyData,r.algorithm,["x","y","d","crv"]);if(x.d&&(!x.x||!x.y)){var E=Dr.createCurve(r.algorithm.namedCurve.toUpperCase());be=Fe(E);var c=be.computePublicKey(x.d);x.x=c.x;x.y=c.y}var d={"P-256":32,"P-384":48,"P-521":66,"NUMSP256D1":32,"NUMSP256T1":32,"NUMSP384D1":48,"NUMSP384T1":48,"NUMSP512D1":64,"NUMSP512T1":64}[r.algorithm.namedCurve];if(x.x){x.x=J.padFront(x.x,0,d)}if(x.y){x.y=J.padFront(x.y,0,d)}if(x.d){x.d=J.padFront(x.d,0,d)}if(Dr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable||x.extractable,usages:r.usages,type:x.d?"private":"public"}}}if(r.format==="spki"){var g={"P-256":32,"P-384":48,"P-521":66};var d=g[r.algorithm.namedCurve];var y=Lr.parse(r.keyData);if(y==null){throw new Error("invalid key data.")}var a=y[1];var e=a.data.slice(a.header+1);if(e==null||e.shift()!==4||e.length!==d*2){throw new Error("invalid key data.")}var F=e.slice(0,d),v=e.slice(d);if(!J.isBytes(F)||!J.isBytes(v)){throw new Error("invalid key data.")}var x={x:F,y:v};if(Dr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"public"}}}if(r.format==="pkcs8"){var g={"P-256":32,"P-384":48,"P-521":66};var d=g[r.algorithm.namedCurve];var y=Lr.parse(r.keyData);if(y==null){throw new Error("invalid key data.")}var h=y[2];var e=Lr.parse(h.data.slice(h.header));if(e==null){throw new Error("invalid key data.")}var w=e[1].data.slice(e[1].header);var a=Lr.parse(e[2][0].data);var e=a.data.slice(a.header+1);if(e==null||e.shift()!==4||e.length!==d*2){throw new Error("invalid key data.")}var F=e.slice(0,d),v=e.slice(d);if(!J.isBytes(F)||!J.isBytes(v)){throw new Error("invalid key data.")}var x={x:F,y:v,d:w};if(Dr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"private"}}}}catch(f){throw J.error("DataError","")}};Fe.exportKey=function(r){var t="1.2.840.10045.2.1";var n={"P-256":"1.2.840.10045.3.1.7 ","P-384":"1.3.132.0.34","P-521":"1.3.132.0.35"};if(r.format==="raw"&&r.keyHandle.type==="public"){var l=[4].concat(r.keyData.x,r.keyData.y);return{type:"keyExport",keyHandle:l}}if(r.format==="jwk"){var F=ne.keyToJwk(r.keyHandle,r.keyData);return{type:"keyExport",keyHandle:F}}if(r.format==="spki"){var v=Lr.encode({SEQUENCE:[{SEQUENCE:[{"OBJECT IDENTIFIER":t},{"OBJECT IDENTIFIER":n[r.algorithm.namedCurve]}]},{"BIT STRING":[4].concat(r.keyData.x,r.keyData.y)}]});return{type:"keyExport",keyHandle:v}}if(r.format==="pkcs8"){var v=Lr.encode({SEQUENCE:[{INTEGER:0},{SEQUENCE:[{"OBJECT IDENTIFIER":t},{"OBJECT IDENTIFIER":n[r.algorithm.namedCurve]}]},{"OCTET STRING":{SEQUENCE:[{INTEGER:1},{"OCTET STRING":r.keyData.d},{APPLICATION:[{"BIT STRING":[4].concat(r.keyData.x,r.keyData.y)}],tag:1}]}}]});return{type:"keyExport",keyHandle:v}}throw new Error("unsupported export format.")};Q.register("importKey","ECDH",Fe.importKey);Q.register("exportKey","ECDH",Fe.exportKey);Q.register("generateKey","ECDH",Fe.generateKey);Q.register("deriveBits","ECDH",Fe.deriveBits);Q.register("deriveKey","ECDH",Fe.deriveKey)}var re=function(r){var t=k.bytesToDigits,n=k.digitsToBytes,l=new Dr.EllipticCurveOperatorFp(r),F=n(r.order).length,v=r.type===1;function x(a){return E(t(a))}function E(a){var e=r.allocatePointStorage();l.scalarMultiply(a,r.generator,e);return{publicKey:e,privateKey:a}}function c(a){var e=[];if(!a){a=jr.getBytes(r.order.length*k.DIGIT_NUM_BYTES)}k.reduce(k.bytesToDigits(a),r.order,e);return E(e)}function d(a){if(a.length>F){a.length=F}var e=t(a);if(v){var h=8-r.rbits%8;k.shiftRight(e,e,h)}k.reduce(e,r.order,e);return e}function g(a,e,h){if(!h){h=c()}var w=h.publicKey.x,f=h.privateKey,m=t(a.d),u=d(e.slice()),p=[],H=[],N=null;k.reduce(w,r.order,w);k.modMul(w,m,r.order,p);k.add(p,u,p);k.reduce(p,r.order,p);k.modInvCT(f,r.order,H);k.modMul(p,H,r.order,p);var K=J.padFront(n(w,true,F),0,F);var D=J.padFront(n(p,true,F),0,F);N=K.concat(D);return N}function y(a,e,h){var w=Math.floor(e.length/2),f=t(e.slice(0,w)),m=t(e.slice(w)),u=d(h.slice()),p=[],H=[];var N=new Dr.EllipticCurvePointFp(r,false,t(a.x),t(a.y),null,false);k.modInv(m,r.order,m);k.modMul(u,m,r.order,p);k.modMul(f,m,r.order,H);var K=r.allocatePointStorage();var D=r.allocatePointStorage();if(v){k.add(p,p,p);k.add(p,p,p);k.reduce(p,r.order,p);l.scalarMultiply(p,r.generator,K,false);l.scalarMultiply(H,N,D,false);l.convertToExtendedProjective(K);l.convertToExtendedProjective(D);l.add(D,K,K);l.normalize(K)}else{l.scalarMultiply(p,r.generator,K);l.scalarMultiply(H,N,D);l.convertToJacobianForm(K);l.convertToMontgomeryForm(K);l.convertToMontgomeryForm(D);l.mixedAdd(K,D,K);l.convertToAffineForm(K);l.convertToStandardForm(K)}if(K.isInfinity){return false}k.reduce(K.x,r.order,K.x);return k.compareDigits(K.x,f)===0}return{createKey:x,generateKey:c,sign:g,verify:y}};if(typeof Q!=="undefined"){re.sign=function(r){J.checkParam(r.algorithm.hash,"Object","algorithm.hash");J.checkParam(r.algorithm.hash.name,"String","algorithm.hash.name");J.checkParam(r.keyHandle.algorithm.namedCurve,"String","p.keyHandle.algorithm.namedCurve");var t=r.algorithm.hash.name,n=Dr.createCurve(r.keyHandle.algorithm.namedCurve.toUpperCase()),l=Pr[t.toUpperCase()](),F=l.computeHash(r.buffer);var v=re(n);return v.sign(r.keyData,F)};re.verify=function(r){var t=r.algorithm.hash.name,n=Dr.createCurve(r.keyHandle.algorithm.namedCurve.toUpperCase()),l=Pr[t.toUpperCase()](),F=l.computeHash(r.buffer);var v=re(n);return v.verify(r.keyData,r.signature,F)};re.generateKey=function(r){var t=Dr.createCurve(r.algorithm.namedCurve.toUpperCase());var n=re(t);var l=n.generateKey();var F=k.digitsToBytes;var v={"P-256":32,"P-384":48,"P-521":66,"NUMSP256D1":32,"NUMSP256T1":32,"NUMSP384D1":48,"NUMSP384T1":48,"NUMSP512D1":64,"NUMSP512T1":64}[r.algorithm.namedCurve];function x(g){return J.padFront(g,0,v)}var E=x(F(l.publicKey.x));var c=x(F(l.publicKey.y));var d=x(F(l.privateKey));return{type:"keyPairGeneration",keyPair:{publicKey:{keyData:{x:E,y:c},keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:["verify"],type:"public"}},privateKey:{keyData:{x:E,y:c,d:d},keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:["sign"],type:"private"}}}}};re.importKey=function(r){if(r.format==="raw"){var t=r.keyData;if(t[0]!==4){throw J.error("DataError","invalid point encoding")}var n=~~((t.length-1)/2);var l=r.algorithm.namedCurve.toUpperCase();var F=t.slice(1,n+1),v=t.slice(n+1);if(Dr.validatePoint(l,F,v)===false){throw J.error("DataError","the imported point is not on the curve")}return{type:"keyImport",keyData:{x:F,y:v},keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"public"}}}if(r.format==="jwk"){var x=ne.jwkToKey(r.keyData,r.algorithm,["x","y","d","crv"]);if(x.d&&(!x.x||!x.y)){var E=re.curves[r.algorithm.namedCurve]();var c=re(E);var d=c.computePublicKey(x.d);x.x=d.x;x.y=d.y}var g={"P-256":32,"P-384":48,"P-521":66,"NUMSP256D1":32,"NUMSP256T1":32,"NUMSP384D1":48,"NUMSP384T1":48,"NUMSP512D1":64,"NUMSP512T1":64}[r.algorithm.namedCurve];if(x.x){x.x=J.padFront(x.x,0,g)}if(x.y){x.y=J.padFront(x.y,0,g)}if(x.d){x.d=J.padFront(x.d,0,g)}if(Dr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw J.error("DataError","the imported point is not on the curve")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable||x.extractable,usages:r.usages,type:x.d?"private":"public"}}}if(r.format==="spki"){var y={"P-256":32,"P-384":48,"P-521":66};var g=y[r.algorithm.namedCurve];var a=Lr.parse(r.keyData);if(a==null){throw new Error("invalid key data.")}var e=a[1];var h=e.data.slice(e.header+1);if(h==null||h.shift()!==4||h.length!==g*2){throw new Error("invalid key data.")}var F=h.slice(0,g),v=h.slice(g);if(!J.isBytes(F)||!J.isBytes(v)){throw new Error("invalid key data.")}var x={x:F,y:v};if(Dr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"public"}}}if(r.format==="pkcs8"){var y={"P-256":32,"P-384":48,"P-521":66};var g=y[r.algorithm.namedCurve];var a=Lr.parse(r.keyData);if(a==null){throw new Error("invalid key data.")}var w=a[2];var h=Lr.parse(w.data.slice(w.header));if(h==null){throw new Error("invalid key data.")}var f=h[1].data.slice(h[1].header);var e=Lr.parse(h[2][0].data);var h=e.data.slice(e.header+1);if(h==null||h.shift()!==4||h.length!==g*2){throw new Error("invalid key data.")}var F=h.slice(0,g),v=h.slice(g);if(!J.isBytes(F)||!J.isBytes(v)){throw new Error("invalid key data.")}var x={x:F,y:v,d:f};if(Dr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"private"}}}};re.exportKey=function(r){var t="1.2.840.10045.2.1";var n={"P-256":"1.2.840.10045.3.1.7 ","P-384":"1.3.132.0.34","P-521":"1.3.132.0.35"};if(r.format==="raw"&&r.keyHandle.type==="public"){var l=[4].concat(r.keyData.x,r.keyData.y);return{type:"keyExport",keyHandle:l}}if(r.format==="jwk"){var F=ne.keyToJwk(r.keyHandle,r.keyData);return{type:"keyExport",keyHandle:F}}if(r.format==="spki"){var v=Lr.encode({SEQUENCE:[{SEQUENCE:[{"OBJECT IDENTIFIER":t},{"OBJECT IDENTIFIER":n[r.algorithm.namedCurve]}]},{"BIT STRING":[4].concat(r.keyData.x,r.keyData.y)}]});return{type:"keyExport",keyHandle:v}}if(r.format==="pkcs8"){var v=Lr.encode({SEQUENCE:[{INTEGER:0},{SEQUENCE:[{"OBJECT IDENTIFIER":t},{"OBJECT IDENTIFIER":n[r.algorithm.namedCurve]}]},{"OCTET STRING":{SEQUENCE:[{INTEGER:1},{"OCTET STRING":r.keyData.d},{APPLICATION:[{"BIT STRING":[4].concat(r.keyData.x,r.keyData.y)}],tag:1}]}}]});return{type:"keyExport",keyHandle:v}}throw new Error("unsupported export format.")};Q.register("sign","ECDSA",re.sign);Q.register("verify","ECDSA",re.verify);Q.register("generateKey","ECDSA",re.generateKey);Q.register("importKey","ECDSA",re.importKey);Q.register("exportKey","ECDSA",re.exportKey)}var Ce;var Er=J;Ce=(function(){function r(){var f;function m(u){try{u.workerid=this.id;f=De.jsCryptoRunner({data:u})}catch(p){this.onerror({data:p,type:"error"});return}this.onmessage({data:f})}return{postMessage:m,onmessage:null,onerror:null,terminate:function(){}}}var t=function(f){return{process:function(m){return f.process(m)},finish:function(){return f.finish()},abort:function(){return f.abort()}}};function n(f){var m=null,u=null,p=null,H,N,K,D;N=new Promise(function(b,_){K=b;D=_});function U(b){if(b.type==="error"){if(D){if(b.data){try{if(!b.data.stack){b.data.stack="Error"}}catch(_){}try{if(b.data.code==null){b.data.code=0}}catch(_){}}D.apply(N,[b.data||b])}return}if(b.data.type==="process"){f(b.data.result,true);return}if(b.data.type==="finish"){f(b.data.result,true);return}this.result=f(b.data);K.apply(N,[this.result]);return}H={dispatchEvent:U,promise:N,result:null};return H}function l(){function f(u){return new ge(te,u)}function m(u){var p,H,N;switch(u.type){case"keyGeneration":case"keyImport":case"keyDerive":if(u.keyPair){p=f(u.keyPair.publicKey.keyHandle);H=f(u.keyPair.privateKey.keyHandle);x.add(p,u.keyPair.publicKey.keyData);x.add(H,u.keyPair.privateKey.keyData);return{publicKey:p,privateKey:H}}else{N=f(u.keyHandle);x.add(N,u.keyData);return N}case"keyExport":return u.keyHandle;case"keyPairGeneration":p=f(u.keyPair.publicKey.keyHandle);H=f(u.keyPair.privateKey.keyHandle);x.add(p,u.keyPair.publicKey.keyData);x.add(H,u.keyPair.privateKey.keyData);return{publicKey:p,privateKey:H};default:throw new Error("Unknown key operation")}}return n(m)}function F(f){if($r&&f.pop){return new Uint8Array(f).buffer}return f}function v(f){function m(H,N){H=H&&F(H);if(N){u.resolve(H);return}return H}var u=[],p=n(m);p.stream=f.algorithm.stream;u.add=function(H){var N,K,D=new Promise(function(U,b){N=U;K=b});D.label=H;u.push({resolve:N,reject:K,promise:D});return D};u.resolve=function(H){var N=u.shift();N.resolve.apply(N.promise,[H])};p.process=function(H){f.operationSubType="process";f.buffer=Er.toArray(H);E.continueJob(this,Er.clone(f));return u.add("process")};p.finish=function(){f.operationSubType="finish";f.buffer=[];E.continueJob(this,Er.clone(f));return u.add("finish")};p.abort=function(){E.abortJob(this)};p.algorithm=f.algorithm||null;p.key=f.keyHandle||null;return p}var x=[];x.add=function(f,m){x.push({cryptoKey:f,keyData:m})};x.remove=function(f){for(var m=0;m=0;V-=1){if(u[V].isWebWorker===nr){u[V].terminate();u.splice(V,1)}}}function s(){var nr=0;for(var V=0;V0){var V=p.shift(),tr;fr(V.operation,V.data);if(V.data.operationSubType==="process"){for(tr=0;tr=0;tr--){if(V.operation===p[tr].operation){p.splice(tr,1)}}}}else if(s()>m){M(nr)}}}function Z(nr){var V;if(_==="pending"){throw new Error("Creating new worker while workerstatus=pending")}if(_==="ready"){try{V=new Worker(Vr);V.postMessage({prngSeed:jr.getBytes(48)});V.isWebWorker=true}catch(tr){Tr=false;_="failed";V.terminate();V=r();V.isWebWorker=false}}else{V=r();V.isWebWorker=false}V.operation=nr;V.id=N++;V.busy=false;V.onmessage=function(tr){if(tr.data==null){return}if(tr.data.initialized===true){return}var wr=V.operation;tr.target||(tr.target={data:V.data});if(tr.data.error){z(V);wr.dispatchEvent({type:"error",data:Er.error(tr.data.error.name,tr.data.error.message)});return}for(var Ur=0;Ur0){var I=p.shift();er(I.operation,I.data)}return}V.addEventListener("message",tr,false);V.addEventListener("error",tr,false);V.postMessage({prngSeed:jr.getBytes(48)});return}function yr(nr){var V=O(nr);if(V){M(V)}}function er(nr,V){var tr=null;if(_==="pending"){Y(nr,V);return}tr=A();if(Tr&&tr===null&&u.length>=f){Y(nr,V);return}if(tr===null){tr=Z(nr)}if(tr===null){Y(nr,V);throw new Error("could not create new worker")}tr.operation=nr;tr.busy=true;V.workerid=tr.id;Wr(tr,V)}function fr(nr,V){var tr=O(nr);if(tr){Wr(tr,V);return}er(nr,V)}function Wr(nr,V){V.workerid=nr.id;if(Tr){nr.postMessage(V)}else{var tr=(function(wr){return function(){return nr.postMessage(wr)}})(V);b(tr)}return}return{runJob:er,continueJob:fr,abortJob:yr,useWebWorkers:ir}})();function c(f,m){if(!Q.exists(f,m)){throw Er.error("NotSupportedError","Unrecognized or unsupported algorithm.")}}var d=[{name:"algorithm",type:"Object",required:true},{name:"keyHandle",type:"Object",required:true},{name:"buffer",type:"Array",required:false},{name:"signature",type:"Array",required:true},{name:"format",type:"String",required:true},{name:"keyData",type:"Object",required:true},{name:"extractable",type:"Boolean",required:false},{name:"usages",type:"Array",required:false},{name:"derivedKeyType",type:"Object",required:true},{name:"length",type:"Number",required:false},{name:"extractable",type:"Boolean",required:true},{name:"usages",type:"Array",required:true},{name:"keyData",type:"Array",required:true}];var g={encrypt:[0,1,2],decrypt:[0,1,2],sign:[0,1,2],verify:[0,1,3,2],digest:[0,2],generateKey:[0,6,7],importKeyRaw:[4,12,0,10,11],importKeyJwk:[4,5,0,10,11],exportKey:[0,4,1,6,7],deriveKey:[0,1,8,6,7],deriveBits:[0,1,9]};function y(f){var m=x.lookup(f);if(!m){throw Er.error("InvalidAccessError","key not found")}return m}function a(f,m){var u={operationType:f},p,H,N,K;if(f==="importKey"&&(m[0]==="raw"||m[0]==="spki"||m[0]==="pkcs8")){f="importKeyRaw"}if(f==="importKey"&&m[0]==="jwk"){f="importKeyJwk"}p=g[f];for(K=0;K65536){throw J.error("QuotaExceededError","The ArrayBufferView's byte length ("+l+") exceeds the number of bytes of entropy available via this API (65536).")}var F=jr.getBytes(r.length);for(t=0;t0?r[0]:null}}}else if(typeof self!=="undefined"&&typeof self.location!=="undefined"){return self.location.href}return null})();var he=false;var xe=typeof Worker!=="undefined";var re=typeof importScripts==="function"&&self instanceof WorkerGlobalScope;var zr=false;var jr=typeof ArrayBuffer!=="undefined";var ye=(function(){try{Object.defineProperty({},"oncomplete",{});return true}catch(r){return false}})();var Tr=false;var Wr=function(r,e,t,l,f){if(!ye){r[e]=t;return}var g={};l&&(g.get=l);f&&(g.set=f);Object.defineProperty(r,e,g)};var Hr={};var ee={};function me(r,e){if(r!==ee){throw new Error("Illegal constructor")}for(var t in e){if(e.hasOwnProperty(t)){this[t]=e[t]}}}var V=(function(){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function e(u){if("console"in self&&"log"in console){console.log(u)}}function t(u,N){var a=f(u);if(a!=="Array"&&a!=="Uint8Array"&&a!=="ArrayBuffer"){throw new Error("invalid input")}var T="";var K=o(u);if(!N){N=false}var U,Y,er,nr,W,tr,kr;var br;for(br=0;br>2;W=(U&3)<<4|Y>>4;tr=(Y&15)<<2|er>>6;kr=er&63;if(isNaN(Y)){tr=kr=64}else if(isNaN(er)){kr=64}T=T+r.charAt(nr)+r.charAt(W)+r.charAt(tr)+r.charAt(kr)}if(N){return T.replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}return T}function l(u){u=u.replace(/-/g,"+").replace(/_/g,"/");while(u.length%4!==0){u+="="}var N=[];var a,T,K;var U,Y,er,nr;var W;u=u.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(W=0;W>4;T=(Y&15)<<4|er>>2;K=(er&3)<<6|nr;N.push(a);if(er!==64){N.push(T)}if(nr!==64){N.push(K)}}return N}function f(u){return Object.prototype.toString.call(u).slice(8,-1)}function g(u,N){var a="";if(typeof N==="undefined"){N=false}for(var T=0;T=2){N.push(parseInt(u.substring(0,2),16));u=u.substring(2,u.length)}return N}function h(u){var N={};for(var a in u){if(u.hasOwnProperty(a)){N[a]=u[a]}}return N}function p(u,N,a){var T=l(u),K=[],U;if(isNaN(N)){return T}else{for(U=0;U>>24&255,u>>>16&255,u>>>8&255,u&255]}function v(u){var N=[];for(var a=0;a1){u=new Uint8Array(u.buffer)}if(u.length===1){return[u[0]]}if(u.length<65536){return Array.apply(null,u)}var N=new Array(u.length);for(var a=0;a>>0;var K=a|0;if(K<0){K=Math.max(T+K,0)}for(;K255){return false}}return true}function b(u,N,a){if(!u){throw new Error(a)}if(N&&f(u)!==N){throw new Error(a)}return true}function H(u){var N=[];for(var a=0,T=0;a>>6|192;N[T++]=K&63|128}else if(K<55296||K>57343){N[T++]=K>>>12|224;N[T++]=K>>>6&63|128;N[T++]=K&63|128}else{K=(K-55296)*1024+(u.charCodeAt(++a)-56320)+65536;N[T++]=K>>>18|240;N[T++]=K>>>12&63|128;N[T++]=K>>>6&63|128;N[T++]=K&63|128}}return N}function Q(u){var N="",a;u=o(u);for(var T=0;T65535){var U=Math.floor((a-65536)/1024)+55296;var Y=(a-65536)%1024+56320;N+=String.fromCharCode(U,Y);continue}N+=String.fromCharCode(a)}return N}var J={IndexSizeError:1,HierarchyRequestError:3,WrongDocumentError:4,InvalidCharacterError:5,NoModificationAllowedError:7,NotFoundError:8,NotSupportedError:9,InUseAttributeError:10,InvalidStateError:11,SyntaxError:12,InvalidModificationError:13,NamespaceError:14,InvalidAccessError:15,TypeMismatchError:17,SecurityError:18,NetworkError:19,AbortError:20,URLMismatchError:21,QuotaExceededError:22,TimeoutError:23,InvalidNodeTypeError:24,DataCloneError:25};function P(u,N){N=N||"";try{return new DOMException(N,u)}catch(T){var a=new Error(N);a.name=u;if(J.hasOwnProperty(u)){a.code=J[u]}return a}}function w(u){if(!(u instanceof Array))return false;for(var N=0;N255||a<0)return false}return true}function L(u){return typeof u==="number"&&isFinite(u)&&Math.floor(u)===u};return{consoleLog:e,toBase64:t,fromBase64:l,checkParam:b,getObjectType:f,bytesToHexString:g,bytesToInt32:x,stringToBytes:H,bytesToString:Q,unpackData:p,hexToBytesArray:C,int32ToBytes:m,int32ArrayToBytes:v,toArray:o,arraysEqual:d,indexOf:y,clone:h,xorVectors:c,padEnd:E,padFront:s,getVector:n,verifyByteArray:D,error:P,isBytes:w,isInteger:L}})();var Lr=(function(){var r={0:"CUSTOM",1:"BOOLEAN",2:"INTEGER",3:"BIT STRING",4:"OCTET STRING",5:"NULL",6:"OBJECT IDENTIFIER",16:"SEQUENCE",17:"SET",19:"PRINTABLE STRING",23:"UTCTime"};var e={0:"UNIVERSAL",1:"APPLICATION",2:"Context-Defined",3:"PRIVATE"};function t(h,p){p=!!p;var m=r[h[0]&31],v=h[1],c=0,n=!!(h[0]&32),o,E,s;if(v&128){for(c=0,v=0;c<(h[1]&127);c++){v=(v<<8)+h[2+c]}}s=2+c;if(m===void 0||v>h.length){return null}var d=n?[]:{};d.type=m;d.header=s;d.data=h.slice(0,v+s);if(n||p){if(d.type==="BIT STRING"&&h[s]===0){c++}o=h.slice(s,d.data.length);while(o.length>0){E=t(o);if(E===null){break}d.push(E);o=o.slice(E.data.length)}}return d}function l(h){var p=2,m=3,v=4,c=5,n=6,o=16,E=160,s=32;if(h.hasOwnProperty("INTEGER")){var d=h.INTEGER;if(V.isInteger(d))d=g(d);if(d[0]&128)d.unshift(0);var y=[p].concat(f(d),d);return y}if(h.hasOwnProperty("OCTET STRING")){var d=h["OCTET STRING"];if(!(d instanceof Array))d=l(d);var y=[v].concat(f(d),d);return y}if(h.hasOwnProperty("BIT STRING")){var d=h["BIT STRING"];if(!(d instanceof Array))d=l(d);d.unshift(0);var y=[m].concat(f(d),d);return y}if(h.hasOwnProperty("NULL")){return[c,0]}if(h.hasOwnProperty("OBJECT IDENTIFIER")){var d=x(h["OBJECT IDENTIFIER"]);var y=[n].concat(f(d),d);return y}if(h.hasOwnProperty("SEQUENCE")){var D=h.SEQUENCE;var d=[];for(var b=0;b0){p.unshift(h&255);h>>>=8}return p}function x(h){var p=h.split(".");var m=[parseInt(p[0]*40+parseInt(p[1]))];for(var v=2;v0){n.push(c&127|128);c=c>>>7}n[0]=n[0]&127;m=m.concat(n.reverse())}return m}function C(h,p){var m=new Array(p+1).join(" ")+h.type+" ("+h.length+") "+bytesToHexString(h.data).substring(0,16)+"\n";if(!h.children){return m}for(var v=0;v=S){$[0]=$[0]*S;Ar=Ar.concat("0")}for(lr=0;lr=0){var O=0;while(O<8){var X=1<>>M&1)&M)}return S}function s(I){var S=0;var M=0;while(S=0&&M===0){var O=1<>>=1){if(j===S){lr[++$]=0;j=0}lr[$]+=(ur&1)<>>X|I[O]<>>B.DIGIT_BITS-M}function b(I,S,M){var R=Math.floor(S/r),O=S%r;return I[R]>>>O|I[R+1]<>>r-M}function H(I,S,M,R,O){while(O-- >0){M[R+O]=I[S+O]}}function Q(I){var S,M=0;for(S=0;S=0;j--){R=R+C[X++]*(I[j]&255);if(C[X]===l){X=0;M[O++]=R;R=0}}if(R!==0){M[O]=R}while(M[--S]==null){M[S]=0}return M}function L(I,S,M){var R,O,X;var j=[0];if(typeof S==="undefined"){S=true}for(R=0;RM&&j[0]===0){j.shift()}}return j}function u(I,S){if(typeof S==="undefined"){if(I<=1){S=1}else{var M=Math.log(I)/Math.LN2;S=Math.ceil(M/r)}}var R=[];while(I>0){R.push(I%l);I=Math.floor(I/l)}while(R.length=0;S--){if(I[S]!==void 0&&I[S]!==0){return S}}return I[0]===0?-1:0}function a(I,S){var M=0,R,O;for(O=0;O=r||M<0){throw new Error("Invalid bit count for shiftRight")}if(R===void 0){R=I.length}var O=R-1;var X=r-M;for(var j=0;j>>M)&t}S[O]=I[O]>>>M}function U(I,S,M,R){if(M===void 0){M=1}else if(M>=r||M<0){throw new Error("bit count must be smaller than DIGIT_BITS and positive in shiftLeft")}if(R===void 0){R=I.length}var O=r-M;S[R]=I[R-1]>>>r-M||S[R];for(var X=R-1;X>0;X--){S[X]=(I[X]<>>O)&t}S[0]=I[0]<>r}for($=X;$>r}M.length=O.length;if(j!==0){M[$]=j&t}return j}function er(I,S,M){var R=S.length;if(I.length>r}while(O>r}return X}function nr(I,S,M){S=typeof S==="number"?[S]:S;var R,O,X,j,$,ur,lr,cr=I.length,Ar=S.length,Er;for(R=0;R=0;sr--){Ar=lr*l+I[sr];M[sr]=Ar/Er&t;lr=Ar-M[sr]*Er&t}M.length=j;T(M);R[0]=lr;R.length=1;return}var $r=r-1-E(S[$-1]);var Vr=O||[];Vr.length=$;U(S,Vr,$r,$);var vr=X||[];vr.length=j;U(I,vr,$r,j);vr[j]=vr[j]||0;M.length=j-$+1;R.length=$;for(sr=j-$;sr>=0;sr--){ur=Math.floor((vr[sr+$]*l+vr[sr+$-1])/Vr[$-1]);lr=vr[sr+$]*l+vr[sr+$-1]-ur*Vr[$-1];while(true){if(ur>=l||ur*Vr[$-2]>lr*l+vr[sr+$-2]){ur=ur-1;lr=lr+Vr[$-1];if(lr>r}vr[sr+$]=vr[sr+$]+cr&t}}for(pr=0;pr<$;pr++){R[pr]=(vr[pr]>>>$r|vr[pr+1]<0){R=S;O=I}br(R,O,void 0,void 0,M);return T(M)}function Z(I,S,M,R){var O=new Array(S.length);var X=new Array(S.length);var j=new Array(S.length);var $=br(I,S,X,O,j);M=M||[];if(a(j,m)!==0){M[0]=NaN;M.length=1}else{if(($&1)===1){er(S,O,M)}else{H(O,0,M,0,O.length);M.length=O.length}if(R){T(M,S.length,true)}else{T(M)}}return M}function _(I,S,M,R){var O=[];M=M||[];er(S,[2],O);ar(I,O,S,M);T(M);return M}function ar(I,S,M,R){R=R||[];if(a(S,p)===0){R[0]=1}else if(a(S,m)===0){H(I,0,R,0,I.length);R.length=I.length}else{var O=new Br(M);T(I,O.s,true);O.modExp(I,S,R);R.length=M.length}return R}function Br(I,S){function M(A){var k=1;var G=2;var z=3;var rr=z&A;for(var or=2;or<=r;or+=1){if(G0);B.subtract(G,rr,z.temp2);Ar(Xe,G,z.temp2);return}function X(A){if(A.length>>31;for(Fr=0;Fr0);B.subtract(k,sr,Cr);Ar(Gr,k,Cr);T(k);return}function pr(A){var k=A.length;var G=A[0];var z={m:A,mPrime:M(G),m0:G,temp1:v(2*k+1),temp2:v(2*k+1)};var rr=v(A.length*2);rr[rr.length]=1;z.mu=[];W(rr,A,z.mu,[]);var or=v(2*k+1);var xr=v(k+1);var dr=v(2*k+1);var Fr=v(2*k+1);var Gr=xr;Gr[k]=1;W(Gr,A,or,xr,dr,Fr);z.rModM=T(xr,k,true);var Cr=v(2*k+1);var fr=Cr;fr[k*2]=1;W(fr,A,or,Cr,dr,Fr);z.rSquaredModm=T(Cr,k,true);z.rCubedModm=v(k);O(Cr,Cr,z.rCubedModm,z);return z}S=S||pr(I);var sr=S.m;var $r=S.mu;var Vr=S.m0;var vr=sr.length;var yr=v(vr+1);var Mr=yr.slice(0,vr);Mr[0]=1;var Or=S.mPrime;var Ir=S.rModM;var ge=S.rSquaredModm;var ue=S.rCubedModm;var ce=v(2*vr+1);var Pr=v(2*vr+1);var F=new Array(4);F[0]=Ir;F[1]=new Array(vr);F[2]=new Array(vr);F[3]=new Array(vr);return{m:sr,m0:Vr,mPrime:Or,mu:$r,rSquaredModm:ge,s:vr,rModM:Ir,rCubedModm:ue,one:Mr,temp1:ce,temp2:Pr,convertToMontgomeryForm:X,convertToStandardForm:j,montgomeryMultiply:O,modExp:lr,reduce:Er,ctx:S}}function Rr(I){var S=w(I);var M=S.length;var R=u(0,M);var O=u(1,M);var X=v(M);var j=v(M);var $=new Br(S);function ur(yr){var Mr=w(yr);if(B.compareDigits(Mr,this.m_modulus)>=0){throw new Error("The number provided is not an element of this group")}T(Mr,this.m_digitWidth,true);return vr(Mr,this)}function lr(yr){var Mr=u(yr,this.m_digitWidth);return vr(Mr,this)}function cr(yr){B.normalizeDigitArray(yr,this.m_digitWidth,true);return vr(yr,this)}function Ar(yr){return a(this.m_modulus,yr.m_modulus)===0}function Er(yr,Mr,Or){var Ir;var ge=this.m_digitWidth;var ue=Or.m_digits;B.add(yr.m_digits,Mr.m_digits,ue);var ce=(a(ue,this.m_modulus)>>>31)-1&t;var Pr=0;for(Ir=0;Ir>r}ue.length=ge}function pr(yr,Mr,Or){var Ir,ge=this.m_digitWidth;var ue=Or.m_digits;var ce=B.subtract(yr.m_digits,Mr.m_digits,Or.m_digits);if(ce===-1){ce=0;for(Ir=0;Ir>r}}}function sr(yr,Mr){B.modInv(yr.m_digits,this.m_modulus,Mr.m_digits)}function $r(yr,Mr,Or){return B.modMul(yr.m_digits,Mr.m_digits,this.m_modulus,Or.m_digits,X,j)}function Vr(yr,Mr,Or){Or=Or||vr([],this);if(a(Mr,R)===0){Or.m_digits=u(1,this.m_digitWidth)}else if(a(Mr,O)===0){for(var Ir=0;Ir>>B.DIGIT_BITS}z=z<=0){throw new Error("The scalar k must be in the range 1 <= k < order.")}F=F.slice();if(A.curve.type===1){var z=typeof A.ta!=="undefined";if(!z){$r(A)}Vr(F,A,k,G);if(!z){yr(A)}}else{var rr=A.isInMontgomeryForm,or=k.isInMontgomeryForm,xr=k.isAffine;if(!rr){ur(A)}if(!or){ur(k)}O(F,A,k);if(xr){cr(k)}if(!rr){lr(A)}if(!or){lr(k)}}return}function O(F,A,k){var G=A.clone();lr(G);if(!Er(G)){throw new Error("Invalid Parameters.")}var z=F[0]&1,rr=[];W(A.curve.order,F,rr);for(hr=0;hr=0;hr--){for(var ve=0;ve>>31);for(var qr=0;qr=0;xr--){for(dr=0;dr>>31);W(A.curve.p,qr.x,fr);for(var Ur=0;Ur=f){m=c(m)}return}function d(){if(c(o(m)).length!==0){throw new Error("buffer.length !== 0")}var y=n();m=[];h=t.slice();v=0;return y}return{name:r,computeHash:E,process:s,finish:d,der:e,hashLen:x,maxMessageSize:4294967295}};var ne=(function(){function r(x,C,h,p,m){var v,c,n,o,E=64,s=4294967295;var d=h[0],y=h[1],D=h[2],b=h[3],H=h[4];for(c=0;c<16;c++){m[c]=e.bytesToInt32(x,C*E+c*4)}for(v=16;v<80;v++){o=m[v-3]^m[v-8]^m[v-14]^m[v-16];m[v]=o<<1|o>>>31}for(c=0;c<80;c++){n=d<<5|d>>>27;n+=c>=60?y^D^b:c>=40?y&D^y&b^D&b:c>=20?y^D^b:y&D^~y&b;n+=H+p[c]+m[c];H=b;b=D;D=y<<30|y>>>2;y=d;d=n}h[0]+=d&s;h[1]+=y&s;h[2]+=D&s;h[3]+=b&s;h[4]+=H&s;return h}var e=V,t=e.unpackData,l=t("Z0UjAe/Nq4mYutz+EDJUdsPS4fA=",4,1),f=t("WoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlagnmZWoJ5mVqCeZlu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroW7Z66Fu2euhbtnroY8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcjxu83I8bvNyPG7zcymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdbKYsHWymLB1spiwdY",4,1),g=t("MCEwCQYFKw4DAhoFAAQU");return{sha1:function(){return ke("SHA-1",g,l,f,64,r,160)}}})();if(typeof q!=="undefined"){ne.instances={};ne.getInstance=function(r){return ne.instances[r]||(ne.instances[r]=ne.sha1())};ne.deleteInstance=function(r){ne.instances[r]=null;delete ne.instances[r]};ne.hash=function(r){if(r.operationSubType==="process"){ne.sha1.process(r.buffer);return}if(r.operationSubType==="finish"){return ne.sha1.finish()}return ne.sha1().computeHash(r.buffer)};q.register("digest","SHA-1",ne.hash)}Hr["SHA-1"]=ne.sha1;var Dr=(function(){var r=V;function e(h,p,m,v,c){var n,o,E,s,d,y=64,D=4294967295;var b=m[0],H=m[1],Q=m[2],J=m[3],P=m[4],w=m[5],L=m[6],u=m[7];for(o=0;o<16;o++){c[o]=r.bytesToInt32(h,p*y+o*4)}for(n=16;n<64;n++){s=c[n-15];d=c[n-2];c[n]=((d>>>17|d<<15)^(d>>>19|d<<13)^d>>>10)+c[n-7]+((s>>>7|s<<25)^(s>>>18|s<<14)^s>>>3)+c[n-16];c[n]=c[n]&D}for(o=0;o<64;o++){E=u+((P>>>6|P<<26)^(P>>>11|P<<21)^(P>>>25|P<<7))+(P&w^~P&L)+v[o]+c[o];J+=E;E+=((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+(b&(H^Q)^H&Q);u=L;L=w;w=P;P=J;J=Q;Q=H;H=b;b=E}m[0]=m[0]+b>>>0;m[1]=m[1]+H>>>0;m[2]=m[2]+Q>>>0;m[3]=m[3]+J>>>0;m[4]=m[4]+P>>>0;m[5]=m[5]+w>>>0;m[6]=m[6]+L>>>0;m[7]=m[7]+u>>>0;return m}var t,l,f,g,x,C=r.unpackData;l=C("wQWe2DZ81QcwcN0X9w5ZOf/ACzFoWBURZPmPp776T6Q",4,1);f=C("agnmZ7tnroU8bvNypU/1OlEOUn+bBWiMH4PZq1vgzRk",4,1);t=C("QoovmHE3RJG1wPvP6bXbpTlWwltZ8RHxkj+CpKscXtXYB6qYEoNbASQxhb5VDH3Dcr5ddIDesf6b3AanwZvxdOSbacHvvkeGD8GdxiQMocwt6SxvSnSEqlywqdx2+YjamD5RUqgxxm2wAyfIv1l/x8bgC/PVp5FHBspjURQpKWcntwqFLhshOE0sbfxTOA0TZQpzVHZqCruBwskuknIshaK/6KGoGmZLwkuLcMdsUaPRkugZ1pkGJPQONYUQaqBwGaTBFh43bAgnSHdMNLC8tTkcDLNO2KpKW5zKT2gub/N0j4LueKVjb4TIeBSMxwIIkL7/+qRQbOu++aP3xnF48g",4,1);g=C("MC0wDQYJYIZIAWUDBAIEBQAEHA");x=C("MDEwDQYJYIZIAWUDBAIBBQAEIA");return{sha224:function(){return ke("SHA-224",g,l,t,64,e,224)},sha256:function(){return ke("SHA-256",x,f,t,64,e,256)}}})();if(typeof q!=="undefined"){Dr.instance224=Dr.instance224||Dr.sha224();Dr.instance256=Dr.instance256||Dr.sha256();Dr.instances={};Dr.getInstance224=function(r){return Dr.instances[r]||(Dr.instances[r]=Dr.sha224())};Dr.getInstance256=function(r){return Dr.instances[r]||(Dr.instances[r]=Dr.sha256())};Dr.deleteInstance=function(r){Dr.instances[r]=null;delete Dr.instances[r]};Dr.hash256=function(r){if(r.operationSubType==="process"){Dr.getInstance256(r.workerid).process(r.buffer);return null}if(r.operationSubType==="finish"){var e=Dr.getInstance256(r.workerid).finish();Dr.deleteInstance(r.workerid);return e}if(r.operationSubType==="abort"){Dr.deleteInstance(r.workerid);return}return Dr.instance256.computeHash(r.buffer)};Dr.hash224=function(r){if(r.operationSubType==="process"){Dr.getInstance224(r.workerid).process(r.buffer);return}if(r.operationSubType==="finish"){var e=Dr.getInstance224(r.workerid).finish()}if(r.operationSubType==="abort"){msrcryptoSha224.deleteInstance(r.workerid);return}return Dr.instance224.computeHash(r.buffer)};q.register("digest","SHA-224",Dr.hash224);q.register("digest","SHA-256",Dr.hash256)}Hr["SHA-224"]=Dr.sha224;Hr["SHA-256"]=Dr.sha256;var Nr=(function(){var r=V;function e(v,c,n,o,E){var s=c+o|0;var d=s>>>0>>0;E[0]=v+n+d|0;E[1]=s;return}function t(v,c,n,o,E){var s,d,y=128,D,b,H,Q,J,P,w=[],L=[],u=[],N;var a=n[0],T=n[1],K=n[2],U=n[3],Y=n[4],er=n[5],nr=n[6],W=n[7],tr=n[8],kr=n[9],br=n[10],ir=n[11],Z=n[12],_=n[13],ar=n[14],Br=n[15];for(s=0;s<32;s++){N=c*y+s*4;E[s]=v.slice(N,N+4);E[s]=E[s][0]<<24|E[s][1]<<16|E[s][2]<<8|E[s][3]}for(s=32;s<160;s+=2){J=E[s-30];P=E[s-29];D=(J>>>1|P<<31)^(J>>>8|P<<24)^J>>>7;b=(P>>>1|J<<31)^(P>>>8|J<<24)^(P>>>7|J<<25);J=E[s-4];P=E[s-3];H=(J>>>19|P<<13)^(P>>>29|J<<3)^J>>>6;Q=(P>>>19|J<<13)^(J>>>29|P<<3)^(P>>>6|J<<26);e(H,Q,E[s-14],E[s-13],w);e(D,b,w[0],w[1],w);e(E[s-32],E[s-31],w[0],w[1],w);E[s]=w[0];E[s+1]=w[1]}for(d=0;d<160;d+=2){D=(tr>>>14|kr<<18)^(tr>>>18|kr<<14)^(kr>>>9|tr<<23);b=(kr>>>14|tr<<18)^(kr>>>18|tr<<14)^(tr>>>9|kr<<23);H=tr&br^Z&~tr;Q=kr&ir^_&~kr;e(ar,Br,D,b,w);e(H,Q,o[d],o[d+1],L);e(w[0],w[1],E[d],E[d+1],u);e(L[0],L[1],u[0],u[1],u);e(u[0],u[1],nr,W,w);nr=w[0];W=w[1];b=(T>>>28|a<<4)^(a>>>2|T<<30)^(a>>>7|T<<25);D=(a>>>28|T<<4)^(T>>>2|a<<30)^(T>>>7|a<<25);Q=T&(U^er)^U&er;H=a&(K^Y)^K&Y;e(u[0],u[1],D,b,w);D=w[0];b=w[1];e(H,Q,D,b,w);D=w[0];b=w[1];ar=Z;Br=_;Z=br;_=ir;br=tr;ir=kr;tr=nr;kr=W;nr=Y;W=er;Y=K;er=U;K=a;U=T;a=D;T=b}e(n[0],n[1],a,T,w);n[0]=w[0];n[1]=w[1];e(n[2],n[3],K,U,w);n[2]=w[0];n[3]=w[1];e(n[4],n[5],Y,er,w);n[4]=w[0];n[5]=w[1];e(n[6],n[7],nr,W,w);n[6]=w[0];n[7]=w[1];e(n[8],n[9],tr,kr,w);n[8]=w[0];n[9]=w[1];e(n[10],n[11],br,ir,w);n[10]=w[0];n[11]=w[1];e(n[12],n[13],Z,_,w);n[12]=w[0];n[13]=w[1];e(n[14],n[15],ar,Br,w);n[14]=w[0];n[15]=w[1];return n}var l,f,g,x,C,h,p,m=r.unpackData;l=m("y7udXcEFnthimikqNnzVB5FZAVowcN0XFS/s2PcOWTlnMyZn/8ALMY60SodoWBUR2wwuDWT5j6dHtUgdvvpPpA==",4,1);f=m("agnmZ/O8yQi7Z66FhMqnOzxu83L+lPgrpU/1Ol8dNvFRDlJ/reaC0ZsFaIwrPmwfH4PZq/tBvWtb4M0ZE34heQ",4,1);g=m("QoovmNcoriJxN0SRI+9lzbXA+8/sTTsv6bXbpYGJ27w5VsJb80i1OFnxEfG2BdAZkj+CpK8ZT5urHF7V2m2BGNgHqpijAwJCEoNbAUVwb74kMYW+TuSyjFUMfcPV/7Ticr5ddPJ7iW+A3rH+OxaWsZvcBqclxxI1wZvxdM9pJpTkm2nBnvFK0u++R4Y4TyXjD8GdxouM1bUkDKHMd6ycZS3pLG9ZKwJ1SnSEqm6m5INcsKncvUH71Hb5iNqDEVO1mD5RUu5m36uoMcZtLbQyELADJ8iY+yE/v1l/x77vDuTG4AvzPaiPwtWnkUeTCqclBspjUeADgm8UKSlnCg5ucCe3CoVG0i/8LhshOFwmySZNLG38WsQq7VM4DROdlbPfZQpzVIuvY952agq7PHeyqIHCyS5H7a7mknIshRSCNTuiv+ihTPEDZKgaZku8QjABwkuLcND4l5HHbFGjBlS+MNGS6BnW71IY1pkGJFVlqRD0DjWFV3EgKhBqoHAyu9G4GaTBFrjS0MgeN2wIUUGrUydId0zfjuuZNLC8teGbSKg5HAyzxclaY07YqkrjQYrLW5zKT3dj43NoLm/z1rK4o3SPgu5d77L8eKVjb0MXL2CEyHgUofCrcozHAggaZDnskL7/+iNjHiikUGzr3oK96b75o/eyxnkVxnF48uNyUyvKJz7O6iZhnNGGuMchwMIH6tp91s3g6x71fU9/7m7ReAbwZ6pyF2+6CmN9xaLImKYRP5gEvvkNrhtxCzUTHEcbKNt39SMEfYQyyqt7QMckkzyevgoVyb68Qx1nxJwQDUxMxdS+yz5Ctll/KZz8ZX4qX8tvqzrW+uxsRBmMSkdYFw==",4,1);x=m("MEEwDQYJYIZIAWUDBAICBQAEMA");C=m("MFEwDQYJYIZIAWUDBAIDBQAEQA");h=m("MC0wDQYJYIZIAWUDBAIFBQAEHA");p=m("MDEwDQYJYIZIAWUDBAIGBQAEIA");return{sha384:function(){return ke("SHA-384",x,l,g,128,t,384)},sha512:function(){return ke("SHA-512",C,f,g,128,t,512)},sha512_224:function(){return ke("SHA-512.224",h,f,g,128,t,224)},sha512_256:function(){return ke("SHA-512.256",p,f,g,128,t,256)}}})();if(typeof q!=="undefined"){Nr.instances={};Nr.getInstance384=function(r){return Nr.instances[r]||(Nr.instances[r]=Nr.sha384())};Nr.getInstance512=function(r){return Nr.instances[r]||(Nr.instances[r]=Nr.sha512())};Nr.deleteInstance=function(r){Nr.instances[r]=null;delete Nr.instances[r]};Nr.hash384=function(r){if(r.operationSubType==="process"){Nr.sha384.process(r.buffer);return}if(r.operationSubType==="finish"){return Nr.sha384.finish()}return Nr.sha384().computeHash(r.buffer)};Nr.hash512=function(r){if(r.operationSubType==="process"){Nr.sha512.process(r.buffer);return}if(r.operationSubType==="finish"){return Nr.sha512.finish()}return Nr.sha512().computeHash(r.buffer)};q.register("digest","SHA-384",Nr.hash384);q.register("digest","SHA-512",Nr.hash512)}Hr["SHA-384"]=Nr.sha384;Hr["SHA-512"]=Nr.sha512;var _r=function(r,e){var t={"384":128,"512":128}[e.name.replace(/SHA-/,"")]||64;var l;var f;var g=v();var x;var C;var h;function p(s,d){var y=new Array(s);for(var D=0;Dt){return m(e.computeHash(r),t)}return m(r,t)}function c(s){if(!h){h=C.concat(s);e.process(h)}else{e.process(s)}return}function n(){var s=e.finish();var d=x.concat(s);return e.computeHash(d)}function o(){r=null;e=null;g=null}l=new Array(t);f=new Array(t);for(var E=0;E0){l[l.length-1]&=255<6&&U%n===4){P(T)}var nr=H(L(K,U-n),T);u(K,nr,U,0);U+=1}return K};s=N(m);return{encrypt:function(a){var T=a,K;Q(T,s,0);for(K=1;K<=E-1;K+=1){P(T);d(T);D(T);Q(T,s,4*K*o)}P(T);d(T);Q(T,s,4*E*o);return T},decrypt:function(a){var T=a,K;Q(T,s,4*E*o);for(K=E-1;K>=1;K-=1){y(T);w(T);Q(T,s,4*K*o);b(T)}y(T);w(T);Q(T,s,0);return T},clear:function(){},keyLength:c,blockSize:v}}}})();var Be=Be||{};Be.pkcsv7=function(r){function e(l){var f=l.length-1>=0?l.length-1:0;var g=l[f];var x=g.length;var C=x===r;if(C){var h=[];var p;for(p=0;p0;U--){K[U]=(K[U-1]&1)<<7|K[U]>>>1}K[0]=K[0]>>>1;return K}function y(K,U){var Y=Math.floor(U/8);return K[Y]>>7-U%8&1}function D(K){var U=256;for(var Y=1;Y<=4;Y++){U=(U>>>8)+K[K.length-Y];K[K.length-Y]=U&255}return K}function b(K,U){var Y=Math.ceil(U.length/16),er,nr=[];if(c!==K){c=K.slice()}for(var W=0;W>>24&255,K>>>16&255,K>>>8&255,K&255]}function Q(K){var U=16*Math.ceil(f.length/16)-f.length;return K.concat(e.getVector(U))}function J(){n=0;t=[];v=[];p=e.getVector(16);m=[];c=l=f=null}function P(K,U,Y){f=U||[];g=isNaN(Y)?128:Y;if(g%8!==0){throw V.error("DataError","tagLength must be a multiple of 8")}l=K;if(l.length===12){x=l.concat([0,0,0,1])}else{var er=16*Math.ceil(l.length/16)-l.length;x=o(h,l.concat(e.getVector(er+8)).concat(H(l.length*8)));p=e.getVector(16)}C=D(x.slice());o(h,Q(f))}function w(K){n=K.length;var U=b(C,K);o(h,U);var Y=E();var er=b(x,Y).slice(0,g/8);J();return U.slice().concat(er)}function L(K,U){n=K.length;var Y=b(C,K);o(h,K);var er=E();var nr=b(x,er).slice(0,g/8);J();if(e.arraysEqual(nr,U)){return Y}else{return null}}function u(K){t=t.concat(K);var U=t.slice(0,Math.floor(t.length/16)*16);n+=U.length;t=t.slice(U.length);var Y=b(c||C,U);v=v.concat(Y);o(h,Y)}function N(K){t=t.concat(K);var U=t.slice(0,Math.floor((t.length-g/8)/16)*16);n+=U.length;t=t.slice(U.length);var Y=b(c||C,U);v=v.concat(Y);o(h,U)}function a(){var K=b(c,t);v=v.concat(K);n+=t.length;var U=E();var Y=b(x,U).slice(0,g/8);var er=v.slice().concat(Y);J();return er}function T(){var K=Math.floor(g/8);var U=t.slice(-K);t=t.slice(0,t.length-K);var Y=b(c,t);v=v.concat(Y);n+=t.length;var er=E();var nr=b(x,er).slice(0,g/8);var W=v.slice();J();if(e.arraysEqual(nr,U)){return W}else{return null}}return{init:P,encrypt:w,decrypt:L,processEncrypt:u,processDecrypt:N,finishEncrypt:a,finishDecrypt:T}};if(typeof q!=="undefined"){var Zr={};se.encrypt=function(r){var e,t=r.workerid;if(!Zr[t]){Zr[t]=se(pe.aes(r.keyData));Zr[t].init(r.algorithm.iv,r.algorithm.additionalData,r.algorithm.tagLength)}if(r.operationSubType==="process"){Zr[t].processEncrypt(r.buffer);return}if(r.operationSubType==="finish"){e=Zr[t].finishEncrypt();Zr[t]=null;return e}e=Zr[t].encrypt(r.buffer);Zr[t]=null;return e};se.decrypt=function(r){var e,t=r.workerid;if(!Zr[t]){Zr[t]=se(pe.aes(r.keyData));Zr[t].init(r.algorithm.iv,r.algorithm.additionalData,r.algorithm.tagLength)}if(r.operationSubType==="process"){Zr[t].processDecrypt(r.buffer);return}if(r.operationSubType==="finish"){e=Zr[t].finishDecrypt();Zr[t]=null;if(e===null){throw V.error("OperationError","")}return e}var l=r.algorithm.tagLength?Math.floor(r.algorithm.tagLength/8):16;var f=r.buffer.slice(0,r.buffer.length-l);var g=r.buffer.slice(-l);e=Zr[t].decrypt(f,g);Zr[t]=null;if(e===null){throw V.error("OperationError","")}return e};se.generateKey=function(r){if(r.algorithm.length!==128&&r.algorithm.length!==192&&r.algorithm.length!==256){throw new Error("invalid key length (should be 128, 192, or 256 bits)")}return{type:"keyGeneration",keyData:Yr.getBytes(Math.floor(r.algorithm.length/8)),keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"secret"}}};se.importKey=function(r){var e,t=r.keyData.length*8;if(r.format==="jwk"){e=te.jwkToKey(r.keyData,r.algorithm,["k"])}else if(r.format==="raw"){if(t!==128&&t!==192&&t!==256){throw new Error("invalid key length (should be 128, 192, or 256 bits)")}e={k:V.toArray(r.keyData)}}else{throw new Error("unsupported import format")}return{type:"keyImport",keyData:e.k,keyHandle:{algorithm:r.algorithm,extractable:r.extractable||e.extractable,usages:r.usages,type:"secret"}}};se.exportKey=function(r){if(r.format==="jwk"){return{type:"keyExport",keyHandle:te.keyToJwk(r.keyHandle,r.keyData)}}if(r.format==="raw"){return{type:"keyExport",keyHandle:r.keyData}}throw new Error("unsupported export format")};q.register("importKey","AES-GCM",se.importKey);q.register("exportKey","AES-GCM",se.exportKey);q.register("generateKey","AES-GCM",se.generateKey);q.register("encrypt","AES-GCM",se.encrypt);q.register("decrypt","AES-GCM",se.decrypt)}var le=function(r){function e(l){var f=[[0]];for(var g=0;g0;c--,m>>>=8){x[c]^=m&255}}}var n=x;for(var g=1;g<=C;g++){n=n.concat(h[g])}return n}function t(l){var f=[];for(var g=0;g=0;m--){for(var g=x;g>=1;g--){var v=x*m+g;for(var c=7;v>0;c--,v>>>=8){p[c]^=v&255}var n=r.decrypt(p.concat(C[g]));p=n.slice(0,8);C[g]=n.slice(8)}}if(p.join(",")!=="166,166,166,166,166,166,166,166"){throw V.error("OperationError","")}for(var g=1;g<=x;g++){h=h.concat(C[g])}return h}return{encrypt:e,decrypt:t}};if(typeof q!=="undefined"){var Ee={};le.workerEncrypt=function(r){var e,t=r.workerid;if(r.buffer.length%8!==0){throw V.error("DataError","The AES-KW input data length is invalid: not a multiple of 8 bytes")}if(!Ee[t]){Ee[t]=le(pe.aes(r.keyData))}e=Ee[t].encrypt(r.buffer);Ee[t]=null;return e};le.workerDecrypt=function(r){var e,t=r.workerid;if(r.buffer.length%8!==0){throw V.error("DataError","The AES-KW input data length is invalid: not a multiple of 8 bytes")}if(!Ee[t]){Ee[t]=le(pe.aes(r.keyData))}e=Ee[t].decrypt(r.buffer);Ee[t]=null;return e};le.generateKey=function(r){if(r.algorithm.length!==128&&r.algorithm.length!==192&&r.algorithm.length!==256){throw V.error("OperationError","AES key length must be 128, 192, or 256 bits")}return{type:"keyGeneration",keyData:Yr.getBytes(Math.floor(r.algorithm.length/8)),keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"secret"}}};le.importKey=function(r){var e;var t=r.keyData.length*8;if(r.format==="jwk"){e=te.jwkToKey(r.keyData,r.algorithm,["k"])}else if(r.format==="raw"){if(t!==128&&t!==192&&t!==256){throw V.error("OperationError","AES key length must be 128, 192, or 256 bits")}e={k:V.toArray(r.keyData)}}else{throw new TypeError("Invalid keyFormat argument")}r.algorithm.length=e.k.length*8;return{keyData:e.k,keyHandle:{algorithm:r.algorithm,extractable:r.extractable||e.extractable,usages:r.usages,type:"secret"},type:"keyImport"}};le.exportKey=function(r){if(r.format==="jwk"){return{type:"keyExport",keyHandle:te.keyToJwk(r.keyHandle,r.keyData)}}if(r.format==="raw"){return{type:"keyExport",keyHandle:r.keyData}}throw new TypeError("Invalid keyFormat argument")};q.register("importKey","AES-KW",le.importKey);q.register("exportKey","AES-KW",le.exportKey);q.register("generateKey","AES-KW",le.generateKey);q.register("encrypt","AES-KW",le.workerEncrypt);q.register("decrypt","AES-KW",le.workerDecrypt)}function Se(){if(!(this instanceof Se)){throw new Error("create MsrcryptoPrng object with new keyword")}var r=false;var e;var t;var l;var f;var g=1;var x=Math.pow(2,48);h();function C(c){var n;for(n=c.length-1;n>=0;n-=1){c[n]+=1;if(c[n]>=256){c[n]=0}if(c[n]){break}}}function h(){e=V.getVector(32);t=V.getVector(16);l=32;f=48;g=1}function p(c,n){n=n||[0];if(n.length>f){throw new Error("Incorrect entropy or additionalEntropy length")}n=n.concat(V.getVector(f-n.length));c=c.concat(V.getVector((f-c.length%f)%f));for(var o=0;o=65536){throw new Error("too much random requested")}if(g>x){throw new Error("Reseeding is required")}if(n&&n.length>0){while(n.length=l){c.stopCollectors()}}var v=r&&r.addEventListener||typeof document!=="undefined"&&document.attachEvent;var c=(function(){return{startCollectors:function(){if(!this.collectorsRegistered){if(r.addEventListener){r.addEventListener("mousemove",this.MouseEventCallBack,true);r.addEventListener("load",this.LoadTimeCallBack,true)}else if(document.attachEvent){document.attachEvent("onmousemove",this.MouseEventCallBack);document.attachEvent("onload",this.LoadTimeCallBack)}else{throw new Error("Can't attach events for entropy collection")}this.collectorsRegistered=1}},stopCollectors:function(){if(this.collectorsRegistered){if(r.removeEventListener){r.removeEventListener("mousemove",this.MouseEventCallBack,1);r.removeEventListener("load",this.LoadTimeCallBack,1)}else if(r.detachEvent){r.detachEvent("onmousemove",this.MouseEventCallBack);r.detachEvent("onload",this.LoadTimeCallBack)}this.collectorsRegistered=0}},MouseEventCallBack:function(n){var o=new Date().valueOf();var E=n.x||n.clientX||n.offsetX||0;var s=n.y||n.clientY||n.offsetY||0;var d=[o&255,o>>8&255,o>>16&255,o>>24&255,E&255,E>>8&255,s&255,s>>8&255];m(d)},LoadTimeCallBack:function(){var n=new Date().valueOf();var o=[n&255,n>>8&255,n>>16&255,n>>24&255];m(o)}}})();return{init:function(){p();if(!C&&!f&&v){try{c.startCollectors()}catch(n){}}},reseed:function(n){g.reseed(n)},read:function(n){if(!x){throw new Error("Entropy pool is not initialized.")}var o=g.getBytes(n);p();return o}}}var Ne=(function(){var r=[];var e=[];var t=4096*4;function l(v){var c=new Array(v+1),n=[],o,E,s=Math.sqrt(v)|0;for(o=3;o<=s;o+=2){for(E=o*o;E<=v;E+=o*2){c[E]=0}}for(o=3;o<=v;o+=2){if(c[o]!==0){n.push(o)}}return n}function f(v){var c,n=e.length;for(c=0;c=0){E=o*D+v[n--];o=E-(E/s|0)*s}e[c]=o}return}function x(v){var c=0,n=0,o=0,E;if(B.isZero(v)){return 0}for(c=0;v[c]===0;c++){}for(n=0,E=2;v[c]%E===0;E*=2,n++){}return c*B.DIGIT_BITS+n}function C(v){var c=0,n=0,o=0;if(B.isZero(v)){return 0}for(c=v.length-1;v[c]===0;c--){}for(n=B.DIGIT_BITS-1,o=1<0;o=o>>>1,n--){if((v[c]&o)!==0){break}}return c*B.DIGIT_BITS+n}function h(v,c){var n=v;var o=[];B.subtract(n,[1],o);var E=x(o);var s=[];B.shiftRight(o,s,E);var d=C(n);var y;var D=B.MontgomeryMultiplier(n);for(var b=1;b<=c;b++){var H=false;do{y=m(d)}while(B.compareDigits(y,o)>=0);var Q=[];D.modExp(y,s,Q,true);if(B.compareDigits(Q,[1])===0||B.compareDigits(Q,o)===0){continue}for(var J=1;J>>24&255,x>>>16&255,x>>>8&255,x&255];g=t.computeHash(r.concat(f));l=l.concat(g)}return l.slice(0,e)},checkMessageVsMaxHash:function(r,e){if(r.length>(e.maxMessageSize||4294967295)){throw new Error("message too long")}return}};var ie=ie||{};ie.oaep=function(r,e){var t=V,l=Yr,f=r.n.length;if(e===null){throw new Error("must supply hashFunction")}function g(C,h){var p,m,v,c,n,o;var E,s,d,y;var D;if(C.length>f-2*(e.hashLen/8)-2){throw new Error("Message too long.")}if(h==null){h=[]}p=e.computeHash(h);m=f-C.length-2*p.length-2;v=t.getVector(m);n=p.concat(v,[1],C);o=l.getBytes(p.length);E=be.mgf1(o,f-p.length-1,e);s=t.xorVectors(n,E);d=be.mgf1(s,p.length,e);y=t.xorVectors(o,d);D=[0].concat(y).concat(s);C=D.slice();return C}function x(C,h){var p,m,v,c;var n,o,E;var s,d=0;var y=C[0]===0;if(!h){h=[]}p=e.computeHash(h);m=C.slice(1,p.length+1);v=C.slice(p.length+1);c=be.mgf1(v,p.length,e);n=t.xorVectors(m,c);o=be.mgf1(n,f-p.length-1,e);E=t.xorVectors(v,o);s=E.slice(0,p.length);y=y&&t.arraysEqual(p,s);E=E.slice(p.length);while(!E[d++]){}return{valid:y,data:E.slice(d)}}return{pad:function(C,h){return g(C,h)},unpad:function(C,h){return x(C,h)}}};var ie=ie||{};ie.pkcs1Encrypt=function(r){var e=Yr,t=r.n.length;function l(x){var C;if(x.length>t-11){throw new Error("message too long")}C=e.getNonZeroBytes(t-x.length-3);return[0,2].concat(C,[0],x)}function f(x){var C=x[0]===0&&x[1]===2;for(var h=2;h<10;h++){C=C&&!!x[h]}return C}function g(x){var C,h=f(x),p=0;for(C=1;C>>8-(8*v-m);for(var y=0;y0){var g=l;l=f;f=g}var x=[];B.multiply(l,f,x);var C=[];B.subtract(l,[1],C);var h=[];B.subtract(f,[1],h);var p=[];B.multiply(C,h,p);var m=[];B.gcd(t,p,m);var v=B.compareDigits(m,B.One)===0}while(!v);var c=[];B.modInv(t,p,c);var n=[];B.reduce(c,C,n);var o=[];B.reduce(c,h,o);var E=[];B.modInv(f,l,E);var s=B.digitsToBytes;return{privateKey:{n:s(x),e:s(t),d:s(c),p:s(l),q:s(f),dp:s(n),dq:s(o),qi:s(E)},publicKey:{n:s(x),e:s(t)}}};mr.generateKeyPair=function(r){if(typeof r.algorithm.modulusLength==="undefined"){throw new Error("missing modulusLength")}var e;var t=B.bytesToDigits;switch(r.algorithm.modulusLength){case 1024:case 2048:case 4096:e=mr.genRsaKeyFromRandom(r.algorithm.modulusLength,r.algorithm.publicExponent);break;default:throw new Error("invalid modulusLength")}var l=e.privateKey;l.ctxp=new B.MontgomeryMultiplier(t(l.p)).ctx;l.ctxq=new B.MontgomeryMultiplier(t(l.q)).ctx;var f=r.algorithm.name;var g=f.slice(f.indexOf("-")+1).toUpperCase();var x,C;if(f==="RSASSA-PKCS1-V1_5"||f==="RSA-PSS"){x=["verify"];C=["sign"]}else{x=["encrypt","wrapKey"];C=["decrypt","unwrapKey"]}if(r.usages){var h=r.usages;var p=[];var m=[];var v;for(v=0;v=0){p.push(x[v])}}for(v=0;v=0){m.push(C[v])}}x=p;C=m}return{type:"keyGeneration",keyPair:{publicKey:{keyData:e.publicKey,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:x,type:"public"}},privateKey:{keyData:e.privateKey,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:C,type:"private"}}}}};q.register("sign","RSASSA-PKCS1-V1_5",mr.sign);q.register("sign","RSA-PSS",mr.sign);q.register("verify","RSASSA-PKCS1-V1_5",mr.verify);q.register("verify","RSA-PSS",mr.verify);q.register("encrypt","RSAES-PKCS1-V1_5",mr.workerEncrypt);q.register("decrypt","RSAES-PKCS1-V1_5",mr.workerDecrypt);q.register("encrypt","RSA-OAEP",mr.workerEncrypt);q.register("decrypt","RSA-OAEP",mr.workerDecrypt);q.register("importKey","RSA-OAEP",mr.importKey);q.register("importKey","RSAES-PKCS1-V1_5",mr.importKey);q.register("importKey","RSASSA-PKCS1-V1_5",mr.importKey);q.register("importKey","RSA-PSS",mr.importKey);q.register("exportKey","RSA-OAEP",mr.exportKey);q.register("exportKey","RSAES-PKCS1-V1_5",mr.exportKey);q.register("exportKey","RSASSA-PKCS1-V1_5",mr.exportKey);q.register("exportKey","RSA-PSS",mr.exportKey);q.register("generateKey","RSA-OAEP",mr.generateKeyPair);q.register("generateKey","RSAES-PKCS1-V1_5",mr.generateKeyPair);q.register("generateKey","RSASSA-PKCS1-V1_5",mr.generateKeyPair);q.register("generateKey","RSA-PSS",mr.generateKeyPair)}var Me=(function(){function r(e){var t=e.algorithm.hash.name,l=Hr[t.toUpperCase()](),f=e.algorithm;var g=wr.toArray(f.algorithmId).concat(wr.toArray(f.partyUInfo),wr.toArray(f.partyVInfo),wr.toArray(f.publicInfo)||[],wr.toArray(f.privateInfo)||[]);var x=Math.ceil(e.length/l.hashLen),C=1,h=e.keyData.concat(g),p=[];for(var m=0;m>>24&255,d>>>16&255,d>>>8&255,d&255]);for(var b=0;b255*C){throw new Error("The length provided for HKDF is too large.")}if(g.length===0){g=V.getVector(C)}c={workerid:0,keyHandle:{algorithm:t},keyData:g,buffer:l};c.keyData=_r.signHmac(c);for(v=0;v255*h){throw new Error("The length provided for HKDF-CTR is too large.")}v={workerid:0,keyHandle:{algorithm:t},keyData:l,buffer:l};var c=g.concat([0],x,wr.int32ToBytes(f));for(m=1;m<=Math.ceil(C/h);m++){v.buffer=wr.int32ToBytes(m).concat(c);p=p.concat(_r.signHmac(v))}return p.slice(0,C)}return{deriveBits:r}})();if(typeof q!=="undefined"){He.importKey=function(r){var e;if(r.format==="raw"){e=V.toArray(r.keyData)}else{throw new Error("unsupported import format")}if(r.extractable!==false){throw new Error("only extractable=false is supported.")}return{type:"keyImport",keyData:e,keyHandle:{algorithm:{name:"HKDF-CTR"},extractable:false,usages:r.usages,type:"secret"}}};q.register("deriveBits","HKDF-CTR",He.deriveBits);q.register("importKey","HKDF-CTR",He.importKey)}var Fe=function(r){var e=B.bytesToDigits,t=B.digitsToBytes,l=r,f=new gr.EllipticCurveOperatorFp(r);function g(h){var p=[],m=Yr.getBytes(r.order.length*B.DIGIT_NUM_BYTES);B.reduce(B.bytesToDigits(m),l.order,p);var v=l.allocatePointStorage();f.scalarMultiply(p,l.generator,v);return{privateKey:{x:t(v.x),y:t(v.y),d:t(p)},publicKey:{x:t(v.x),y:t(v.y)}}}function x(h,p,m){var v=new gr.EllipticCurvePointFp(l,false,e(p.x),e(p.y),null,false);var c=l.allocatePointStorage();f.convertToJacobianForm(c);f.convertToMontgomeryForm(c);f.scalarMultiply(e(h.d),v,c);f.convertToAffineForm(c);f.convertToStandardForm(c);var n=B.digitsToBytes(c.x,true,p.x.length);if(m&&n.length*8>>o;n[n.length-1]=n[n.length-1]&E;return n}function C(h){if(!l.generator.isInMontgomeryForm){f.convertToMontgomeryForm(l.generator)}var p=l.allocatePointStorage();f.convertToJacobianForm(p);f.convertToMontgomeryForm(p);f.scalarMultiply(e(h),l.generator,p);return{x:t(p.x),y:t(p.y)}}return{generateKey:g,deriveBits:x,computePublicKey:C}};var Ce=null;if(typeof q!=="undefined"){Fe.deriveBits=function(r){var e=gr.createCurve(r.algorithm.namedCurve.toUpperCase());var t=r.keyData;var l=r.additionalKeyData;Ce=Fe(e);var f=Ce.deriveBits(t,l,r.length);return f};Fe.deriveKey=function(r){throw new Error("not supported");return secretBytes};Fe.generateKey=function(r){var e=gr.createCurve(r.algorithm.namedCurve.toUpperCase());Ce=Fe(e);var t=Ce.generateKey();var l=gr.curveElementLength(r.algorithm.namedCurve);var f=V.padFront;t.publicKey.x=f(t.publicKey.x,0,l);t.publicKey.y=f(t.publicKey.y,0,l);t.privateKey.x=f(t.privateKey.x,0,l);t.privateKey.y=f(t.privateKey.y,0,l);t.privateKey.d=f(t.privateKey.d,0,l);return{type:"keyPairGeneration",keyPair:{publicKey:{keyData:t.publicKey,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:[],type:"public"}},privateKey:{keyData:t.privateKey,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"private"}}}}};Fe.importKey=function(r){try{if(r.format==="raw"){var e=r.keyData;if(e[0]!==4){throw new Error("DataError")}var t=~~((e.length-1)/2);var l=r.algorithm.namedCurve.toUpperCase();var f=e.slice(1,t+1),g=e.slice(t+1);if(gr.validatePoint(l,f,g)===false){throw new Error("DataError")}return{type:"keyImport",keyData:{x:f,y:g},keyHandle:{algorithm:r.algorithm,extractable:r.extractable||false,usages:r.usages,type:"public"}}}if(r.format==="jwk"){var x=te.jwkToKey(r.keyData,r.algorithm,["x","y","d","crv"]);if(x.d&&(!x.x||!x.y)){var C=gr.createCurve(r.algorithm.namedCurve.toUpperCase());Ce=Fe(C);var h=Ce.computePublicKey(x.d);x.x=h.x;x.y=h.y}var p=gr.curveElementLength(r.algorithm.namedCurve);if(x.x){x.x=V.padFront(x.x,0,p)}if(x.y){x.y=V.padFront(x.y,0,p)}if(x.d){x.d=V.padFront(x.d,0,p)}if(gr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable||x.extractable,usages:r.usages,type:x.d?"private":"public"}}}if(r.format==="spki"){var m={"P-256":32,"P-384":48,"P-521":66};var p=m[r.algorithm.namedCurve];var v=Lr.parse(r.keyData);if(v==null){throw new Error("invalid key data.")}var c=v[1];var n=c.data.slice(c.header+1);if(n==null||n.shift()!==4||n.length!==p*2){throw new Error("invalid key data.")}var f=n.slice(0,p),g=n.slice(p);if(!V.isBytes(f)||!V.isBytes(g)){throw new Error("invalid key data.")}var x={x:f,y:g};if(gr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"public"}}}if(r.format==="pkcs8"){var m={"P-256":32,"P-384":48,"P-521":66};var p=m[r.algorithm.namedCurve];var v=Lr.parse(r.keyData);if(v==null){throw new Error("invalid key data.")}var o=v[2];var n=Lr.parse(o.data.slice(o.header));if(n==null){throw new Error("invalid key data.")}var E=n[1].data.slice(n[1].header);var c=Lr.parse(n[2][0].data);var n=c.data.slice(c.header+1);if(n==null||n.shift()!==4||n.length!==p*2){throw new Error("invalid key data.")}var f=n.slice(0,p),g=n.slice(p);if(!V.isBytes(f)||!V.isBytes(g)){throw new Error("invalid key data.")}var x={x:f,y:g,d:E};if(gr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"private"}}}}catch(s){throw V.error("DataError","")}};Fe.exportKey=function(r){var e="1.2.840.10045.2.1";var t={"P-256":"1.2.840.10045.3.1.7 ","P-384":"1.3.132.0.34","P-521":"1.3.132.0.35"};if(r.format==="raw"&&r.keyHandle.type==="public"){var l=[4].concat(r.keyData.x,r.keyData.y);return{type:"keyExport",keyHandle:l}}if(r.format==="jwk"){var f=te.keyToJwk(r.keyHandle,r.keyData);return{type:"keyExport",keyHandle:f}}if(r.format==="spki"){var g=Lr.encode({SEQUENCE:[{SEQUENCE:[{"OBJECT IDENTIFIER":e},{"OBJECT IDENTIFIER":t[r.algorithm.namedCurve]}]},{"BIT STRING":[4].concat(r.keyData.x,r.keyData.y)}]});return{type:"keyExport",keyHandle:g}}if(r.format==="pkcs8"){var g=Lr.encode({SEQUENCE:[{INTEGER:0},{SEQUENCE:[{"OBJECT IDENTIFIER":e},{"OBJECT IDENTIFIER":t[r.algorithm.namedCurve]}]},{"OCTET STRING":{SEQUENCE:[{INTEGER:1},{"OCTET STRING":r.keyData.d},{APPLICATION:[{"BIT STRING":[4].concat(r.keyData.x,r.keyData.y)}],tag:1}]}}]});return{type:"keyExport",keyHandle:g}}throw new Error("unsupported export format.")};q.register("importKey","ECDH",Fe.importKey);q.register("exportKey","ECDH",Fe.exportKey);q.register("generateKey","ECDH",Fe.generateKey);q.register("deriveBits","ECDH",Fe.deriveBits);q.register("deriveKey","ECDH",Fe.deriveKey)}var Xr=function(r){var e=B.bytesToDigits,t=B.digitsToBytes,l=new gr.EllipticCurveOperatorFp(r),f=t(r.order).length,g=r.type===1;function x(c){return C(e(c))}function C(c){var n=r.allocatePointStorage();l.scalarMultiply(c,r.generator,n);return{publicKey:n,privateKey:c}}function h(c){var n=[];if(!c){c=Yr.getBytes(r.order.length*B.DIGIT_NUM_BYTES)}B.reduce(B.bytesToDigits(c),r.order,n);return C(n)}function p(c){if(c.length>f){c.length=f}var n=e(c);if(g){var o=8-r.rbits%8;B.shiftRight(n,n,o)}B.reduce(n,r.order,n);return n}function m(c,n,o){if(!o){o=h()}var E=o.publicKey.x,s=o.privateKey,d=e(c.d),y=p(n.slice()),D=[],b=[],H=null;B.reduce(E,r.order,E);B.modMul(E,d,r.order,D);B.add(D,y,D);B.reduce(D,r.order,D);B.modInvCT(s,r.order,b);B.modMul(D,b,r.order,D);var Q=V.padFront(t(E,true,f),0,f);var J=V.padFront(t(D,true,f),0,f);H=Q.concat(J);return H}function v(c,n,o){var E=Math.floor(n.length/2),s=e(n.slice(0,E)),d=e(n.slice(E)),y=p(o.slice()),D=[],b=[];var H=new gr.EllipticCurvePointFp(r,false,e(c.x),e(c.y),null,false);B.modInv(d,r.order,d);B.modMul(y,d,r.order,D);B.modMul(s,d,r.order,b);var Q=r.allocatePointStorage();var J=r.allocatePointStorage();if(g){B.add(D,D,D);B.add(D,D,D);B.reduce(D,r.order,D);l.scalarMultiply(D,r.generator,Q,false);l.scalarMultiply(b,H,J,false);l.convertToExtendedProjective(Q);l.convertToExtendedProjective(J);l.add(J,Q,Q);l.normalize(Q)}else{l.scalarMultiply(D,r.generator,Q);l.scalarMultiply(b,H,J);l.convertToJacobianForm(Q);l.convertToMontgomeryForm(Q);l.convertToMontgomeryForm(J);l.mixedAdd(Q,J,Q);l.convertToAffineForm(Q);l.convertToStandardForm(Q)}if(Q.isInfinity){return false}B.reduce(Q.x,r.order,Q.x);return B.compareDigits(Q.x,s)===0}return{createKey:x,generateKey:h,sign:m,verify:v}};if(typeof q!=="undefined"){Xr.sign=function(r){V.checkParam(r.algorithm.hash,"Object","algorithm.hash");V.checkParam(r.algorithm.hash.name,"String","algorithm.hash.name");V.checkParam(r.keyHandle.algorithm.namedCurve,"String","p.keyHandle.algorithm.namedCurve");var e=r.algorithm.hash.name,t=gr.createCurve(r.keyHandle.algorithm.namedCurve.toUpperCase()),l=Hr[e.toUpperCase()](),f=l.computeHash(r.buffer);var g=Xr(t);return g.sign(r.keyData,f)};Xr.verify=function(r){var e=r.algorithm.hash.name,t=gr.createCurve(r.keyHandle.algorithm.namedCurve.toUpperCase()),l=Hr[e.toUpperCase()](),f=l.computeHash(r.buffer);var g=Xr(t);return g.verify(r.keyData,r.signature,f)};Xr.generateKey=function(r){var e=gr.createCurve(r.algorithm.namedCurve.toUpperCase());var t=Xr(e);var l=t.generateKey();var f=B.digitsToBytes;var g=gr.curveElementLength(r.algorithm.namedCurve);function x(m){return V.padFront(m,0,g)}var C=x(f(l.publicKey.x));var h=x(f(l.publicKey.y));var p=x(f(l.privateKey));return{type:"keyPairGeneration",keyPair:{publicKey:{keyData:{x:C,y:h},keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:["verify"],type:"public"}},privateKey:{keyData:{x:C,y:h,d:p},keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:["sign"],type:"private"}}}}};Xr.importKey=function(r){if(r.format==="raw"){var e=r.keyData;if(e[0]!==4){throw V.error("DataError","invalid point encoding")}var t=~~((e.length-1)/2);var l=r.algorithm.namedCurve.toUpperCase();var f=e.slice(1,t+1),g=e.slice(t+1);if(gr.validatePoint(l,f,g)===false){throw V.error("DataError","the imported point is not on the curve")}return{type:"keyImport",keyData:{x:f,y:g},keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"public"}}}if(r.format==="jwk"){var x=te.jwkToKey(r.keyData,r.algorithm,["x","y","d","crv"]);if(x.d&&(!x.x||!x.y)){var C=Xr.curves[r.algorithm.namedCurve]();var h=Xr(C);var p=h.computePublicKey(x.d);x.x=p.x;x.y=p.y}var m=gr.curveElementLength(r.algorithm.namedCurve);if(x.x){x.x=V.padFront(x.x,0,m)}if(x.y){x.y=V.padFront(x.y,0,m)}if(x.d){x.d=V.padFront(x.d,0,m)}if(gr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw V.error("DataError","the imported point is not on the curve")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable||x.extractable,usages:r.usages,type:x.d?"private":"public"}}}if(r.format==="spki"){var v={"P-256":32,"P-384":48,"P-521":66};var m=v[r.algorithm.namedCurve];var c=Lr.parse(r.keyData);if(c==null){throw new Error("invalid key data.")}var n=c[1];var o=n.data.slice(n.header+1);if(o==null||o.shift()!==4||o.length!==m*2){throw new Error("invalid key data.")}var f=o.slice(0,m),g=o.slice(m);if(!V.isBytes(f)||!V.isBytes(g)){throw new Error("invalid key data.")}var x={x:f,y:g};if(gr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"public"}}}if(r.format==="pkcs8"){var v={"P-256":32,"P-384":48,"P-521":66};var m=v[r.algorithm.namedCurve];var c=Lr.parse(r.keyData);if(c==null){throw new Error("invalid key data.")}var E=c[2];var o=Lr.parse(E.data.slice(E.header));if(o==null){throw new Error("invalid key data.")}var s=o[1].data.slice(o[1].header);var n=Lr.parse(o[2][0].data);var o=n.data.slice(n.header+1);if(o==null||o.shift()!==4||o.length!==m*2){throw new Error("invalid key data.")}var f=o.slice(0,m),g=o.slice(m);if(!V.isBytes(f)||!V.isBytes(g)){throw new Error("invalid key data.")}var x={x:f,y:g,d:s};if(gr.validatePoint(r.algorithm.namedCurve.toUpperCase(),x.x,x.y)===false){throw new Error("DataError")}return{type:"keyImport",keyData:x,keyHandle:{algorithm:r.algorithm,extractable:r.extractable,usages:r.usages,type:"private"}}}};Xr.exportKey=function(r){var e="1.2.840.10045.2.1";var t={"P-256":"1.2.840.10045.3.1.7 ","P-384":"1.3.132.0.34","P-521":"1.3.132.0.35"};if(r.format==="raw"&&r.keyHandle.type==="public"){var l=[4].concat(r.keyData.x,r.keyData.y);return{type:"keyExport",keyHandle:l}}if(r.format==="jwk"){var f=te.keyToJwk(r.keyHandle,r.keyData);return{type:"keyExport",keyHandle:f}}if(r.format==="spki"){var g=Lr.encode({SEQUENCE:[{SEQUENCE:[{"OBJECT IDENTIFIER":e},{"OBJECT IDENTIFIER":t[r.algorithm.namedCurve]}]},{"BIT STRING":[4].concat(r.keyData.x,r.keyData.y)}]});return{type:"keyExport",keyHandle:g}}if(r.format==="pkcs8"){var g=Lr.encode({SEQUENCE:[{INTEGER:0},{SEQUENCE:[{"OBJECT IDENTIFIER":e},{"OBJECT IDENTIFIER":t[r.algorithm.namedCurve]}]},{"OCTET STRING":{SEQUENCE:[{INTEGER:1},{"OCTET STRING":r.keyData.d},{APPLICATION:[{"BIT STRING":[4].concat(r.keyData.x,r.keyData.y)}],tag:1}]}}]});return{type:"keyExport",keyHandle:g}}throw new Error("unsupported export format.")};q.register("sign","ECDSA",Xr.sign);q.register("verify","ECDSA",Xr.verify);q.register("generateKey","ECDSA",Xr.generateKey);q.register("importKey","ECDSA",Xr.importKey);q.register("exportKey","ECDSA",Xr.exportKey)}var Te;var wr=V;Te=(function(){function r(){var s;function d(y){try{y.workerid=this.id;s=Ae.jsCryptoRunner({data:y})}catch(D){this.onerror({data:D,type:"error"});return}this.onmessage({data:s})}return{postMessage:d,onmessage:null,onerror:null,terminate:function(){}}}var e=function(s){return{process:function(d){return s.process(d)},finish:function(){return s.finish()},abort:function(){return s.abort()}}};function t(s){var d=null,y=null,D=null,b,H,Q,J;H=new Promise(function(w,L){Q=w;J=L});function P(w){if(w.type==="error"){if(J){if(w.data){try{if(!w.data.stack){w.data.stack="Error"}}catch(L){}try{if(w.data.code==null){w.data.code=0}}catch(L){}}J.apply(H,[w.data||w])}return}if(w.data.type==="process"){s(w.data.result,true);return}if(w.data.type==="finish"){s(w.data.result,true);return}this.result=s(w.data);Q.apply(H,[this.result]);return}b={dispatchEvent:P,promise:H,result:null};return b}function l(){function s(y){return new me(ee,y)}function d(y){var D,b,H;switch(y.type){case"keyGeneration":case"keyImport":case"keyDerive":if(y.keyPair){D=s(y.keyPair.publicKey.keyHandle);b=s(y.keyPair.privateKey.keyHandle);x.add(D,y.keyPair.publicKey.keyData);x.add(b,y.keyPair.privateKey.keyData);return{publicKey:D,privateKey:b}}else{H=s(y.keyHandle);x.add(H,y.keyData);return H}case"keyExport":return y.keyHandle;case"keyPairGeneration":D=s(y.keyPair.publicKey.keyHandle);b=s(y.keyPair.privateKey.keyHandle);x.add(D,y.keyPair.publicKey.keyData);x.add(b,y.keyPair.privateKey.keyData);return{publicKey:D,privateKey:b};default:throw new Error("Unknown key operation")}}return t(d)}function f(s){if(jr&&s.pop){return new Uint8Array(s).buffer}return s}function g(s){function d(b,H){b=b&&f(b);if(H){y.resolve(b);return}return b}var y=[],D=t(d);D.stream=s.algorithm.stream;y.add=function(b){var H,Q,J=new Promise(function(P,w){H=P;Q=w});J.label=b;y.push({resolve:H,reject:Q,promise:J});return J};y.resolve=function(b){var H=y.shift();H.resolve.apply(H.promise,[b])};D.process=function(b){s.operationSubType="process";s.buffer=wr.toArray(b);C.continueJob(this,wr.clone(s));return y.add("process")};D.finish=function(){s.operationSubType="finish";s.buffer=[];C.continueJob(this,wr.clone(s));return y.add("finish")};D.abort=function(){C.abortJob(this)};D.algorithm=s.algorithm||null;D.key=s.keyHandle||null;return D}var x=[];x.add=function(s,d){x.push({cryptoKey:s,keyData:d})};x.remove=function(s){for(var d=0;d=0;_-=1){if(y[_].isWebWorker===Z){y[_].terminate();y.splice(_,1)}}}function a(){var Z=0;for(var _=0;_0){var _=D.shift(),ar;br(_.operation,_.data);if(_.data.operationSubType==="process"){for(ar=0;ar=0;ar--){if(_.operation===D[ar].operation){D.splice(ar,1)}}}}else if(a()>d){K(Z)}}}function nr(Z){var _;if(L==="pending"){throw new Error("Creating new worker while workerstatus=pending")}if(L==="ready"){try{_=new Worker(Qr);_.postMessage({prngSeed:Yr.getBytes(48)});_.isWebWorker=true}catch(ar){Tr=false;L="failed";_.terminate();_=r();_.isWebWorker=false}}else{_=r();_.isWebWorker=false}_.operation=Z;_.id=H++;_.busy=false;_.onmessage=function(ar){if(ar.data==null){return}if(ar.data.initialized===true){return}var Br=_.operation;ar.target||(ar.target={data:_.data});if(ar.data.error){er(_);Br.dispatchEvent({type:"error",data:wr.error(ar.data.error.name,ar.data.error.message)});return}for(var Rr=0;Rr0){var I=D.shift();kr(I.operation,I.data)}return}_.addEventListener("message",ar,false);_.addEventListener("error",ar,false);_.postMessage({prngSeed:Yr.getBytes(48)});return}function tr(Z){var _=U(Z);if(_){K(_)}}function kr(Z,_){var ar=null;if(L==="pending"){Y(Z,_);return}ar=u();if(Tr&&ar===null&&y.length>=s){Y(Z,_);return}if(ar===null){ar=nr(Z)}if(ar===null){Y(Z,_);throw new Error("could not create new worker")}ar.operation=Z;ar.busy=true;_.workerid=ar.id;ir(ar,_)}function br(Z,_){var ar=U(Z);if(ar){ir(ar,_);return}kr(Z,_)}function ir(Z,_){_.workerid=Z.id;if(Tr){Z.postMessage(_)}else{var ar=(function(Br){return function(){return Z.postMessage(Br)}})(_);w(ar)}return}return{runJob:kr,continueJob:br,abortJob:tr,useWebWorkers:W}})();function h(s,d){if(!q.exists(s,d)){throw wr.error("NotSupportedError","Unrecognized or unsupported algorithm.")}}var p=[{name:"algorithm",type:"Object",required:true},{name:"keyHandle",type:"Object",required:true},{name:"buffer",type:"Array",required:false},{name:"signature",type:"Array",required:true},{name:"format",type:"String",required:true},{name:"keyData",type:"Object",required:true},{name:"extractable",type:"Boolean",required:false},{name:"usages",type:"Array",required:false},{name:"derivedKeyType",type:"Object",required:true},{name:"length",type:"Number",required:false},{name:"extractable",type:"Boolean",required:true},{name:"usages",type:"Array",required:true},{name:"keyData",type:"Array",required:true}];var m={encrypt:[0,1,2],decrypt:[0,1,2],sign:[0,1,2],verify:[0,1,3,2],digest:[0,2],generateKey:[0,6,7],importKeyRaw:[4,12,0,10,11],importKeyJwk:[4,5,0,10,11],exportKey:[0,4,1,6,7],deriveKey:[0,1,8,6,7],deriveBits:[0,1,9]};function v(s){var d=x.lookup(s);if(!d){throw wr.error("InvalidAccessError","key not found")}return d}function c(s,d){var y={operationType:s},D,b,H,Q;if(s==="importKey"&&(d[0]==="raw"||d[0]==="spki"||d[0]==="pkcs8")){s="importKeyRaw"}if(s==="importKey"&&d[0]==="jwk"){s="importKeyJwk"}D=m[s];for(Q=0;Q65536){throw V.error("QuotaExceededError","The ArrayBufferView's byte length ("+l+") exceeds the number of bytes of entropy available via this API (65536).")}var f=Yr.getBytes(r.length);for(e=0;e Date: Sun, 28 Jun 2026 07:17:04 -0700 Subject: [PATCH 5/6] Fix stale P-521 comment to reflect generic namedCurve crv check --- test/Test.Ecdh.js | 2 +- test/Test.Ecdsa.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Test.Ecdh.js b/test/Test.Ecdh.js index fcea4b0..6bebd2d 100644 --- a/test/Test.Ecdh.js +++ b/test/Test.Ecdh.js @@ -244,7 +244,7 @@ var inspectEcdhKey = { var expLenMax = ecdhCurveElementLength(algorithm.namedCurve); var expLenMin = expLenMax; - // has crv property equal to "P-521" + // has crv property equal to the algorithm's namedCurve if (!validation.prop.string(keyObj, "crv", algorithm.namedCurve)) { fail.push("key.crv !== " + algorithm.namedCurve); } diff --git a/test/Test.Ecdsa.js b/test/Test.Ecdsa.js index 56a201a..09eb02e 100644 --- a/test/Test.Ecdsa.js +++ b/test/Test.Ecdsa.js @@ -449,7 +449,7 @@ var inspectEcdsaKey = { var expLenMax = ecdsaCurveElementLength(algorithm.namedCurve); var expLenMin = expLenMax; - // has crv property equal to "P-521" + // has crv property equal to the algorithm's namedCurve if (!validation.prop.string(keyObj, "crv", algorithm.namedCurve)) { fail.push("key.crv !== " + algorithm.namedCurve); } From 0fb2842580789e001699ca7ae1381bc17c0af484 Mon Sep 17 00:00:00 2001 From: Larry Joy Date: Sun, 28 Jun 2026 10:31:12 -0700 Subject: [PATCH 6/6] Fix ECDH/ECDSA browser tests: restore local curve element length tables The #26 change replaced the tests' own curve-length tables with calls to cryptoECC.curveElementLength(). cryptoECC is an internal module inside the UMD bundle and is not exposed as a global, so SubtleTests.html threw ReferenceError: cryptoECC is not defined. Restore independent test-local tables (keeping the new BN-254 entry); the production de-duplication in ecdh.js/ecdsa.js/cryptoECC.js is unaffected. --- test/Test.Ecdh.js | 19 ++++++++++++++----- test/Test.Ecdsa.js | 19 ++++++++++++++----- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/test/Test.Ecdh.js b/test/Test.Ecdh.js index 6bebd2d..ef91275 100644 --- a/test/Test.Ecdh.js +++ b/test/Test.Ecdh.js @@ -226,9 +226,18 @@ function ecdhTests() { }); } -function ecdhCurveElementLength(namedCurve) { - return cryptoECC.curveElementLength(namedCurve); -} +var ecdhKeyLengths = { + "P-256": 32, + "P-384": 48, + "P-521": 66, + "BN-254": 32, + "NUMSP256D1": 32, + "NUMSP256T1": 32, + "NUMSP384D1": 48, + "NUMSP384T1": 48, + "NUMSP512D1": 64, + "NUMSP512T1": 64 +}; function ecdhKeyAlg(namedCurve) { return { @@ -241,7 +250,7 @@ var inspectEcdhKey = { public: function(keyObj, algorithm, usages, reason) { var fail = []; - var expLenMax = ecdhCurveElementLength(algorithm.namedCurve); + var expLenMax = ecdhKeyLengths[algorithm.namedCurve]; var expLenMin = expLenMax; // has crv property equal to the algorithm's namedCurve @@ -300,7 +309,7 @@ var inspectEcdhKey = { // } // } - var expLenMax = ecdhCurveElementLength(algorithm.namedCurve); + var expLenMax = ecdhKeyLengths[algorithm.namedCurve]; var expLenMin = expLenMax; this.public(keyObj, algorithm, usages, reason); diff --git a/test/Test.Ecdsa.js b/test/Test.Ecdsa.js index 09eb02e..4cafbf1 100644 --- a/test/Test.Ecdsa.js +++ b/test/Test.Ecdsa.js @@ -423,9 +423,18 @@ function ecdsaTests() { }); } -function ecdsaCurveElementLength(namedCurve) { - return cryptoECC.curveElementLength(namedCurve); -} +var ecdsaKeyLengths = { + "P-256": 32, + "P-384": 48, + "P-521": 66, + "BN-254": 32, + "NUMSP256D1": 32, + "NUMSP256T1": 32, + "NUMSP384D1": 48, + "NUMSP384T1": 48, + "NUMSP512D1": 64, + "NUMSP512T1": 64 +}; function ecdsaKeyAlg(curve) { return { @@ -446,7 +455,7 @@ var inspectEcdsaKey = { var fail = []; - var expLenMax = ecdsaCurveElementLength(algorithm.namedCurve); + var expLenMax = ecdsaKeyLengths[algorithm.namedCurve]; var expLenMin = expLenMax; // has crv property equal to the algorithm's namedCurve @@ -489,7 +498,7 @@ var inspectEcdsaKey = { }, private: function(keyObj, algorithm, usages, reason) { - var expLenMax = ecdsaCurveElementLength(algorithm.namedCurve); + var expLenMax = ecdsaKeyLengths[algorithm.namedCurve]; var expLenMin = expLenMax; this.public(keyObj, algorithm, usages, reason);