Created
February 24, 2021 18:31
-
-
Save anadius/11260db3a66dab0d6ff0d3277e2ca470 to your computer and use it in GitHub Desktop.
Discord Slash Commands on Cloudflare Workers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const PUBLIC_KEY = '<PUBLIC KEY from your app>'; | |
const POST_ERROR = true; // return the error message if your command function fails | |
/* | |
* @typedef slashCommandResult | |
* @type {array} | |
* @property {integer} 0 - InteractionResponseType: | |
* https://discord.com/developers/docs/interactions/slash-commands#interaction-response-interactionresponsetype | |
* @property {Object|string} [1] - optional; string if you want a simple response | |
* or InteractionApplicationCommandCallbackData object: | |
* https://discord.com/developers/docs/interactions/slash-commands#interaction-response-interactionapplicationcommandcallbackdata | |
*/ | |
// your command functions; async, just in case you want to `await fetch` something | |
const COMMANDS = { | |
/** | |
* Example function responding to a slash command interaction | |
* @function exampleFunction | |
* @async | |
* @param {Object} interaction - unparsed Interaction object: | |
* https://discord.com/developers/docs/interactions/slash-commands#interaction | |
* @param {Object} params - slash command parameters | |
* @param {Array<string>} subcommands - slash command parameters | |
* @param {string} commandName - name of your command | |
* @returns {Promise<slashCommandResult>} array with type of response and optional response data, see above | |
*/ | |
'<slash command 1 ID>': async function(interaction, params, subcommands, commandName) { | |
let message; | |
switch (subcommands[0]) { | |
case 'subcommand1': | |
message = 'Congrats on sending your command!'; | |
break; | |
case 'subcommand2': | |
message = 'Something something subcommand 2!'; | |
break; | |
default: | |
throw new subcommandNotImplementedError(); | |
} | |
return [4, message]; | |
}, | |
'<slash command 2 ID>': async function(interaction, params) { | |
return [3, { | |
content: null, | |
embeds: [{ | |
title: 'Hello world!', | |
description: 'You can send embeds too', | |
}], | |
}]; | |
}, | |
}; | |
function subcommandNotImplementedError() {} | |
async function respondToInteraction(interaction) { | |
const [commandId, commandName, [subcommands, params]] = parseSlashCommandData(interaction.data); | |
const command = COMMANDS[commandId]; | |
if(typeof command === 'undefined') | |
return [4, 'Not implemented! Command ID: ' + commandId]; | |
try { | |
return await command(interaction, params, subcommands, commandName); | |
} | |
catch (error) { | |
if (error instanceof subcommandNotImplementedError) | |
return [4, 'Not implemented! Command ID: ' + commandId + '\nSubcommands: ' + JSON.stringify(subcommands)]; | |
else if (POST_ERROR) | |
return [4, 'Uncaught error:\n```\n' + error.toString() + '\n```\n']; | |
} | |
return [5]; | |
} | |
function parseSlashCommandData(data) { | |
return [data.id, data.name, parseSlashCommandOptions(data.options, [], {})]; | |
} | |
function parseSlashCommandOptions(options, subcommands, params) { | |
for (const option of options) { | |
const name = option.name; | |
if (typeof option.options === 'undefined') | |
params[name] = option.value; | |
else { | |
subcommands.push(name); | |
return parseSlashCommandOptions(option.options, subcommands, params); | |
} | |
} | |
return [subcommands, params]; | |
} | |
function hexStringToUint8Array(hexString) { | |
const ui = new Uint8Array(Math.ceil(hexString.length / 2)); | |
for (let i = 0; i < ui.length; ++i) { | |
ui[i] = parseInt(hexString.substr(i * 2, 2), 16); | |
} | |
return ui | |
} | |
function makeResponse(responseType, responseData) { | |
if (typeof responseData === 'string') | |
responseData = { content: responseData }; | |
return new Response( | |
JSON.stringify({ | |
type: responseType, | |
data: responseData | |
}), | |
{ | |
status: 200, | |
headers: { 'Content-Type': 'application/json' } | |
} | |
); | |
} | |
addEventListener('fetch', event => { | |
event.respondWith(handleRequest(event.request)) | |
}); | |
async function handleRequest(request) { | |
const encoder = new TextEncoder(); | |
const body = await request.text(); | |
const interaction = JSON.parse(body); | |
const timestamp = request.headers.get('x-signature-timestamp'); | |
const verified = nacl.sign.detached.verify( | |
encoder.encode(timestamp + body), | |
hexStringToUint8Array(request.headers.get('x-signature-ed25519')), | |
hexStringToUint8Array(PUBLIC_KEY)); | |
if (!verified) | |
return new Response(null, {status: 401}); | |
if (interaction.type === 1) // Ping | |
return makeResponse(1); | |
else if (interaction.type === 2) // ApplicationCommand | |
return makeResponse(...(await respondToInteraction(interaction))); | |
} | |
// minified version of https://github.com/hakanols/tweetnacl-es6/blob/master/nacl-fast-es.js | |
const nacl={};var gf=function(r){var t,o=new Float64Array(16);if(r)for(t=0;t<r.length;t++)o[t]=r[t];return o},randombytes=function(){throw new Error("no PRNG")},_0=new Uint8Array(16),_9=new Uint8Array(32);_9[0]=9;var gf0=gf(),gf1=gf([1]),_121665=gf([56129,1]),D=gf([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),D2=gf([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),X=gf([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),Y=gf([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),I=gf([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function ts64(r,t,o,e){r[t]=o>>24&255,r[t+1]=o>>16&255,r[t+2]=o>>8&255,r[t+3]=255&o,r[t+4]=e>>24&255,r[t+5]=e>>16&255,r[t+6]=e>>8&255,r[t+7]=255&e}function vn(r,t,o,e,n){var c,a=0;for(c=0;c<n;c++)a|=r[t+c]^o[e+c];return(1&a-1>>>8)-1}function crypto_verify_16(r,t,o,e){return vn(r,t,o,e,16)}function crypto_verify_32(r,t,o,e){return vn(r,t,o,e,32)}function core_salsa20(r,t,o,e){for(var n,c=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,a=255&o[0]|(255&o[1])<<8|(255&o[2])<<16|(255&o[3])<<24,s=255&o[4]|(255&o[5])<<8|(255&o[6])<<16|(255&o[7])<<24,i=255&o[8]|(255&o[9])<<8|(255&o[10])<<16|(255&o[11])<<24,_=255&o[12]|(255&o[13])<<8|(255&o[14])<<16|(255&o[15])<<24,h=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,y=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,f=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,p=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,l=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,E=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,u=255&o[16]|(255&o[17])<<8|(255&o[18])<<16|(255&o[19])<<24,g=255&o[20]|(255&o[21])<<8|(255&o[22])<<16|(255&o[23])<<24,b=255&o[24]|(255&o[25])<<8|(255&o[26])<<16|(255&o[27])<<24,S=255&o[28]|(255&o[29])<<8|(255&o[30])<<16|(255&o[31])<<24,Y=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,B=c,T=a,x=s,v=i,w=_,A=h,m=y,M=f,U=p,d=l,k=E,K=u,R=g,L=b,C=S,O=Y,Z=0;Z<20;Z+=2)B^=(n=(R^=(n=(U^=(n=(w^=(n=B+R|0)<<7|n>>>25)+B|0)<<9|n>>>23)+w|0)<<13|n>>>19)+U|0)<<18|n>>>14,A^=(n=(T^=(n=(L^=(n=(d^=(n=A+T|0)<<7|n>>>25)+A|0)<<9|n>>>23)+d|0)<<13|n>>>19)+L|0)<<18|n>>>14,k^=(n=(m^=(n=(x^=(n=(C^=(n=k+m|0)<<7|n>>>25)+k|0)<<9|n>>>23)+C|0)<<13|n>>>19)+x|0)<<18|n>>>14,O^=(n=(K^=(n=(M^=(n=(v^=(n=O+K|0)<<7|n>>>25)+O|0)<<9|n>>>23)+v|0)<<13|n>>>19)+M|0)<<18|n>>>14,B^=(n=(v^=(n=(x^=(n=(T^=(n=B+v|0)<<7|n>>>25)+B|0)<<9|n>>>23)+T|0)<<13|n>>>19)+x|0)<<18|n>>>14,A^=(n=(w^=(n=(M^=(n=(m^=(n=A+w|0)<<7|n>>>25)+A|0)<<9|n>>>23)+m|0)<<13|n>>>19)+M|0)<<18|n>>>14,k^=(n=(d^=(n=(U^=(n=(K^=(n=k+d|0)<<7|n>>>25)+k|0)<<9|n>>>23)+K|0)<<13|n>>>19)+U|0)<<18|n>>>14,O^=(n=(C^=(n=(L^=(n=(R^=(n=O+C|0)<<7|n>>>25)+O|0)<<9|n>>>23)+R|0)<<13|n>>>19)+L|0)<<18|n>>>14;B=B+c|0,T=T+a|0,x=x+s|0,v=v+i|0,w=w+_|0,A=A+h|0,m=m+y|0,M=M+f|0,U=U+p|0,d=d+l|0,k=k+E|0,K=K+u|0,R=R+g|0,L=L+b|0,C=C+S|0,O=O+Y|0,r[0]=B>>>0&255,r[1]=B>>>8&255,r[2]=B>>>16&255,r[3]=B>>>24&255,r[4]=T>>>0&255,r[5]=T>>>8&255,r[6]=T>>>16&255,r[7]=T>>>24&255,r[8]=x>>>0&255,r[9]=x>>>8&255,r[10]=x>>>16&255,r[11]=x>>>24&255,r[12]=v>>>0&255,r[13]=v>>>8&255,r[14]=v>>>16&255,r[15]=v>>>24&255,r[16]=w>>>0&255,r[17]=w>>>8&255,r[18]=w>>>16&255,r[19]=w>>>24&255,r[20]=A>>>0&255,r[21]=A>>>8&255,r[22]=A>>>16&255,r[23]=A>>>24&255,r[24]=m>>>0&255,r[25]=m>>>8&255,r[26]=m>>>16&255,r[27]=m>>>24&255,r[28]=M>>>0&255,r[29]=M>>>8&255,r[30]=M>>>16&255,r[31]=M>>>24&255,r[32]=U>>>0&255,r[33]=U>>>8&255,r[34]=U>>>16&255,r[35]=U>>>24&255,r[36]=d>>>0&255,r[37]=d>>>8&255,r[38]=d>>>16&255,r[39]=d>>>24&255,r[40]=k>>>0&255,r[41]=k>>>8&255,r[42]=k>>>16&255,r[43]=k>>>24&255,r[44]=K>>>0&255,r[45]=K>>>8&255,r[46]=K>>>16&255,r[47]=K>>>24&255,r[48]=R>>>0&255,r[49]=R>>>8&255,r[50]=R>>>16&255,r[51]=R>>>24&255,r[52]=L>>>0&255,r[53]=L>>>8&255,r[54]=L>>>16&255,r[55]=L>>>24&255,r[56]=C>>>0&255,r[57]=C>>>8&255,r[58]=C>>>16&255,r[59]=C>>>24&255,r[60]=O>>>0&255,r[61]=O>>>8&255,r[62]=O>>>16&255,r[63]=O>>>24&255}function core_hsalsa20(r,t,o,e){for(var n,c=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,a=255&o[0]|(255&o[1])<<8|(255&o[2])<<16|(255&o[3])<<24,s=255&o[4]|(255&o[5])<<8|(255&o[6])<<16|(255&o[7])<<24,i=255&o[8]|(255&o[9])<<8|(255&o[10])<<16|(255&o[11])<<24,_=255&o[12]|(255&o[13])<<8|(255&o[14])<<16|(255&o[15])<<24,h=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,y=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,f=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,p=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,l=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,E=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,u=255&o[16]|(255&o[17])<<8|(255&o[18])<<16|(255&o[19])<<24,g=255&o[20]|(255&o[21])<<8|(255&o[22])<<16|(255&o[23])<<24,b=255&o[24]|(255&o[25])<<8|(255&o[26])<<16|(255&o[27])<<24,S=255&o[28]|(255&o[29])<<8|(255&o[30])<<16|(255&o[31])<<24,Y=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,B=0;B<20;B+=2)c^=(n=(g^=(n=(p^=(n=(_^=(n=c+g|0)<<7|n>>>25)+c|0)<<9|n>>>23)+_|0)<<13|n>>>19)+p|0)<<18|n>>>14,h^=(n=(a^=(n=(b^=(n=(l^=(n=h+a|0)<<7|n>>>25)+h|0)<<9|n>>>23)+l|0)<<13|n>>>19)+b|0)<<18|n>>>14,E^=(n=(y^=(n=(s^=(n=(S^=(n=E+y|0)<<7|n>>>25)+E|0)<<9|n>>>23)+S|0)<<13|n>>>19)+s|0)<<18|n>>>14,Y^=(n=(u^=(n=(f^=(n=(i^=(n=Y+u|0)<<7|n>>>25)+Y|0)<<9|n>>>23)+i|0)<<13|n>>>19)+f|0)<<18|n>>>14,c^=(n=(i^=(n=(s^=(n=(a^=(n=c+i|0)<<7|n>>>25)+c|0)<<9|n>>>23)+a|0)<<13|n>>>19)+s|0)<<18|n>>>14,h^=(n=(_^=(n=(f^=(n=(y^=(n=h+_|0)<<7|n>>>25)+h|0)<<9|n>>>23)+y|0)<<13|n>>>19)+f|0)<<18|n>>>14,E^=(n=(l^=(n=(p^=(n=(u^=(n=E+l|0)<<7|n>>>25)+E|0)<<9|n>>>23)+u|0)<<13|n>>>19)+p|0)<<18|n>>>14,Y^=(n=(S^=(n=(b^=(n=(g^=(n=Y+S|0)<<7|n>>>25)+Y|0)<<9|n>>>23)+g|0)<<13|n>>>19)+b|0)<<18|n>>>14;r[0]=c>>>0&255,r[1]=c>>>8&255,r[2]=c>>>16&255,r[3]=c>>>24&255,r[4]=h>>>0&255,r[5]=h>>>8&255,r[6]=h>>>16&255,r[7]=h>>>24&255,r[8]=E>>>0&255,r[9]=E>>>8&255,r[10]=E>>>16&255,r[11]=E>>>24&255,r[12]=Y>>>0&255,r[13]=Y>>>8&255,r[14]=Y>>>16&255,r[15]=Y>>>24&255,r[16]=y>>>0&255,r[17]=y>>>8&255,r[18]=y>>>16&255,r[19]=y>>>24&255,r[20]=f>>>0&255,r[21]=f>>>8&255,r[22]=f>>>16&255,r[23]=f>>>24&255,r[24]=p>>>0&255,r[25]=p>>>8&255,r[26]=p>>>16&255,r[27]=p>>>24&255,r[28]=l>>>0&255,r[29]=l>>>8&255,r[30]=l>>>16&255,r[31]=l>>>24&255}function crypto_core_salsa20(r,t,o,e){core_salsa20(r,t,o,e)}function crypto_core_hsalsa20(r,t,o,e){core_hsalsa20(r,t,o,e)}var sigma=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function crypto_stream_salsa20_xor(r,t,o,e,n,c,a){var s,i,_=new Uint8Array(16),h=new Uint8Array(64);for(i=0;i<16;i++)_[i]=0;for(i=0;i<8;i++)_[i]=c[i];for(;n>=64;){for(crypto_core_salsa20(h,_,a,sigma),i=0;i<64;i++)r[t+i]=o[e+i]^h[i];for(s=1,i=8;i<16;i++)s=s+(255&_[i])|0,_[i]=255&s,s>>>=8;n-=64,t+=64,e+=64}if(n>0)for(crypto_core_salsa20(h,_,a,sigma),i=0;i<n;i++)r[t+i]=o[e+i]^h[i];return 0}function crypto_stream_salsa20(r,t,o,e,n){var c,a,s=new Uint8Array(16),i=new Uint8Array(64);for(a=0;a<16;a++)s[a]=0;for(a=0;a<8;a++)s[a]=e[a];for(;o>=64;){for(crypto_core_salsa20(i,s,n,sigma),a=0;a<64;a++)r[t+a]=i[a];for(c=1,a=8;a<16;a++)c=c+(255&s[a])|0,s[a]=255&c,c>>>=8;o-=64,t+=64}if(o>0)for(crypto_core_salsa20(i,s,n,sigma),a=0;a<o;a++)r[t+a]=i[a];return 0}function crypto_stream(r,t,o,e,n){var c=new Uint8Array(32);crypto_core_hsalsa20(c,e,n,sigma);for(var a=new Uint8Array(8),s=0;s<8;s++)a[s]=e[s+16];return crypto_stream_salsa20(r,t,o,a,c)}function crypto_stream_xor(r,t,o,e,n,c,a){var s=new Uint8Array(32);crypto_core_hsalsa20(s,c,a,sigma);for(var i=new Uint8Array(8),_=0;_<8;_++)i[_]=c[_+16];return crypto_stream_salsa20_xor(r,t,o,e,n,i,s)}var poly1305=function(r){var t,o,e,n,c,a,s,i;this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.leftover=0,this.fin=0,t=255&r[0]|(255&r[1])<<8,this.r[0]=8191&t,o=255&r[2]|(255&r[3])<<8,this.r[1]=8191&(t>>>13|o<<3),e=255&r[4]|(255&r[5])<<8,this.r[2]=7939&(o>>>10|e<<6),n=255&r[6]|(255&r[7])<<8,this.r[3]=8191&(e>>>7|n<<9),c=255&r[8]|(255&r[9])<<8,this.r[4]=255&(n>>>4|c<<12),this.r[5]=c>>>1&8190,a=255&r[10]|(255&r[11])<<8,this.r[6]=8191&(c>>>14|a<<2),s=255&r[12]|(255&r[13])<<8,this.r[7]=8065&(a>>>11|s<<5),i=255&r[14]|(255&r[15])<<8,this.r[8]=8191&(s>>>8|i<<8),this.r[9]=i>>>5&127,this.pad[0]=255&r[16]|(255&r[17])<<8,this.pad[1]=255&r[18]|(255&r[19])<<8,this.pad[2]=255&r[20]|(255&r[21])<<8,this.pad[3]=255&r[22]|(255&r[23])<<8,this.pad[4]=255&r[24]|(255&r[25])<<8,this.pad[5]=255&r[26]|(255&r[27])<<8,this.pad[6]=255&r[28]|(255&r[29])<<8,this.pad[7]=255&r[30]|(255&r[31])<<8};function crypto_onetimeauth(r,t,o,e,n,c){var a=new poly1305(c);return a.update(o,e,n),a.finish(r,t),0}function crypto_onetimeauth_verify(r,t,o,e,n,c){var a=new Uint8Array(16);return crypto_onetimeauth(a,0,o,e,n,c),crypto_verify_16(r,t,a,0)}function crypto_secretbox(r,t,o,e,n){var c;if(o<32)return-1;for(crypto_stream_xor(r,0,t,0,o,e,n),crypto_onetimeauth(r,16,r,32,o-32,r),c=0;c<16;c++)r[c]=0;return 0}function crypto_secretbox_open(r,t,o,e,n){var c,a=new Uint8Array(32);if(o<32)return-1;if(crypto_stream(a,0,32,e,n),0!==crypto_onetimeauth_verify(t,16,t,32,o-32,a))return-1;for(crypto_stream_xor(r,0,t,0,o,e,n),c=0;c<32;c++)r[c]=0;return 0}function set25519(r,t){var o;for(o=0;o<16;o++)r[o]=0|t[o]}function car25519(r){var t,o,e=1;for(t=0;t<16;t++)o=r[t]+e+65535,e=Math.floor(o/65536),r[t]=o-65536*e;r[0]+=e-1+37*(e-1)}function sel25519(r,t,o){for(var e,n=~(o-1),c=0;c<16;c++)e=n&(r[c]^t[c]),r[c]^=e,t[c]^=e}function pack25519(r,t){var o,e,n,c=gf(),a=gf();for(o=0;o<16;o++)a[o]=t[o];for(car25519(a),car25519(a),car25519(a),e=0;e<2;e++){for(c[0]=a[0]-65517,o=1;o<15;o++)c[o]=a[o]-65535-(c[o-1]>>16&1),c[o-1]&=65535;c[15]=a[15]-32767-(c[14]>>16&1),n=c[15]>>16&1,c[14]&=65535,sel25519(a,c,1-n)}for(o=0;o<16;o++)r[2*o]=255&a[o],r[2*o+1]=a[o]>>8}function neq25519(r,t){var o=new Uint8Array(32),e=new Uint8Array(32);return pack25519(o,r),pack25519(e,t),crypto_verify_32(o,0,e,0)}function par25519(r){var t=new Uint8Array(32);return pack25519(t,r),1&t[0]}function unpack25519(r,t){var o;for(o=0;o<16;o++)r[o]=t[2*o]+(t[2*o+1]<<8);r[15]&=32767}function A(r,t,o){for(var e=0;e<16;e++)r[e]=t[e]+o[e]}function Z(r,t,o){for(var e=0;e<16;e++)r[e]=t[e]-o[e]}function M(r,t,o){var e,n,c=0,a=0,s=0,i=0,_=0,h=0,y=0,f=0,p=0,l=0,E=0,u=0,g=0,b=0,S=0,Y=0,B=0,T=0,x=0,v=0,w=0,A=0,m=0,M=0,U=0,d=0,k=0,K=0,R=0,L=0,C=0,O=o[0],Z=o[1],N=o[2],P=o[3],I=o[4],z=o[5],X=o[6],F=o[7],D=o[8],q=o[9],G=o[10],V=o[11],j=o[12],H=o[13],J=o[14],Q=o[15];c+=(e=t[0])*O,a+=e*Z,s+=e*N,i+=e*P,_+=e*I,h+=e*z,y+=e*X,f+=e*F,p+=e*D,l+=e*q,E+=e*G,u+=e*V,g+=e*j,b+=e*H,S+=e*J,Y+=e*Q,a+=(e=t[1])*O,s+=e*Z,i+=e*N,_+=e*P,h+=e*I,y+=e*z,f+=e*X,p+=e*F,l+=e*D,E+=e*q,u+=e*G,g+=e*V,b+=e*j,S+=e*H,Y+=e*J,B+=e*Q,s+=(e=t[2])*O,i+=e*Z,_+=e*N,h+=e*P,y+=e*I,f+=e*z,p+=e*X,l+=e*F,E+=e*D,u+=e*q,g+=e*G,b+=e*V,S+=e*j,Y+=e*H,B+=e*J,T+=e*Q,i+=(e=t[3])*O,_+=e*Z,h+=e*N,y+=e*P,f+=e*I,p+=e*z,l+=e*X,E+=e*F,u+=e*D,g+=e*q,b+=e*G,S+=e*V,Y+=e*j,B+=e*H,T+=e*J,x+=e*Q,_+=(e=t[4])*O,h+=e*Z,y+=e*N,f+=e*P,p+=e*I,l+=e*z,E+=e*X,u+=e*F,g+=e*D,b+=e*q,S+=e*G,Y+=e*V,B+=e*j,T+=e*H,x+=e*J,v+=e*Q,h+=(e=t[5])*O,y+=e*Z,f+=e*N,p+=e*P,l+=e*I,E+=e*z,u+=e*X,g+=e*F,b+=e*D,S+=e*q,Y+=e*G,B+=e*V,T+=e*j,x+=e*H,v+=e*J,w+=e*Q,y+=(e=t[6])*O,f+=e*Z,p+=e*N,l+=e*P,E+=e*I,u+=e*z,g+=e*X,b+=e*F,S+=e*D,Y+=e*q,B+=e*G,T+=e*V,x+=e*j,v+=e*H,w+=e*J,A+=e*Q,f+=(e=t[7])*O,p+=e*Z,l+=e*N,E+=e*P,u+=e*I,g+=e*z,b+=e*X,S+=e*F,Y+=e*D,B+=e*q,T+=e*G,x+=e*V,v+=e*j,w+=e*H,A+=e*J,m+=e*Q,p+=(e=t[8])*O,l+=e*Z,E+=e*N,u+=e*P,g+=e*I,b+=e*z,S+=e*X,Y+=e*F,B+=e*D,T+=e*q,x+=e*G,v+=e*V,w+=e*j,A+=e*H,m+=e*J,M+=e*Q,l+=(e=t[9])*O,E+=e*Z,u+=e*N,g+=e*P,b+=e*I,S+=e*z,Y+=e*X,B+=e*F,T+=e*D,x+=e*q,v+=e*G,w+=e*V,A+=e*j,m+=e*H,M+=e*J,U+=e*Q,E+=(e=t[10])*O,u+=e*Z,g+=e*N,b+=e*P,S+=e*I,Y+=e*z,B+=e*X,T+=e*F,x+=e*D,v+=e*q,w+=e*G,A+=e*V,m+=e*j,M+=e*H,U+=e*J,d+=e*Q,u+=(e=t[11])*O,g+=e*Z,b+=e*N,S+=e*P,Y+=e*I,B+=e*z,T+=e*X,x+=e*F,v+=e*D,w+=e*q,A+=e*G,m+=e*V,M+=e*j,U+=e*H,d+=e*J,k+=e*Q,g+=(e=t[12])*O,b+=e*Z,S+=e*N,Y+=e*P,B+=e*I,T+=e*z,x+=e*X,v+=e*F,w+=e*D,A+=e*q,m+=e*G,M+=e*V,U+=e*j,d+=e*H,k+=e*J,K+=e*Q,b+=(e=t[13])*O,S+=e*Z,Y+=e*N,B+=e*P,T+=e*I,x+=e*z,v+=e*X,w+=e*F,A+=e*D,m+=e*q,M+=e*G,U+=e*V,d+=e*j,k+=e*H,K+=e*J,R+=e*Q,S+=(e=t[14])*O,Y+=e*Z,B+=e*N,T+=e*P,x+=e*I,v+=e*z,w+=e*X,A+=e*F,m+=e*D,M+=e*q,U+=e*G,d+=e*V,k+=e*j,K+=e*H,R+=e*J,L+=e*Q,Y+=(e=t[15])*O,a+=38*(T+=e*N),s+=38*(x+=e*P),i+=38*(v+=e*I),_+=38*(w+=e*z),h+=38*(A+=e*X),y+=38*(m+=e*F),f+=38*(M+=e*D),p+=38*(U+=e*q),l+=38*(d+=e*G),E+=38*(k+=e*V),u+=38*(K+=e*j),g+=38*(R+=e*H),b+=38*(L+=e*J),S+=38*(C+=e*Q),c=(e=(c+=38*(B+=e*Z))+(n=1)+65535)-65536*(n=Math.floor(e/65536)),a=(e=a+n+65535)-65536*(n=Math.floor(e/65536)),s=(e=s+n+65535)-65536*(n=Math.floor(e/65536)),i=(e=i+n+65535)-65536*(n=Math.floor(e/65536)),_=(e=_+n+65535)-65536*(n=Math.floor(e/65536)),h=(e=h+n+65535)-65536*(n=Math.floor(e/65536)),y=(e=y+n+65535)-65536*(n=Math.floor(e/65536)),f=(e=f+n+65535)-65536*(n=Math.floor(e/65536)),p=(e=p+n+65535)-65536*(n=Math.floor(e/65536)),l=(e=l+n+65535)-65536*(n=Math.floor(e/65536)),E=(e=E+n+65535)-65536*(n=Math.floor(e/65536)),u=(e=u+n+65535)-65536*(n=Math.floor(e/65536)),g=(e=g+n+65535)-65536*(n=Math.floor(e/65536)),b=(e=b+n+65535)-65536*(n=Math.floor(e/65536)),S=(e=S+n+65535)-65536*(n=Math.floor(e/65536)),Y=(e=Y+n+65535)-65536*(n=Math.floor(e/65536)),c=(e=(c+=n-1+37*(n-1))+(n=1)+65535)-65536*(n=Math.floor(e/65536)),a=(e=a+n+65535)-65536*(n=Math.floor(e/65536)),s=(e=s+n+65535)-65536*(n=Math.floor(e/65536)),i=(e=i+n+65535)-65536*(n=Math.floor(e/65536)),_=(e=_+n+65535)-65536*(n=Math.floor(e/65536)),h=(e=h+n+65535)-65536*(n=Math.floor(e/65536)),y=(e=y+n+65535)-65536*(n=Math.floor(e/65536)),f=(e=f+n+65535)-65536*(n=Math.floor(e/65536)),p=(e=p+n+65535)-65536*(n=Math.floor(e/65536)),l=(e=l+n+65535)-65536*(n=Math.floor(e/65536)),E=(e=E+n+65535)-65536*(n=Math.floor(e/65536)),u=(e=u+n+65535)-65536*(n=Math.floor(e/65536)),g=(e=g+n+65535)-65536*(n=Math.floor(e/65536)),b=(e=b+n+65535)-65536*(n=Math.floor(e/65536)),S=(e=S+n+65535)-65536*(n=Math.floor(e/65536)),Y=(e=Y+n+65535)-65536*(n=Math.floor(e/65536)),c+=n-1+37*(n-1),r[0]=c,r[1]=a,r[2]=s,r[3]=i,r[4]=_,r[5]=h,r[6]=y,r[7]=f,r[8]=p,r[9]=l,r[10]=E,r[11]=u,r[12]=g,r[13]=b,r[14]=S,r[15]=Y}function S(r,t){M(r,t,t)}function inv25519(r,t){var o,e=gf();for(o=0;o<16;o++)e[o]=t[o];for(o=253;o>=0;o--)S(e,e),2!==o&&4!==o&&M(e,e,t);for(o=0;o<16;o++)r[o]=e[o]}function pow2523(r,t){var o,e=gf();for(o=0;o<16;o++)e[o]=t[o];for(o=250;o>=0;o--)S(e,e),1!==o&&M(e,e,t);for(o=0;o<16;o++)r[o]=e[o]}function crypto_scalarmult(r,t,o){var e,n,c=new Uint8Array(32),a=new Float64Array(80),s=gf(),i=gf(),_=gf(),h=gf(),y=gf(),f=gf();for(n=0;n<31;n++)c[n]=t[n];for(c[31]=127&t[31]|64,c[0]&=248,unpack25519(a,o),n=0;n<16;n++)i[n]=a[n],h[n]=s[n]=_[n]=0;for(s[0]=h[0]=1,n=254;n>=0;--n)sel25519(s,i,e=c[n>>>3]>>>(7&n)&1),sel25519(_,h,e),A(y,s,_),Z(s,s,_),A(_,i,h),Z(i,i,h),S(h,y),S(f,s),M(s,_,s),M(_,i,y),A(y,s,_),Z(s,s,_),S(i,s),Z(_,h,f),M(s,_,_121665),A(s,s,h),M(_,_,s),M(s,h,f),M(h,i,a),S(i,y),sel25519(s,i,e),sel25519(_,h,e);for(n=0;n<16;n++)a[n+16]=s[n],a[n+32]=_[n],a[n+48]=i[n],a[n+64]=h[n];var p=a.subarray(32),l=a.subarray(16);return inv25519(p,p),M(l,l,p),pack25519(r,l),0}function crypto_scalarmult_base(r,t){return crypto_scalarmult(r,t,_9)}function crypto_box_keypair(r,t){return randombytes(t,32),crypto_scalarmult_base(r,t)}function crypto_box_beforenm(r,t,o){var e=new Uint8Array(32);return crypto_scalarmult(e,o,t),crypto_core_hsalsa20(r,_0,e,sigma)}poly1305.prototype.blocks=function(r,t,o){for(var e,n,c,a,s,i,_,h,y,f,p,l,E,u,g,b,S,Y,B,T=this.fin?0:2048,x=this.h[0],v=this.h[1],w=this.h[2],A=this.h[3],m=this.h[4],M=this.h[5],U=this.h[6],d=this.h[7],k=this.h[8],K=this.h[9],R=this.r[0],L=this.r[1],C=this.r[2],O=this.r[3],Z=this.r[4],N=this.r[5],P=this.r[6],I=this.r[7],z=this.r[8],X=this.r[9];o>=16;)f=y=0,f+=(x+=8191&(e=255&r[t+0]|(255&r[t+1])<<8))*R,f+=(v+=8191&(e>>>13|(n=255&r[t+2]|(255&r[t+3])<<8)<<3))*(5*X),f+=(w+=8191&(n>>>10|(c=255&r[t+4]|(255&r[t+5])<<8)<<6))*(5*z),f+=(A+=8191&(c>>>7|(a=255&r[t+6]|(255&r[t+7])<<8)<<9))*(5*I),y=(f+=(m+=8191&(a>>>4|(s=255&r[t+8]|(255&r[t+9])<<8)<<12))*(5*P))>>>13,f&=8191,f+=(M+=s>>>1&8191)*(5*N),f+=(U+=8191&(s>>>14|(i=255&r[t+10]|(255&r[t+11])<<8)<<2))*(5*Z),f+=(d+=8191&(i>>>11|(_=255&r[t+12]|(255&r[t+13])<<8)<<5))*(5*O),f+=(k+=8191&(_>>>8|(h=255&r[t+14]|(255&r[t+15])<<8)<<8))*(5*C),p=y+=(f+=(K+=h>>>5|T)*(5*L))>>>13,p+=x*L,p+=v*R,p+=w*(5*X),p+=A*(5*z),y=(p+=m*(5*I))>>>13,p&=8191,p+=M*(5*P),p+=U*(5*N),p+=d*(5*Z),p+=k*(5*O),y+=(p+=K*(5*C))>>>13,p&=8191,l=y,l+=x*C,l+=v*L,l+=w*R,l+=A*(5*X),y=(l+=m*(5*z))>>>13,l&=8191,l+=M*(5*I),l+=U*(5*P),l+=d*(5*N),l+=k*(5*Z),E=y+=(l+=K*(5*O))>>>13,E+=x*O,E+=v*C,E+=w*L,E+=A*R,y=(E+=m*(5*X))>>>13,E&=8191,E+=M*(5*z),E+=U*(5*I),E+=d*(5*P),E+=k*(5*N),u=y+=(E+=K*(5*Z))>>>13,u+=x*Z,u+=v*O,u+=w*C,u+=A*L,y=(u+=m*R)>>>13,u&=8191,u+=M*(5*X),u+=U*(5*z),u+=d*(5*I),u+=k*(5*P),g=y+=(u+=K*(5*N))>>>13,g+=x*N,g+=v*Z,g+=w*O,g+=A*C,y=(g+=m*L)>>>13,g&=8191,g+=M*R,g+=U*(5*X),g+=d*(5*z),g+=k*(5*I),b=y+=(g+=K*(5*P))>>>13,b+=x*P,b+=v*N,b+=w*Z,b+=A*O,y=(b+=m*C)>>>13,b&=8191,b+=M*L,b+=U*R,b+=d*(5*X),b+=k*(5*z),S=y+=(b+=K*(5*I))>>>13,S+=x*I,S+=v*P,S+=w*N,S+=A*Z,y=(S+=m*O)>>>13,S&=8191,S+=M*C,S+=U*L,S+=d*R,S+=k*(5*X),Y=y+=(S+=K*(5*z))>>>13,Y+=x*z,Y+=v*I,Y+=w*P,Y+=A*N,y=(Y+=m*Z)>>>13,Y&=8191,Y+=M*O,Y+=U*C,Y+=d*L,Y+=k*R,B=y+=(Y+=K*(5*X))>>>13,B+=x*X,B+=v*z,B+=w*I,B+=A*P,y=(B+=m*N)>>>13,B&=8191,B+=M*Z,B+=U*O,B+=d*C,B+=k*L,x=f=8191&(y=(y=((y+=(B+=K*R)>>>13)<<2)+y|0)+(f&=8191)|0),v=p+=y>>>=13,w=l&=8191,A=E&=8191,m=u&=8191,M=g&=8191,U=b&=8191,d=S&=8191,k=Y&=8191,K=B&=8191,t+=16,o-=16;this.h[0]=x,this.h[1]=v,this.h[2]=w,this.h[3]=A,this.h[4]=m,this.h[5]=M,this.h[6]=U,this.h[7]=d,this.h[8]=k,this.h[9]=K},poly1305.prototype.finish=function(r,t){var o,e,n,c,a=new Uint16Array(10);if(this.leftover){for(c=this.leftover,this.buffer[c++]=1;c<16;c++)this.buffer[c]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(o=this.h[1]>>>13,this.h[1]&=8191,c=2;c<10;c++)this.h[c]+=o,o=this.h[c]>>>13,this.h[c]&=8191;for(this.h[0]+=5*o,o=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=o,o=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=o,a[0]=this.h[0]+5,o=a[0]>>>13,a[0]&=8191,c=1;c<10;c++)a[c]=this.h[c]+o,o=a[c]>>>13,a[c]&=8191;for(a[9]-=8192,e=(1^o)-1,c=0;c<10;c++)a[c]&=e;for(e=~e,c=0;c<10;c++)this.h[c]=this.h[c]&e|a[c];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),n=this.h[0]+this.pad[0],this.h[0]=65535&n,c=1;c<8;c++)n=(this.h[c]+this.pad[c]|0)+(n>>>16)|0,this.h[c]=65535&n;r[t+0]=this.h[0]>>>0&255,r[t+1]=this.h[0]>>>8&255,r[t+2]=this.h[1]>>>0&255,r[t+3]=this.h[1]>>>8&255,r[t+4]=this.h[2]>>>0&255,r[t+5]=this.h[2]>>>8&255,r[t+6]=this.h[3]>>>0&255,r[t+7]=this.h[3]>>>8&255,r[t+8]=this.h[4]>>>0&255,r[t+9]=this.h[4]>>>8&255,r[t+10]=this.h[5]>>>0&255,r[t+11]=this.h[5]>>>8&255,r[t+12]=this.h[6]>>>0&255,r[t+13]=this.h[6]>>>8&255,r[t+14]=this.h[7]>>>0&255,r[t+15]=this.h[7]>>>8&255},poly1305.prototype.update=function(r,t,o){var e,n;if(this.leftover){for((n=16-this.leftover)>o&&(n=o),e=0;e<n;e++)this.buffer[this.leftover+e]=r[t+e];if(o-=n,t+=n,this.leftover+=n,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(o>=16&&(n=o-o%16,this.blocks(r,t,n),t+=n,o-=n),o){for(e=0;e<o;e++)this.buffer[this.leftover+e]=r[t+e];this.leftover+=o}};var crypto_box_afternm=crypto_secretbox,crypto_box_open_afternm=crypto_secretbox_open;function crypto_box(r,t,o,e,n,c){var a=new Uint8Array(32);return crypto_box_beforenm(a,n,c),crypto_box_afternm(r,t,o,e,a)}function crypto_box_open(r,t,o,e,n,c){var a=new Uint8Array(32);return crypto_box_beforenm(a,n,c),crypto_box_open_afternm(r,t,o,e,a)}var K=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function crypto_hashblocks_hl(r,t,o,e){for(var n,c,a,s,i,_,h,y,f,p,l,E,u,g,b,S,Y,B,T,x,v,w,A,m,M,U,d=new Int32Array(16),k=new Int32Array(16),R=r[0],L=r[1],C=r[2],O=r[3],Z=r[4],N=r[5],P=r[6],I=r[7],z=t[0],X=t[1],F=t[2],D=t[3],q=t[4],G=t[5],V=t[6],j=t[7],H=0;e>=128;){for(T=0;T<16;T++)x=8*T+H,d[T]=o[x+0]<<24|o[x+1]<<16|o[x+2]<<8|o[x+3],k[T]=o[x+4]<<24|o[x+5]<<16|o[x+6]<<8|o[x+7];for(T=0;T<80;T++)if(n=R,c=L,a=C,s=O,i=Z,_=N,h=P,I,f=z,p=X,l=F,E=D,u=q,g=G,b=V,j,A=65535&(w=j),m=w>>>16,M=65535&(v=I),U=v>>>16,A+=65535&(w=(q>>>14|Z<<18)^(q>>>18|Z<<14)^(Z>>>9|q<<23)),m+=w>>>16,M+=65535&(v=(Z>>>14|q<<18)^(Z>>>18|q<<14)^(q>>>9|Z<<23)),U+=v>>>16,A+=65535&(w=q&G^~q&V),m+=w>>>16,M+=65535&(v=Z&N^~Z&P),U+=v>>>16,v=K[2*T],A+=65535&(w=K[2*T+1]),m+=w>>>16,M+=65535&v,U+=v>>>16,v=d[T%16],m+=(w=k[T%16])>>>16,M+=65535&v,U+=v>>>16,M+=(m+=(A+=65535&w)>>>16)>>>16,A=65535&(w=B=65535&A|m<<16),m=w>>>16,M=65535&(v=Y=65535&M|(U+=M>>>16)<<16),U=v>>>16,A+=65535&(w=(z>>>28|R<<4)^(R>>>2|z<<30)^(R>>>7|z<<25)),m+=w>>>16,M+=65535&(v=(R>>>28|z<<4)^(z>>>2|R<<30)^(z>>>7|R<<25)),U+=v>>>16,m+=(w=z&X^z&F^X&F)>>>16,M+=65535&(v=R&L^R&C^L&C),U+=v>>>16,y=65535&(M+=(m+=(A+=65535&w)>>>16)>>>16)|(U+=M>>>16)<<16,S=65535&A|m<<16,A=65535&(w=E),m=w>>>16,M=65535&(v=s),U=v>>>16,m+=(w=B)>>>16,M+=65535&(v=Y),U+=v>>>16,L=n,C=c,O=a,Z=s=65535&(M+=(m+=(A+=65535&w)>>>16)>>>16)|(U+=M>>>16)<<16,N=i,P=_,I=h,R=y,X=f,F=p,D=l,q=E=65535&A|m<<16,G=u,V=g,j=b,z=S,T%16==15)for(x=0;x<16;x++)v=d[x],A=65535&(w=k[x]),m=w>>>16,M=65535&v,U=v>>>16,v=d[(x+9)%16],A+=65535&(w=k[(x+9)%16]),m+=w>>>16,M+=65535&v,U+=v>>>16,Y=d[(x+1)%16],A+=65535&(w=((B=k[(x+1)%16])>>>1|Y<<31)^(B>>>8|Y<<24)^(B>>>7|Y<<25)),m+=w>>>16,M+=65535&(v=(Y>>>1|B<<31)^(Y>>>8|B<<24)^Y>>>7),U+=v>>>16,Y=d[(x+14)%16],m+=(w=((B=k[(x+14)%16])>>>19|Y<<13)^(Y>>>29|B<<3)^(B>>>6|Y<<26))>>>16,M+=65535&(v=(Y>>>19|B<<13)^(B>>>29|Y<<3)^Y>>>6),U+=v>>>16,U+=(M+=(m+=(A+=65535&w)>>>16)>>>16)>>>16,d[x]=65535&M|U<<16,k[x]=65535&A|m<<16;A=65535&(w=z),m=w>>>16,M=65535&(v=R),U=v>>>16,v=r[0],m+=(w=t[0])>>>16,M+=65535&v,U+=v>>>16,U+=(M+=(m+=(A+=65535&w)>>>16)>>>16)>>>16,r[0]=R=65535&M|U<<16,t[0]=z=65535&A|m<<16,A=65535&(w=X),m=w>>>16,M=65535&(v=L),U=v>>>16,v=r[1],m+=(w=t[1])>>>16,M+=65535&v,U+=v>>>16,U+=(M+=(m+=(A+=65535&w)>>>16)>>>16)>>>16,r[1]=L=65535&M|U<<16,t[1]=X=65535&A|m<<16,A=65535&(w=F),m=w>>>16,M=65535&(v=C),U=v>>>16,v=r[2],m+=(w=t[2])>>>16,M+=65535&v,U+=v>>>16,U+=(M+=(m+=(A+=65535&w)>>>16)>>>16)>>>16,r[2]=C=65535&M|U<<16,t[2]=F=65535&A|m<<16,A=65535&(w=D),m=w>>>16,M=65535&(v=O),U=v>>>16,v=r[3],m+=(w=t[3])>>>16,M+=65535&v,U+=v>>>16,U+=(M+=(m+=(A+=65535&w)>>>16)>>>16)>>>16,r[3]=O=65535&M|U<<16,t[3]=D=65535&A|m<<16,A=65535&(w=q),m=w>>>16,M=65535&(v=Z),U=v>>>16,v=r[4],m+=(w=t[4])>>>16,M+=65535&v,U+=v>>>16,U+=(M+=(m+=(A+=65535&w)>>>16)>>>16)>>>16,r[4]=Z=65535&M|U<<16,t[4]=q=65535&A|m<<16,A=65535&(w=G),m=w>>>16,M=65535&(v=N),U=v>>>16,v=r[5],m+=(w=t[5])>>>16,M+=65535&v,U+=v>>>16,U+=(M+=(m+=(A+=65535&w)>>>16)>>>16)>>>16,r[5]=N=65535&M|U<<16,t[5]=G=65535&A|m<<16,A=65535&(w=V),m=w>>>16,M=65535&(v=P),U=v>>>16,v=r[6],m+=(w=t[6])>>>16,M+=65535&v,U+=v>>>16,U+=(M+=(m+=(A+=65535&w)>>>16)>>>16)>>>16,r[6]=P=65535&M|U<<16,t[6]=V=65535&A|m<<16,A=65535&(w=j),m=w>>>16,M=65535&(v=I),U=v>>>16,v=r[7],m+=(w=t[7])>>>16,M+=65535&v,U+=v>>>16,U+=(M+=(m+=(A+=65535&w)>>>16)>>>16)>>>16,r[7]=I=65535&M|U<<16,t[7]=j=65535&A|m<<16,H+=128,e-=128}return e}function crypto_hash(r,t,o){var e,n=new Int32Array(8),c=new Int32Array(8),a=new Uint8Array(256),s=o;for(n[0]=1779033703,n[1]=3144134277,n[2]=1013904242,n[3]=2773480762,n[4]=1359893119,n[5]=2600822924,n[6]=528734635,n[7]=1541459225,c[0]=4089235720,c[1]=2227873595,c[2]=4271175723,c[3]=1595750129,c[4]=2917565137,c[5]=725511199,c[6]=4215389547,c[7]=327033209,crypto_hashblocks_hl(n,c,t,o),o%=128,e=0;e<o;e++)a[e]=t[s-o+e];for(a[o]=128,a[(o=256-128*(o<112?1:0))-9]=0,ts64(a,o-8,s/536870912|0,s<<3),crypto_hashblocks_hl(n,c,a,o),e=0;e<8;e++)ts64(r,8*e,n[e],c[e]);return 0}function add(r,t){var o=gf(),e=gf(),n=gf(),c=gf(),a=gf(),s=gf(),i=gf(),_=gf(),h=gf();Z(o,r[1],r[0]),Z(h,t[1],t[0]),M(o,o,h),A(e,r[0],r[1]),A(h,t[0],t[1]),M(e,e,h),M(n,r[3],t[3]),M(n,n,D2),M(c,r[2],t[2]),A(c,c,c),Z(a,e,o),Z(s,c,n),A(i,c,n),A(_,e,o),M(r[0],a,s),M(r[1],_,i),M(r[2],i,s),M(r[3],a,_)}function cswap(r,t,o){var e;for(e=0;e<4;e++)sel25519(r[e],t[e],o)}function pack(r,t){var o=gf(),e=gf(),n=gf();inv25519(n,t[2]),M(o,t[0],n),M(e,t[1],n),pack25519(r,e),r[31]^=par25519(o)<<7}function scalarmult(r,t,o){var e,n;for(set25519(r[0],gf0),set25519(r[1],gf1),set25519(r[2],gf1),set25519(r[3],gf0),n=255;n>=0;--n)cswap(r,t,e=o[n/8|0]>>(7&n)&1),add(t,r),add(r,r),cswap(r,t,e)}function scalarbase(r,t){var o=[gf(),gf(),gf(),gf()];set25519(o[0],X),set25519(o[1],Y),set25519(o[2],gf1),M(o[3],X,Y),scalarmult(r,o,t)}function crypto_sign_keypair(r,t,o){var e,n=new Uint8Array(64),c=[gf(),gf(),gf(),gf()];for(o||randombytes(t,32),crypto_hash(n,t,32),n[0]&=248,n[31]&=127,n[31]|=64,scalarbase(c,n),pack(r,c),e=0;e<32;e++)t[e+32]=r[e];return 0}var L=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function modL(r,t){var o,e,n,c;for(e=63;e>=32;--e){for(o=0,n=e-32,c=e-12;n<c;++n)t[n]+=o-16*t[e]*L[n-(e-32)],o=t[n]+128>>8,t[n]-=256*o;t[n]+=o,t[e]=0}for(o=0,n=0;n<32;n++)t[n]+=o-(t[31]>>4)*L[n],o=t[n]>>8,t[n]&=255;for(n=0;n<32;n++)t[n]-=o*L[n];for(e=0;e<32;e++)t[e+1]+=t[e]>>8,r[e]=255&t[e]}function reduce(r){var t,o=new Float64Array(64);for(t=0;t<64;t++)o[t]=r[t];for(t=0;t<64;t++)r[t]=0;modL(r,o)}function crypto_sign(r,t,o,e){var n,c,a=new Uint8Array(64),s=new Uint8Array(64),i=new Uint8Array(64),_=new Float64Array(64),h=[gf(),gf(),gf(),gf()];crypto_hash(a,e,32),a[0]&=248,a[31]&=127,a[31]|=64;var y=o+64;for(n=0;n<o;n++)r[64+n]=t[n];for(n=0;n<32;n++)r[32+n]=a[32+n];for(crypto_hash(i,r.subarray(32),o+32),reduce(i),scalarbase(h,i),pack(r,h),n=32;n<64;n++)r[n]=e[n];for(crypto_hash(s,r,o+64),reduce(s),n=0;n<64;n++)_[n]=0;for(n=0;n<32;n++)_[n]=i[n];for(n=0;n<32;n++)for(c=0;c<32;c++)_[n+c]+=s[n]*a[c];return modL(r.subarray(32),_),y}function unpackneg(r,t){var o=gf(),e=gf(),n=gf(),c=gf(),a=gf(),s=gf(),i=gf();return set25519(r[2],gf1),unpack25519(r[1],t),S(n,r[1]),M(c,n,D),Z(n,n,r[2]),A(c,r[2],c),S(a,c),S(s,a),M(i,s,a),M(o,i,n),M(o,o,c),pow2523(o,o),M(o,o,n),M(o,o,c),M(o,o,c),M(r[0],o,c),S(e,r[0]),M(e,e,c),neq25519(e,n)&&M(r[0],r[0],I),S(e,r[0]),M(e,e,c),neq25519(e,n)?-1:(par25519(r[0])===t[31]>>7&&Z(r[0],gf0,r[0]),M(r[3],r[0],r[1]),0)}function crypto_sign_open(r,t,o,e){var n,c=new Uint8Array(32),a=new Uint8Array(64),s=[gf(),gf(),gf(),gf()],i=[gf(),gf(),gf(),gf()];if(o<64)return-1;if(unpackneg(i,e))return-1;for(n=0;n<o;n++)r[n]=t[n];for(n=0;n<32;n++)r[n+32]=e[n];if(crypto_hash(a,r,o),reduce(a),scalarmult(s,i,a),scalarbase(i,t.subarray(32)),add(s,i),pack(c,s),o-=64,crypto_verify_32(t,0,c,0)){for(n=0;n<o;n++)r[n]=0;return-1}for(n=0;n<o;n++)r[n]=t[n+64];return o}var crypto_secretbox_KEYBYTES=32,crypto_secretbox_NONCEBYTES=24,crypto_secretbox_ZEROBYTES=32,crypto_secretbox_BOXZEROBYTES=16,crypto_scalarmult_BYTES=32,crypto_scalarmult_SCALARBYTES=32,crypto_box_PUBLICKEYBYTES=32,crypto_box_SECRETKEYBYTES=32,crypto_box_BEFORENMBYTES=32,crypto_box_NONCEBYTES=crypto_secretbox_NONCEBYTES,crypto_box_ZEROBYTES=crypto_secretbox_ZEROBYTES,crypto_box_BOXZEROBYTES=crypto_secretbox_BOXZEROBYTES,crypto_sign_BYTES=64,crypto_sign_PUBLICKEYBYTES=32,crypto_sign_SECRETKEYBYTES=64,crypto_sign_SEEDBYTES=32,crypto_hash_BYTES=64;function checkLengths(r,t){if(r.length!==crypto_secretbox_KEYBYTES)throw new Error("bad key size");if(t.length!==crypto_secretbox_NONCEBYTES)throw new Error("bad nonce size")}function checkBoxLengths(r,t){if(r.length!==crypto_box_PUBLICKEYBYTES)throw new Error("bad public key size");if(t.length!==crypto_box_SECRETKEYBYTES)throw new Error("bad secret key size")}function checkArrayTypes(){for(var r=0;r<arguments.length;r++)if(!(arguments[r]instanceof Uint8Array))throw new TypeError("unexpected type, use Uint8Array")}function cleanup(r){for(var t=0;t<r.length;t++)r[t]=0}nacl.lowlevel={crypto_core_hsalsa20:crypto_core_hsalsa20,crypto_stream_xor:crypto_stream_xor,crypto_stream:crypto_stream,crypto_stream_salsa20_xor:crypto_stream_salsa20_xor,crypto_stream_salsa20:crypto_stream_salsa20,crypto_onetimeauth:crypto_onetimeauth,crypto_onetimeauth_verify:crypto_onetimeauth_verify,crypto_verify_16:crypto_verify_16,crypto_verify_32:crypto_verify_32,crypto_secretbox:crypto_secretbox,crypto_secretbox_open:crypto_secretbox_open,crypto_scalarmult:crypto_scalarmult,crypto_scalarmult_base:crypto_scalarmult_base,crypto_box_beforenm:crypto_box_beforenm,crypto_box_afternm:crypto_box_afternm,crypto_box:crypto_box,crypto_box_open:crypto_box_open,crypto_box_keypair:crypto_box_keypair,crypto_hash:crypto_hash,crypto_sign:crypto_sign,crypto_sign_keypair:crypto_sign_keypair,crypto_sign_open:crypto_sign_open,crypto_secretbox_KEYBYTES:crypto_secretbox_KEYBYTES,crypto_secretbox_NONCEBYTES:crypto_secretbox_NONCEBYTES,crypto_secretbox_ZEROBYTES:crypto_secretbox_ZEROBYTES,crypto_secretbox_BOXZEROBYTES:crypto_secretbox_BOXZEROBYTES,crypto_scalarmult_BYTES:crypto_scalarmult_BYTES,crypto_scalarmult_SCALARBYTES:crypto_scalarmult_SCALARBYTES,crypto_box_PUBLICKEYBYTES:crypto_box_PUBLICKEYBYTES,crypto_box_SECRETKEYBYTES:crypto_box_SECRETKEYBYTES,crypto_box_BEFORENMBYTES:crypto_box_BEFORENMBYTES,crypto_box_NONCEBYTES:crypto_box_NONCEBYTES,crypto_box_ZEROBYTES:crypto_box_ZEROBYTES,crypto_box_BOXZEROBYTES:crypto_box_BOXZEROBYTES,crypto_sign_BYTES:crypto_sign_BYTES,crypto_sign_PUBLICKEYBYTES:crypto_sign_PUBLICKEYBYTES,crypto_sign_SECRETKEYBYTES:crypto_sign_SECRETKEYBYTES,crypto_sign_SEEDBYTES:crypto_sign_SEEDBYTES,crypto_hash_BYTES:crypto_hash_BYTES},nacl.randomBytes=function(r){var t=new Uint8Array(r);return randombytes(t,r),t},nacl.secretbox=function(r,t,o){checkArrayTypes(r,t,o),checkLengths(o,t);for(var e=new Uint8Array(crypto_secretbox_ZEROBYTES+r.length),n=new Uint8Array(e.length),c=0;c<r.length;c++)e[c+crypto_secretbox_ZEROBYTES]=r[c];return crypto_secretbox(n,e,e.length,t,o),n.subarray(crypto_secretbox_BOXZEROBYTES)},nacl.secretbox.open=function(r,t,o){checkArrayTypes(r,t,o),checkLengths(o,t);for(var e=new Uint8Array(crypto_secretbox_BOXZEROBYTES+r.length),n=new Uint8Array(e.length),c=0;c<r.length;c++)e[c+crypto_secretbox_BOXZEROBYTES]=r[c];return e.length<32?null:0!==crypto_secretbox_open(n,e,e.length,t,o)?null:n.subarray(crypto_secretbox_ZEROBYTES)},nacl.secretbox.keyLength=crypto_secretbox_KEYBYTES,nacl.secretbox.nonceLength=crypto_secretbox_NONCEBYTES,nacl.secretbox.overheadLength=crypto_secretbox_BOXZEROBYTES,nacl.scalarMult=function(r,t){if(checkArrayTypes(r,t),r.length!==crypto_scalarmult_SCALARBYTES)throw new Error("bad n size");if(t.length!==crypto_scalarmult_BYTES)throw new Error("bad p size");var o=new Uint8Array(crypto_scalarmult_BYTES);return crypto_scalarmult(o,r,t),o},nacl.scalarMult.base=function(r){if(checkArrayTypes(r),r.length!==crypto_scalarmult_SCALARBYTES)throw new Error("bad n size");var t=new Uint8Array(crypto_scalarmult_BYTES);return crypto_scalarmult_base(t,r),t},nacl.scalarMult.scalarLength=crypto_scalarmult_SCALARBYTES,nacl.scalarMult.groupElementLength=crypto_scalarmult_BYTES,nacl.box=function(r,t,o,e){var n=nacl.box.before(o,e);return nacl.secretbox(r,t,n)},nacl.box.before=function(r,t){checkArrayTypes(r,t),checkBoxLengths(r,t);var o=new Uint8Array(crypto_box_BEFORENMBYTES);return crypto_box_beforenm(o,r,t),o},nacl.box.after=nacl.secretbox,nacl.box.open=function(r,t,o,e){var n=nacl.box.before(o,e);return nacl.secretbox.open(r,t,n)},nacl.box.open.after=nacl.secretbox.open,nacl.box.keyPair=function(){var r=new Uint8Array(crypto_box_PUBLICKEYBYTES),t=new Uint8Array(crypto_box_SECRETKEYBYTES);return crypto_box_keypair(r,t),{publicKey:r,secretKey:t}},nacl.box.keyPair.fromSecretKey=function(r){if(checkArrayTypes(r),r.length!==crypto_box_SECRETKEYBYTES)throw new Error("bad secret key size");var t=new Uint8Array(crypto_box_PUBLICKEYBYTES);return crypto_scalarmult_base(t,r),{publicKey:t,secretKey:new Uint8Array(r)}},nacl.box.publicKeyLength=crypto_box_PUBLICKEYBYTES,nacl.box.secretKeyLength=crypto_box_SECRETKEYBYTES,nacl.box.sharedKeyLength=crypto_box_BEFORENMBYTES,nacl.box.nonceLength=crypto_box_NONCEBYTES,nacl.box.overheadLength=nacl.secretbox.overheadLength,nacl.sign=function(r,t){if(checkArrayTypes(r,t),t.length!==crypto_sign_SECRETKEYBYTES)throw new Error("bad secret key size");var o=new Uint8Array(crypto_sign_BYTES+r.length);return crypto_sign(o,r,r.length,t),o},nacl.sign.open=function(r,t){if(checkArrayTypes(r,t),t.length!==crypto_sign_PUBLICKEYBYTES)throw new Error("bad public key size");var o=new Uint8Array(r.length),e=crypto_sign_open(o,r,r.length,t);if(e<0)return null;for(var n=new Uint8Array(e),c=0;c<n.length;c++)n[c]=o[c];return n},nacl.sign.detached=function(r,t){for(var o=nacl.sign(r,t),e=new Uint8Array(crypto_sign_BYTES),n=0;n<e.length;n++)e[n]=o[n];return e},nacl.sign.detached.verify=function(r,t,o){if(checkArrayTypes(r,t,o),t.length!==crypto_sign_BYTES)throw new Error("bad signature size");if(o.length!==crypto_sign_PUBLICKEYBYTES)throw new Error("bad public key size");var e,n=new Uint8Array(crypto_sign_BYTES+r.length),c=new Uint8Array(crypto_sign_BYTES+r.length);for(e=0;e<crypto_sign_BYTES;e++)n[e]=t[e];for(e=0;e<r.length;e++)n[e+crypto_sign_BYTES]=r[e];return crypto_sign_open(c,n,n.length,o)>=0},nacl.sign.keyPair=function(){var r=new Uint8Array(crypto_sign_PUBLICKEYBYTES),t=new Uint8Array(crypto_sign_SECRETKEYBYTES);return crypto_sign_keypair(r,t),{publicKey:r,secretKey:t}},nacl.sign.keyPair.fromSecretKey=function(r){if(checkArrayTypes(r),r.length!==crypto_sign_SECRETKEYBYTES)throw new Error("bad secret key size");for(var t=new Uint8Array(crypto_sign_PUBLICKEYBYTES),o=0;o<t.length;o++)t[o]=r[32+o];return{publicKey:t,secretKey:new Uint8Array(r)}},nacl.sign.keyPair.fromSeed=function(r){if(checkArrayTypes(r),r.length!==crypto_sign_SEEDBYTES)throw new Error("bad seed size");for(var t=new Uint8Array(crypto_sign_PUBLICKEYBYTES),o=new Uint8Array(crypto_sign_SECRETKEYBYTES),e=0;e<32;e++)o[e]=r[e];return crypto_sign_keypair(t,o,!0),{publicKey:t,secretKey:o}},nacl.sign.publicKeyLength=crypto_sign_PUBLICKEYBYTES,nacl.sign.secretKeyLength=crypto_sign_SECRETKEYBYTES,nacl.sign.seedLength=crypto_sign_SEEDBYTES,nacl.sign.signatureLength=crypto_sign_BYTES,nacl.hash=function(r){checkArrayTypes(r);var t=new Uint8Array(crypto_hash_BYTES);return crypto_hash(t,r,r.length),t},nacl.hash.hashLength=crypto_hash_BYTES,nacl.verify=function(r,t){return checkArrayTypes(r,t),0!==r.length&&0!==t.length&&(r.length===t.length&&0===vn(r,0,t,0,r.length))},nacl.setPRNG=function(r){randombytes=r},function(){var r="undefined"!=typeof self?self.crypto||self.msCrypto:null;if(r&&r.getRandomValues){nacl.setPRNG(function(t,o){var e,n=new Uint8Array(o);for(e=0;e<o;e+=65536)r.getRandomValues(n.subarray(e,e+Math.min(o-e,65536)));for(e=0;e<o;e++)t[e]=n[e];cleanup(n)})}else"undefined"!=typeof require&&(r=require("crypto"))&&r.randomBytes&&nacl.setPRNG(function(t,o){var e,n=r.randomBytes(o);for(e=0;e<o;e++)t[e]=n[e];cleanup(n)})}(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment