-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathnacl-stream.min.js
1 lines (1 loc) · 2.71 KB
/
nacl-stream.min.js
1
!function(t,n){"use strict";"undefined"!=typeof module&&module.exports?module.exports.stream=n(require("tweetnacl")):t.nacl.stream=n(t.nacl)}(this,function(t){"use strict";function n(t){for(var n=16;n<24&&(t[n]++,!t[n]);n++);}function e(t){t[23]|=128}function r(){for(var t=0;t<arguments.length;t++)for(var n=arguments[t],e=0;e<n.length;e++)n[e]=0}function i(t,n){return n|=0,t.length<n+4?-1:t[n]|t[n+1]<<8|t[n+2]<<16|t[n+3]<<24}function h(t,n,e){if(32!==t.length)throw new Error("bad key length, must be 32 bytes");if(16!==n.length)throw new Error("bad nonce length, must be 16 bytes");if(e>=4294967295)throw new Error("max chunk length is too large");if(e<16)throw new Error("max chunk length is too small")}function o(t,n,e){h(t,n,e),this._key=t,this._fullNonce=new Uint8Array(24),this._fullNonce.set(n),this._maxChunkLength=e||l,this._in=new Uint8Array(u+this._maxChunkLength),this._out=new Uint8Array(u+this._maxChunkLength),this._done=!1}function s(t,n,e){h(t,n,e),this._key=t,this._fullNonce=new Uint8Array(24),this._fullNonce.set(n),this._maxChunkLength=e||l,this._in=new Uint8Array(u+this._maxChunkLength),this._out=new Uint8Array(u+this._maxChunkLength),this._failed=!1,this._done=!1}if(!t)throw new Error("tweetnacl not loaded");var l=65535,u=t.lowlevel.crypto_secretbox_ZEROBYTES,a=t.lowlevel.crypto_secretbox_BOXZEROBYTES,_=t.lowlevel.crypto_secretbox,c=t.lowlevel.crypto_secretbox_open;return o.prototype.encryptChunk=function(t,r){if(this._done)throw new Error("called encryptChunk after last chunk");var i=t.length;if(i>this._maxChunkLength)throw new Error("chunk is too large: "+i+" / "+this._maxChunkLength);for(var h=0;h<u;h++)this._in[h]=0;this._in.set(t,u),r&&(e(this._fullNonce),this._done=!0),_(this._out,this._in,i+u,this._fullNonce,this._key),n(this._fullNonce);var o=this._out.subarray(a-4,a-4+i+16+4);return o[0]=i>>>0&255,o[1]=i>>>8&255,o[2]=i>>>16&255,o[3]=i>>>24&255,new Uint8Array(o)},o.prototype.clean=function(){r(this._fullNonce,this._in,this._out)},s.prototype._fail=function(){return this._failed=!0,this.clean(),null},s.prototype.decryptChunk=function(t,r){if(this._failed)return null;if(this._done)throw new Error("called decryptChunk after last chunk");var h=t.length;if(h<4+a)return this._fail();var o=i(t);if(o<0||o>this._maxChunkLength)return this._fail();if(o+4+a!==h)return this._fail();for(var s=0;s<a;s++)this._in[s]=0;for(s=0;s<h-4;s++)this._in[a+s]=t[s+4];return r&&(e(this._fullNonce),this._done=!0),0!==c(this._out,this._in,h+a-4,this._fullNonce,this._key)?this._fail():(n(this._fullNonce),new Uint8Array(this._out.subarray(u,u+o)))},s.prototype.clean=function(){r(this._fullNonce,this._in,this._out)},{createEncryptor:function(t,n,e){return new o(t,n,e)},createDecryptor:function(t,n,e){return new s(t,n,e)},readChunkLength:i}});