 2f58ea5f3a
			
		
	
	
	2f58ea5f3a
	
	
	
		
			
			Rename methods on the curve25519 interface to be a bit more high level. Cleanup emscripten wrapper class, wrap long lines and such. Also add a grunt task alias for building the emscripten compiled curve implementation.
		
			
				
	
	
		
			93 lines
		
	
	
	
		
			3.4 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
	
		
			3.4 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* vim: ts=4:sw=4:expandtab
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Lesser General Public License as published by
 | |
|  * the Free Software Foundation, either version 3 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| ;(function() {
 | |
|     'use strict';
 | |
|     window.textsecure = window.textsecure || {};
 | |
| 
 | |
|     if (navigator.mimeTypes['application/x-nacl'] === undefined &&
 | |
|         navigator.mimeTypes['application/x-pnacl'] === undefined) {
 | |
|             // browser does not support native client.
 | |
|             return;
 | |
|     }
 | |
| 
 | |
|     var naclMessageNextId = 0;
 | |
|     var naclMessageIdCallbackMap = {};
 | |
|     window.handleMessage = function(message) {
 | |
|         naclMessageIdCallbackMap[message.data.call_id](message.data);
 | |
|     }
 | |
| 
 | |
|     function postMessage(message) {
 | |
|         return new Promise(function(resolve) {
 | |
|             return registerOnLoadFunction(function() {
 | |
|                 naclMessageIdCallbackMap[naclMessageNextId] = resolve;
 | |
|                 message.call_id = naclMessageNextId++;
 | |
|                 common.naclModule.postMessage(message);
 | |
|             });
 | |
|         });
 | |
|     };
 | |
| 
 | |
|     var onLoadCallbacks = [];
 | |
|     var naclLoaded = false;
 | |
|     window.moduleDidLoad = function() {
 | |
|         common.hideModule();
 | |
|         naclLoaded = true;
 | |
|         for (var i = 0; i < onLoadCallbacks.length; i++) {
 | |
|             try {
 | |
|                 onLoadCallbacks[i][1](onLoadCallbacks[i][0]());
 | |
|             } catch (e) {
 | |
|                 onLoadCallbacks[i][2](e);
 | |
|             }
 | |
|         }
 | |
|         onLoadCallbacks = [];
 | |
|     };
 | |
| 
 | |
|     function registerOnLoadFunction(func) {
 | |
|         return new Promise(function(resolve, reject) {
 | |
|             if (naclLoaded) {
 | |
|                 return resolve(func());
 | |
|             } else {
 | |
|                 onLoadCallbacks[onLoadCallbacks.length] = [ func, resolve, reject ];
 | |
|             }
 | |
|         });
 | |
|     };
 | |
| 
 | |
|     window.textsecure.nativeclient = {
 | |
|         keyPair: function(priv) {
 | |
|             return postMessage({command: "bytesToPriv", priv: priv}).then(function(message) {
 | |
|                 var priv = message.res.slice(0, 32);
 | |
|                 return postMessage({command: "privToPub", priv: priv}).then(function(message) {
 | |
|                     return { pubKey: message.res.slice(0, 32), privKey: priv };
 | |
|                 });
 | |
|             });
 | |
|         },
 | |
|         sharedSecret: function(pub, priv) {
 | |
|             return postMessage({command: "ECDHE", pub: pub, priv: priv}).then(function(message) {
 | |
|                 return message.res.slice(0, 32);
 | |
|             });
 | |
|         },
 | |
|         sign: function(priv, msg) {
 | |
|             return postMessage({command: "Ed25519Sign", priv: priv, msg: msg}).then(function(message) {
 | |
|                 return message.res;
 | |
|             });
 | |
|         },
 | |
|         verify: function(pub, msg, sig) {
 | |
|             return postMessage({command: "Ed25519Verify", pub: pub, msg: msg, sig: sig}).then(function(message) {
 | |
|                 if (!message.res)
 | |
|                     throw new Error("Invalid signature");
 | |
|             });
 | |
|         }
 | |
|     };
 | |
| })();
 |