mirror of
https://github.com/bitwarden/web
synced 2025-12-10 13:23:15 +00:00
1 line
17 KiB
JavaScript
1 line
17 KiB
JavaScript
!function(e,t,r,n,o,a,s){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,a=t.createElement(r),s=t.getElementsByTagName(r)[0],a.async=1,a.src="https://www.google-analytics.com/analytics.js",s.parentNode.insertBefore(a,s)}(window,document,"script",0,"ga"),ga("create","UA-81915606-3","auto");var AdminLTEOptions={controlSidebarOptions:{selector:"#adminlte-fakeselector"}},u2f=u2f||{};u2f.isSupported=!!(void 0!==u2f&&u2f.register||"undefined"!=typeof chrome&&chrome.runtime);var js_api_version;u2f.EXTENSION_ID="kmendfapggjehodndflmmgagdbamhnfd",u2f.MessageTypes={U2F_REGISTER_REQUEST:"u2f_register_request",U2F_REGISTER_RESPONSE:"u2f_register_response",U2F_SIGN_REQUEST:"u2f_sign_request",U2F_SIGN_RESPONSE:"u2f_sign_response",U2F_GET_API_VERSION_REQUEST:"u2f_get_api_version_request",U2F_GET_API_VERSION_RESPONSE:"u2f_get_api_version_response"},u2f.ErrorCodes={OK:0,OTHER_ERROR:1,BAD_REQUEST:2,CONFIGURATION_UNSUPPORTED:3,DEVICE_INELIGIBLE:4,TIMEOUT:5},u2f.U2fRequest,u2f.U2fResponse,u2f.Error,u2f.Transport,u2f.Transports,u2f.SignRequest,u2f.SignResponse,u2f.RegisterRequest,u2f.RegisterResponse,u2f.RegisteredKey,u2f.GetJsApiVersionResponse,u2f.getMessagePort=function(e){if("undefined"!=typeof chrome&&chrome.runtime){var t={type:u2f.MessageTypes.U2F_SIGN_REQUEST,signRequests:[]};chrome.runtime.sendMessage(u2f.EXTENSION_ID,t,function(){chrome.runtime.lastError?u2f.getIframePort_(e):u2f.getChromeRuntimePort_(e)})}else u2f.isAndroidChrome_()?u2f.getAuthenticatorPort_(e):u2f.isIosChrome_()?u2f.getIosPort_(e):u2f.getIframePort_(e)},u2f.isAndroidChrome_=function(){var e=navigator.userAgent;return-1!=e.indexOf("Chrome")&&-1!=e.indexOf("Android")},u2f.isIosChrome_=function(){return["iPhone","iPad","iPod"].indexOf(navigator.platform)>-1},u2f.getChromeRuntimePort_=function(e){var t=chrome.runtime.connect(u2f.EXTENSION_ID,{includeTlsChannelId:!0});setTimeout(function(){e(new u2f.WrappedChromeRuntimePort_(t))},0)},u2f.getAuthenticatorPort_=function(e){setTimeout(function(){e(new u2f.WrappedAuthenticatorPort_)},0)},u2f.getIosPort_=function(e){setTimeout(function(){e(new u2f.WrappedIosPort_)},0)},u2f.WrappedChromeRuntimePort_=function(e){this.port_=e},u2f.formatSignRequest_=function(e,t,r,n,o){if(void 0===js_api_version||js_api_version<1.1){for(var a=[],s=0;s<r.length;s++)a[s]={version:r[s].version,challenge:t,keyHandle:r[s].keyHandle,appId:e};return{type:u2f.MessageTypes.U2F_SIGN_REQUEST,signRequests:a,timeoutSeconds:n,requestId:o}}return{type:u2f.MessageTypes.U2F_SIGN_REQUEST,appId:e,challenge:t,registeredKeys:r,timeoutSeconds:n,requestId:o}},u2f.formatRegisterRequest_=function(e,t,r,n,o){if(void 0===js_api_version||js_api_version<1.1){for(var a=0;a<r.length;a++)r[a].appId=e;for(var s=[],a=0;a<t.length;a++)s[a]={version:t[a].version,challenge:r[0],keyHandle:t[a].keyHandle,appId:e};return{type:u2f.MessageTypes.U2F_REGISTER_REQUEST,signRequests:s,registerRequests:r,timeoutSeconds:n,requestId:o}}return{type:u2f.MessageTypes.U2F_REGISTER_REQUEST,appId:e,registerRequests:r,registeredKeys:t,timeoutSeconds:n,requestId:o}},u2f.WrappedChromeRuntimePort_.prototype.postMessage=function(e){this.port_.postMessage(e)},u2f.WrappedChromeRuntimePort_.prototype.addEventListener=function(e,t){var r=e.toLowerCase();"message"==r||"onmessage"==r?this.port_.onMessage.addListener(function(e){t({data:e})}):console.error("WrappedChromeRuntimePort only supports onMessage")},u2f.WrappedAuthenticatorPort_=function(){this.requestId_=-1,this.requestObject_=null},u2f.WrappedAuthenticatorPort_.prototype.postMessage=function(e){var t=u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_+";S.request="+encodeURIComponent(JSON.stringify(e))+";end";document.location=t},u2f.WrappedAuthenticatorPort_.prototype.getPortType=function(){return"WrappedAuthenticatorPort_"},u2f.WrappedAuthenticatorPort_.prototype.addEventListener=function(e,t){if("message"==e.toLowerCase()){var r=this;window.addEventListener("message",r.onRequestUpdate_.bind(r,t),!1)}else console.error("WrappedAuthenticatorPort only supports message")},u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_=function(e,t){var r=JSON.parse(t.data),n=(r.intentURL,r.errorCode,null);r.hasOwnProperty("data")&&(n=JSON.parse(r.data)),e({data:n})},u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_="intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE",u2f.WrappedIosPort_=function(){},u2f.WrappedIosPort_.prototype.postMessage=function(e){var t=JSON.stringify(e),r="u2f://auth?"+encodeURI(t);location.replace(r)},u2f.WrappedIosPort_.prototype.getPortType=function(){return"WrappedIosPort_"},u2f.WrappedIosPort_.prototype.addEventListener=function(e,t){"message"!==e.toLowerCase()&&console.error("WrappedIosPort only supports message")},u2f.getIframePort_=function(e){var t="chrome-extension://"+u2f.EXTENSION_ID,r=document.createElement("iframe");r.src=t+"/u2f-comms.html",r.setAttribute("style","display:none"),document.body.appendChild(r);var n=new MessageChannel,o=function(t){"ready"==t.data?(n.port1.removeEventListener("message",o),e(n.port1)):console.error('First event on iframe port was not "ready"')};n.port1.addEventListener("message",o),n.port1.start(),r.addEventListener("load",function(){r.contentWindow.postMessage("init",t,[n.port2])})},u2f.EXTENSION_TIMEOUT_SEC=30,u2f.port_=null,u2f.waitingForPort_=[],u2f.reqCounter_=0,u2f.callbackMap_={},u2f.getPortSingleton_=function(e){u2f.port_?e(u2f.port_):(0==u2f.waitingForPort_.length&&u2f.getMessagePort(function(e){for(u2f.port_=e,u2f.port_.addEventListener("message",u2f.responseHandler_);u2f.waitingForPort_.length;)u2f.waitingForPort_.shift()(u2f.port_)}),u2f.waitingForPort_.push(e))},u2f.responseHandler_=function(e){var t=e.data,r=t.requestId;if(!r||!u2f.callbackMap_[r])return void console.error("Unknown or missing requestId in response.");var n=u2f.callbackMap_[r];delete u2f.callbackMap_[r],n(t.responseData)},u2f.sign=function(e,t,r,n,o){void 0===js_api_version?u2f.getApiVersion(function(a){js_api_version=void 0===a.js_api_version?0:a.js_api_version,console.log("Extension JS API Version: ",js_api_version),u2f.sendSignRequest(e,t,r,n,o)}):u2f.sendSignRequest(e,t,r,n,o)},u2f.sendSignRequest=function(e,t,r,n,o){u2f.getPortSingleton_(function(a){var s=++u2f.reqCounter_;u2f.callbackMap_[s]=n;var i=void 0!==o?o:u2f.EXTENSION_TIMEOUT_SEC,u=u2f.formatSignRequest_(e,t,r,i,s);a.postMessage(u)})},u2f.register=function(e,t,r,n,o){void 0===js_api_version?u2f.getApiVersion(function(a){js_api_version=void 0===a.js_api_version?0:a.js_api_version,console.log("Extension JS API Version: ",js_api_version),u2f.sendRegisterRequest(e,t,r,n,o)}):u2f.sendRegisterRequest(e,t,r,n,o)},u2f.sendRegisterRequest=function(e,t,r,n,o){u2f.getPortSingleton_(function(a){var s=++u2f.reqCounter_;u2f.callbackMap_[s]=n;var i=void 0!==o?o:u2f.EXTENSION_TIMEOUT_SEC,u=u2f.formatRegisterRequest_(e,r,t,i,s);a.postMessage(u)})},u2f.getApiVersion=function(e,t){u2f.getPortSingleton_(function(r){if(r.getPortType){var n;switch(r.getPortType()){case"WrappedIosPort_":case"WrappedAuthenticatorPort_":n=1.1;break;default:n=0}return void e({js_api_version:n})}var o=++u2f.reqCounter_;u2f.callbackMap_[o]=e;var a={type:u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST,timeoutSeconds:void 0!==t?t:u2f.EXTENSION_TIMEOUT_SEC,requestId:o};r.postMessage(a)})},function(e){"use strict";function t(e){return btoa(e).replace(/\=+$/,"").replace(/\+/g,"-").replace(/\//g,"_")}function r(e){return e+="===",e=e.slice(0,-e.length%4),atob(e.replace(/-/g,"+").replace(/_/g,"/"))}function n(e){for(var t=new Uint8Array(e.length),r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}function o(e){return e instanceof ArrayBuffer&&(e=new Uint8Array(e)),String.fromCharCode.apply(String,e)}function a(e){var t={name:(e.name||e||"").toUpperCase().replace("V","v")};switch(t.name){case"SHA-1":case"SHA-256":case"SHA-384":case"SHA-512":break;case"AES-CBC":case"AES-GCM":case"AES-KW":e.length&&(t.length=e.length);break;case"HMAC":e.hash&&(t.hash=a(e.hash)),e.length&&(t.length=e.length);break;case"RSAES-PKCS1-v1_5":e.publicExponent&&(t.publicExponent=new Uint8Array(e.publicExponent)),e.modulusLength&&(t.modulusLength=e.modulusLength);break;case"RSASSA-PKCS1-v1_5":case"RSA-OAEP":e.hash&&(t.hash=a(e.hash)),e.publicExponent&&(t.publicExponent=new Uint8Array(e.publicExponent)),e.modulusLength&&(t.modulusLength=e.modulusLength);break;default:throw new SyntaxError("Bad algorithm name")}return t}function s(e){return{HMAC:{"SHA-1":"HS1","SHA-256":"HS256","SHA-384":"HS384","SHA-512":"HS512"},"RSASSA-PKCS1-v1_5":{"SHA-1":"RS1","SHA-256":"RS256","SHA-384":"RS384","SHA-512":"RS512"},"RSAES-PKCS1-v1_5":{"":"RSA1_5"},"RSA-OAEP":{"SHA-1":"RSA-OAEP","SHA-256":"RSA-OAEP-256"},"AES-KW":{128:"A128KW",192:"A192KW",256:"A256KW"},"AES-GCM":{128:"A128GCM",192:"A192GCM",256:"A256GCM"},"AES-CBC":{128:"A128CBC",192:"A192CBC",256:"A256CBC"}}[e.name][(e.hash||{}).name||e.length||""]}function i(e){(e instanceof ArrayBuffer||e instanceof Uint8Array)&&(e=JSON.parse(decodeURIComponent(escape(o(e)))));var t={kty:e.kty,alg:e.alg,ext:e.ext||e.extractable};switch(t.kty){case"oct":t.k=e.k;case"RSA":["n","e","d","p","q","dp","dq","qi","oth"].forEach(function(r){r in e&&(t[r]=e[r])});break;default:throw new TypeError("Unsupported key type")}return t}function u(e){var t=i(e);return S&&(t.extractable=t.ext,delete t.ext),n(unescape(encodeURIComponent(JSON.stringify(t)))).buffer}function p(e){var r=c(e),n=!1;r.length>2&&(n=!0,r.shift());var a={ext:!0};switch(r[0][0]){case"1.2.840.113549.1.1.1":var s=["n","e","d","p","q","dp","dq","qi"],i=c(r[1]);n&&i.shift();for(var u=0;u<i.length;u++)i[u][0]||(i[u]=i[u].subarray(1)),a[s[u]]=t(o(i[u]));a.kty="RSA";break;default:throw new TypeError("Unsupported key type")}return a}function f(e){var t,o=[["",null]],a=!1;switch(e.kty){case"RSA":for(var s=["n","e","d","p","q","dp","dq","qi"],i=[],u=0;u<s.length&&s[u]in e;u++){var p=i[u]=n(r(e[s[u]]));128&p[0]&&(i[u]=new Uint8Array(p.length+1),i[u].set(p,1))}i.length>2&&(a=!0,i.unshift(new Uint8Array([0]))),o[0][0]="1.2.840.113549.1.1.1",t=i;break;default:throw new TypeError("Unsupported key type")}return o.push(new Uint8Array(l(t)).buffer),a?o.unshift(new Uint8Array([0])):o[1]={tag:3,value:o[1]},new Uint8Array(l(o)).buffer}function c(e,t){if(e instanceof ArrayBuffer&&(e=new Uint8Array(e)),t||(t={pos:0,end:e.length}),t.end-t.pos<2||t.end>e.length)throw new RangeError("Malformed DER");var r=e[t.pos++],n=e[t.pos++];if(n>=128){if(n&=127,t.end-t.pos<n)throw new RangeError("Malformed DER");for(var a=0;n--;)a<<=8,a|=e[t.pos++];n=a}if(t.end-t.pos<n)throw new RangeError("Malformed DER");var s;switch(r){case 2:s=e.subarray(t.pos,t.pos+=n);break;case 3:if(e[t.pos++])throw new Error("Unsupported bit string");n--;case 4:s=new Uint8Array(e.subarray(t.pos,t.pos+=n)).buffer;break;case 5:s=null;break;case 6:var i=btoa(o(e.subarray(t.pos,t.pos+=n)));if(!(i in A))throw new Error("Unsupported OBJECT ID "+i);s=A[i];break;case 48:s=[];for(var u=t.pos+n;t.pos<u;)s.push(c(e,t));break;default:throw new Error("Unsupported DER tag 0x"+r.toString(16))}return s}function l(e,t){t||(t=[]);var r=0,o=0,a=t.length+2;if(t.push(0,0),e instanceof Uint8Array){r=2,o=e.length;for(var s=0;s<o;s++)t.push(e[s])}else if(e instanceof ArrayBuffer){r=4,o=e.byteLength,e=new Uint8Array(e);for(var s=0;s<o;s++)t.push(e[s])}else if(null===e)r=5,o=0;else if("string"==typeof e&&e in w){var i=n(atob(w[e]));r=6,o=i.length;for(var s=0;s<o;s++)t.push(i[s])}else if(e instanceof Array){for(var s=0;s<e.length;s++)l(e[s],t);r=48,o=t.length-a}else{if(!("object"==typeof e&&3===e.tag&&e.value instanceof ArrayBuffer))throw new Error("Unsupported DER value "+e);e=new Uint8Array(e.value),r=3,o=e.byteLength,t.push(0);for(var s=0;s<o;s++)t.push(e[s]);o++}if(o>=128){var u=o,o=4;for(t.splice(a,0,u>>24&255,u>>16&255,u>>8&255,255&u);o>1&&!(u>>24);)u<<=8,o--;o<4&&t.splice(a,4-o),o|=128}return t.splice(a-2,2,r,o),t}function g(e,t,r,n){Object.defineProperties(this,{_key:{value:e},type:{value:e.type,enumerable:!0},extractable:{value:void 0===r?e.extractable:r,enumerable:!0},algorithm:{value:void 0===t?e.algorithm:t,enumerable:!0},usages:{value:void 0===n?e.usages:n,enumerable:!0}})}function d(e){return"verify"===e||"encrypt"===e||"wrapKey"===e}function y(e){return"sign"===e||"decrypt"===e||"unwrapKey"===e}var h=e.crypto||e.msCrypto;if(h){var _=h.subtle||h.webkitSubtle;if(_){var m=e.Crypto||h.constructor||Object,E=e.SubtleCrypto||_.constructor||Object,S=(e.CryptoKey||e.Key||Object,!!e.msCrypto),v=!h.subtle&&!!h.webkitSubtle;if(S||v){e.cryptoShimmed=!0;var A={KoZIhvcNAQEB:"1.2.840.113549.1.1.1"},w={"1.2.840.113549.1.1.1":"KoZIhvcNAQEB"};if(["generateKey","importKey","unwrapKey"].forEach(function(e){var t=_[e];_[e]=function(o,f,c){var l,m,E,A=[].slice.call(arguments);switch(e){case"generateKey":l=a(o),m=f,E=c;break;case"importKey":l=a(c),m=A[3],E=A[4],"jwk"===o&&(f=i(f),f.alg||(f.alg=s(l)),f.key_ops||(f.key_ops="oct"!==f.kty?"d"in f?E.filter(y):E.filter(d):E.slice()),A[1]=u(f));break;case"unwrapKey":l=A[4],m=A[5],E=A[6],A[2]=c._key}if("generateKey"===e&&"HMAC"===l.name&&l.hash)return l.length=l.length||{"SHA-1":512,"SHA-256":512,"SHA-384":1024,"SHA-512":1024}[l.hash.name],_.importKey("raw",h.getRandomValues(new Uint8Array(l.length+7>>3)),l,m,E);if(v&&"generateKey"===e&&"RSASSA-PKCS1-v1_5"===l.name&&(!l.modulusLength||l.modulusLength>=2048))return o=a(o),o.name="RSAES-PKCS1-v1_5",delete o.hash,_.generateKey(o,!0,["encrypt","decrypt"]).then(function(e){return Promise.all([_.exportKey("jwk",e.publicKey),_.exportKey("jwk",e.privateKey)])}).then(function(e){return e[0].alg=e[1].alg=s(l),e[0].key_ops=E.filter(d),e[1].key_ops=E.filter(y),Promise.all([_.importKey("jwk",e[0],l,!0,e[0].key_ops),_.importKey("jwk",e[1],l,m,e[1].key_ops)])}).then(function(e){return{publicKey:e[0],privateKey:e[1]}});if((v||S&&"SHA-1"===(l.hash||{}).name)&&"importKey"===e&&"jwk"===o&&"HMAC"===l.name&&"oct"===f.kty)return _.importKey("raw",n(r(f.k)),c,A[3],A[4]);if(v&&"importKey"===e&&("spki"===o||"pkcs8"===o))return _.importKey("jwk",p(f),c,A[3],A[4]);if(S&&"unwrapKey"===e)return _.decrypt(A[3],c,f).then(function(e){return _.importKey(o,e,A[4],A[5],A[6])});var w;try{w=t.apply(_,A)}catch(e){return Promise.reject(e)}return S&&(w=new Promise(function(e,t){w.onabort=w.onerror=function(e){t(e)},w.oncomplete=function(t){e(t.target.result)}})),w=w.then(function(e){return"HMAC"===l.name&&(l.length||(l.length=8*e.algorithm.length)),0==l.name.search("RSA")&&(l.modulusLength||(l.modulusLength=(e.publicKey||e).algorithm.modulusLength),l.publicExponent||(l.publicExponent=(e.publicKey||e).algorithm.publicExponent)),e=e.publicKey&&e.privateKey?{publicKey:new g(e.publicKey,l,m,E.filter(d)),privateKey:new g(e.privateKey,l,m,E.filter(y))}:new g(e,l,m,E)})}}),["exportKey","wrapKey"].forEach(function(e){var r=_[e];_[e]=function(a,u,p){var c=[].slice.call(arguments);switch(e){case"exportKey":c[1]=u._key;break;case"wrapKey":c[1]=u._key,c[2]=p._key}if((v||S&&"SHA-1"===(u.algorithm.hash||{}).name)&&"exportKey"===e&&"jwk"===a&&"HMAC"===u.algorithm.name&&(c[0]="raw"),!v||"exportKey"!==e||"spki"!==a&&"pkcs8"!==a||(c[0]="jwk"),S&&"wrapKey"===e)return _.exportKey(a,u).then(function(e){return"jwk"===a&&(e=n(unescape(encodeURIComponent(JSON.stringify(i(e)))))),_.encrypt(c[3],p,e)});var l;try{l=r.apply(_,c)}catch(e){return Promise.reject(e)}return S&&(l=new Promise(function(e,t){l.onabort=l.onerror=function(e){t(e)},l.oncomplete=function(t){e(t.target.result)}})),"exportKey"===e&&"jwk"===a&&(l=l.then(function(e){return(v||S&&"SHA-1"===(u.algorithm.hash||{}).name)&&"HMAC"===u.algorithm.name?{kty:"oct",alg:s(u.algorithm),key_ops:u.usages.slice(),ext:!0,k:t(o(e))}:(e=i(e),e.alg||(e.alg=s(u.algorithm)),e.key_ops||(e.key_ops="public"===u.type?u.usages.filter(d):"private"===u.type?u.usages.filter(y):u.usages.slice()),e)})),!v||"exportKey"!==e||"spki"!==a&&"pkcs8"!==a||(l=l.then(function(e){return e=f(i(e))})),l}}),["encrypt","decrypt","sign","verify"].forEach(function(e){var t=_[e];_[e]=function(r,n,o,s){if(S&&(!o.byteLength||s&&!s.byteLength))throw new Error("Empy input is not allowed");var i=[].slice.call(arguments),u=a(r);if(S&&"decrypt"===e&&"AES-GCM"===u.name){var p=r.tagLength>>3;i[2]=(o.buffer||o).slice(0,o.byteLength-p),r.tag=(o.buffer||o).slice(o.byteLength-p)}i[1]=n._key;var f;try{f=t.apply(_,i)}catch(e){return Promise.reject(e)}return S&&(f=new Promise(function(t,r){f.onabort=f.onerror=function(e){r(e)},f.oncomplete=function(r){var r=r.target.result;if("encrypt"===e&&r instanceof AesGcmEncryptResult){var n=r.ciphertext,o=r.tag;r=new Uint8Array(n.byteLength+o.byteLength),r.set(new Uint8Array(n),0),r.set(new Uint8Array(o),n.byteLength),r=r.buffer}t(r)}})),f}}),S){var R=_.digest;_.digest=function(e,t){if(!t.byteLength)throw new Error("Empy input is not allowed");var r;try{r=R.call(_,e,t)}catch(e){return Promise.reject(e)}return r=new Promise(function(e,t){r.onabort=r.onerror=function(e){t(e)},r.oncomplete=function(t){e(t.target.result)}})},e.crypto=Object.create(h,{getRandomValues:{value:function(e){return h.getRandomValues(e)}},subtle:{value:_}}),e.CryptoKey=g}v&&(h.subtle=_,e.Crypto=m,e.SubtleCrypto=E,e.CryptoKey=g)}}}}("undefined"==typeof window?"undefined"==typeof self?this:self:window); |