@richardhopton/noise-c.wasm
Version:
rweather/noise-c compiled to WebAssembly using Emscripten and optimized for small size
1 lines • 7.83 kB
JavaScript
!function(){var i;function n(e,c,t,n){var f,l,s="function"==typeof t?{}:t,_=n||t;if("function"!=typeof _)throw new TypeError("noise-c.wasm: Callback is not a function");e(s).then(a=>{function h(e,t){var n=l();return a._NoiseBuffer_create(n,e,t,e.length),t=n.dereference(),n.free(),t}function o(e,t){var n,s;if(e!==c.NOISE_ERROR_NONE)for(n in s=c)if(s[n]===e){if(t)try{t.free()}catch(e){}throw new Error(n)}}function n(e){var t;if(!(this instanceof n))return new n(e);t=l(),o(a._noise_cipherstate_new_by_id(t,e),t),this._state=t.dereference(),this._mac_length=a._noise_cipherstate_get_mac_length(this._state),t.free()}function e(e){this._state=e,this._mac_length=a._noise_cipherstate_get_mac_length(this._state)}function s(e){var t,n=this;if(!(this instanceof s))return new s(e);t=l(),e=f(0,e),o(a._noise_symmetricstate_new_by_name(t,e),t),this._state=t.dereference(),t.free(),e.free(),Object.defineProperty(this,"_mac_length",{configurable:!0,get:function(){var e=a._noise_symmetricstate_get_mac_length(n._state);return 0<e&&(n._mac_length=e),e}})}function r(e,t){var n;if(!(this instanceof r))return new r(e,t);n=l(),e=f(0,e),t=a._noise_handshakestate_new_by_name(n,e,t),e.free(),o(t,n),this._state=n.dereference(),n.free()}a._random_bytes=i,f=a.allocateBytes,l=a.allocatePointer,n.prototype={InitializeKey:function(e){var t;e=f(0,e),t=a._noise_cipherstate_init_key(this._state,e,e.length),e.free(),o(t,this)},HasKey:function(){return 1===a._noise_cipherstate_has_key(this._state)},SetNonce:function(e){o(a._noise_cipherstate_set_nonce(this._state,e),this)},EncryptWithAd:function(e,t){var n,s,r;return e=f(0,e),n=h(t=f(t.length+this._mac_length,t),t.length-this._mac_length),s=a._noise_cipherstate_encrypt_with_ad(this._state,e,e.length,n),r=t.get(),e.free(),t.free(),n.free(),o(s),r},DecryptWithAd:function(e,t){var n,s,r;return e=f(0,e),n=h(t=f(0,t),t.length),s=a._noise_cipherstate_decrypt_with_ad(this._state,e,e.length,n),r=t.get().slice(0,t.length-this._mac_length),e.free(),t.free(),n.free(),o(s),r},Rekey:function(){throw"Not implemented"},free:function(){var e=a._noise_cipherstate_free(this._state);delete this._state,delete this._mac_length,o(e)}},Object.defineProperty(n.prototype,"constructor",{enumerable:!1,value:n}),e.prototype=Object.create(n.prototype),Object.defineProperty(e.prototype,"constructor",{enumerable:!1,value:e}),s.prototype={MixKey:function(e){var t;e=f(0,e),t=a._noise_symmetricstate_mix_key(this._state,e,e.length),e.free(),o(t,this)},MixHash:function(e){var t;e=f(0,e),t=a._noise_symmetricstate_mix_hash(this._state,e,e.length),e.free(),o(t,this)},MixKeyAndHash:function(e){var t;this.MixKey(e),e=l(),t=a._SymmetricState_get_ck(this._state,e),t=e.dereference(t),e.free(),e=t.get(),t.free(),this.MixHash(e)},EncryptAndHash:function(e){var t=h(e=f(e.length+this._mac_length,e),e.length-this._mac_length),n=a._noise_symmetricstate_encrypt_and_hash(this._state,t),s=e.get();return e.free(),t.free(),o(n,this),s},DecryptAndHash:function(e){var t=h(e=f(0,e),e.length),n=a._noise_symmetricstate_decrypt_and_hash(this._state,t),s=e.get().slice(0,e.length-this._mac_length);return e.free(),t.free(),o(n,this),s},Split:function(){var t,n,s=l(),r=l(),_=a._noise_symmetricstate_split(this._state,s,r);try{o(_)}catch(e){throw t=e,s.free(),r.free(),t}_=new e(s.dereference()),n=new e(r.dereference()),s.free(),r.free();try{this.free()}catch(e){t=e;try{_.free()}catch(e){}try{n.free()}catch(e){}throw t}return[_,n]},free:function(){var e=a._noise_symmetricstate_free(this._state);delete this._state,delete this._mac_length,o(e)}},Object.defineProperty(s.prototype,"constructor",{enumerable:!1,value:s}),r.prototype={Initialize:function(e,t,n,s){var r,_;if(null==t&&(t=null),null==n&&(n=null),null==s&&(s=null),(e=null==e?null:e)&&(e=f(0,e),r=a._noise_handshakestate_set_prologue(this._state,e,e.length),e.free(),o(r,this)),s&&1===a._noise_handshakestate_needs_pre_shared_key(this._state)&&(s=f(0,s),r=a._noise_handshakestate_set_pre_shared_key(this._state,s,s.length),s.free(),o(r,this)),1===a._noise_handshakestate_needs_local_keypair(this._state)){if(!t)throw new Error("Local static private key (s) required, but not provided");_=a._noise_handshakestate_get_local_keypair_dh(this._state),t=f(0,t),r=a._noise_dhstate_set_keypair_private(_,t,t.length),t.free(),o(r,this)}if(1===a._noise_handshakestate_needs_remote_public_key(this._state)){if(!n)throw new Error("Remote static public key (rs) required, but not provided");_=a._noise_handshakestate_get_remote_public_key_dh(this._state),n=f(0,n),r=a._noise_dhstate_set_public_key(_,n,n.length),n.free(),o(r,this)}o(r=a._noise_handshakestate_start(this._state),this)},GetAction:function(){return a._noise_handshakestate_get_action(this._state)},FallbackTo:function(e){null==e&&(e=c.NOISE_PATTERN_XX_FALLBACK),o(a._noise_handshakestate_fallback_to(this._state,e),this)},WriteMessage:function(t){var n,s,e,r;null==t&&(t=null),s=h(n=f(c.NOISE_MAX_PAYLOAD_LEN),0),e=null,t&&(e=h(t=f(0,t),t.length)),r=a._noise_handshakestate_write_message(this._state,s,e),t&&(t.free(),e.free());try{o(r,this)}catch(e){throw t=e,n.free(),s.free(),t}return e=a._NoiseBuffer_get_size(s),r=n.get().slice(0,e),n.free(),s.free(),r},ReadMessage:function(t,n,e){var s,r,_,i;null==n&&(n=!1),null==e&&(e=!1),_=h(t=f(0,t),t.length),s=null,n&&(s=h(r=f(c.NOISE_MAX_PAYLOAD_LEN),r.length)),i=a._noise_handshakestate_read_message(this._state,_,s),t.free(),_.free();try{o(i,e?void 0:this)}catch(e){throw t=e,n&&(r.free(),s.free()),t}return _=null,n&&(i=a._NoiseBuffer_get_size(s),_=r.get().slice(0,i),r.free(),s.free()),_},Split:function(){var t,n,s=l(),r=l(),_=a._noise_handshakestate_split(this._state,s,r);try{o(_,this)}catch(e){throw t=e,s.free(),r.free(),t}_=new e(s.dereference()),n=new e(r.dereference()),s.free(),r.free();try{this.free()}catch(e){t=e;try{_.free()}catch(e){}try{n.free()}catch(e){}throw t}return[_,n]},GetHandshakeHash:function(){var e,t,n=f(64),s=a._noise_handshakestate_get_handshake_hash(this._state,n,n.length);try{switch(o(s),e=a._NoiseHandshakeState_get_hash_id(this._state)){case c.NOISE_HASH_BLAKE2s:case c.NOISE_HASH_SHA256:t=n.get().slice(0,32);break;case c.NOISE_HASH_BLAKE2b:case c.NOISE_HASH_SHA512:t=n.get();break;default:throw new Error("invalid hash id:"+e)}n.free(),n=null}catch(e){throw s=e,n.free(),n=null,s}return t},GetRemotePublicKey:function(){var t,e,n,s;if(a._noise_handshakestate_has_remote_public_key(this._state)&&(e=a._noise_handshakestate_get_remote_public_key_dh(this._state),s=a._noise_dhstate_get_public_key_length(e))){t=f(s),e=a._noise_dhstate_get_public_key(e,t,s),0;try{return o(e),n=t.get(),t.free(),n}catch(e){throw s=e,t.free(),s}}return null},free:function(){var e=a._noise_handshakestate_free(this._state);delete this._state,o(e)}},Object.defineProperty(r.prototype,"constructor",{enumerable:!1,value:r}),_({constants:c,CipherState:n,SymmetricState:s,HandshakeState:r,CreateKeyPair:function(t){var e,n,s,r,_,i;if(t!==c.NOISE_DH_CURVE448&&t!==c.NOISE_DH_CURVE25519)throw new TypeError("Invalid keypair type");e=l(),o(a._noise_dhstate_new_by_id(e,t),e),n=e.dereference(),e.free(),e=a._noise_dhstate_generate_keypair(n);try{o(e)}catch(e){throw s=e,a._noise_dhstate_free(n),s}t=t===c.NOISE_DH_CURVE448?56:32,r=f(t),t=f(t),e=a._noise_dhstate_get_keypair(n,r,r.length,t,t.length),a._noise_dhstate_free(n);try{return o(e),_=r.get(),r.free(),i=t.get(),t.free(),[_,i]}catch(e){throw s=e,r.free(),t.free(),s}},_lib_internal:a})})}function e(e,t){return n.bind(this,e,t)}i="undefined"!=typeof crypto?function(e){e=new Uint8Array(e);return crypto.getRandomValues(e),e}:require("crypto").randomBytes,"function"==typeof define&&define.amd?define(["./noise-c","./constants"],e):"object"==typeof exports?module.exports=e(require("./noise-c"),require("./constants")):this.noise_c_wasm=e(this.__noise_c_wasm,this.__noise_c_wasm_constants)}.call(this);