Skip to content

Instantly share code, notes, and snippets.

@anadius
Created February 24, 2021 18:31
Show Gist options
  • Save anadius/11260db3a66dab0d6ff0d3277e2ca470 to your computer and use it in GitHub Desktop.
Save anadius/11260db3a66dab0d6ff0d3277e2ca470 to your computer and use it in GitHub Desktop.
Discord Slash Commands on Cloudflare Workers
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