
Rename resources to dist. Eliminate keyring bundle and expose keyring class in openpgp module. Add mochaTest grunt task to run node server-side tests. Add node_pack grunt task to create npm package into dist and install it for testing. Add node_store config property which specifies location of localStorage emulation when using node. Add repository info to package.json. Move util.js to src directory from util since it is the only file there. Rename class properties in openpgp to the new class names.
355 lines
14 KiB
HTML
355 lines
14 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>JSDoc: Source: util.js</title>
|
|
|
|
<script src="scripts/prettify/prettify.js"> </script>
|
|
<script src="scripts/prettify/lang-css.js"> </script>
|
|
<!--[if lt IE 9]>
|
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
<![endif]-->
|
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="main">
|
|
|
|
<h1 class="page-title">Source: util.js</h1>
|
|
|
|
|
|
|
|
|
|
|
|
<section>
|
|
<article>
|
|
<pre class="prettyprint source"><code>// GPG4Browsers - An OpenPGP implementation in javascript
|
|
// Copyright (C) 2011 Recurity Labs GmbH
|
|
//
|
|
// This library 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 2.1 of the License, or (at your option) any later version.
|
|
//
|
|
// This library 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 library; if not, write to the Free Software
|
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
/**
|
|
* This object contains utility functions
|
|
* @requires config
|
|
* @module util
|
|
*/
|
|
|
|
var config = require('./config');
|
|
|
|
module.exports = {
|
|
readNumber: function (bytes) {
|
|
var n = 0;
|
|
|
|
for (var i = 0; i < bytes.length; i++) {
|
|
n <<= 8;
|
|
n += bytes.charCodeAt(i);
|
|
}
|
|
|
|
return n;
|
|
},
|
|
|
|
writeNumber: function (n, bytes) {
|
|
var b = '';
|
|
for (var i = 0; i < bytes; i++) {
|
|
b += String.fromCharCode((n >> (8 * (bytes - i - 1))) & 0xFF);
|
|
}
|
|
|
|
return b;
|
|
},
|
|
|
|
readDate: function (bytes) {
|
|
var n = this.readNumber(bytes);
|
|
var d = new Date();
|
|
d.setTime(n * 1000);
|
|
return d;
|
|
},
|
|
|
|
writeDate: function (time) {
|
|
var numeric = Math.round(time.getTime() / 1000);
|
|
|
|
return this.writeNumber(numeric, 4);
|
|
},
|
|
|
|
emailRegEx: /^[+a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,6}$/,
|
|
|
|
hexdump: function (str) {
|
|
var r = [];
|
|
var e = str.length;
|
|
var c = 0;
|
|
var h;
|
|
var i = 0;
|
|
while (c < e) {
|
|
h = str.charCodeAt(c++).toString(16);
|
|
while (h.length < 2) h = "0" + h;
|
|
r.push(" " + h);
|
|
i++;
|
|
if (i % 32 === 0)
|
|
r.push("\n ");
|
|
}
|
|
return r.join('');
|
|
},
|
|
|
|
/**
|
|
* Create hexstring from a binary
|
|
* @param {String} str String to convert
|
|
* @return {String} String containing the hexadecimal values
|
|
*/
|
|
hexstrdump: function (str) {
|
|
if (str === null)
|
|
return "";
|
|
var r = [];
|
|
var e = str.length;
|
|
var c = 0;
|
|
var h;
|
|
while (c < e) {
|
|
h = str.charCodeAt(c++).toString(16);
|
|
while (h.length < 2) h = "0" + h;
|
|
r.push("" + h);
|
|
}
|
|
return r.join('');
|
|
},
|
|
|
|
/**
|
|
* Create binary string from a hex encoded string
|
|
* @param {String} str Hex string to convert
|
|
* @return {String} String containing the binary values
|
|
*/
|
|
hex2bin: function (hex) {
|
|
var str = '';
|
|
for (var i = 0; i < hex.length; i += 2)
|
|
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
|
|
return str;
|
|
},
|
|
|
|
/**
|
|
* Creating a hex string from an binary array of integers (0..255)
|
|
* @param {String} str Array of bytes to convert
|
|
* @return {String} Hexadecimal representation of the array
|
|
*/
|
|
hexidump: function (str) {
|
|
var r = [];
|
|
var e = str.length;
|
|
var c = 0;
|
|
var h;
|
|
while (c < e) {
|
|
h = str[c++].toString(16);
|
|
while (h.length < 2) h = "0" + h;
|
|
r.push("" + h);
|
|
}
|
|
return r.join('');
|
|
},
|
|
|
|
|
|
/**
|
|
* Convert a native javascript string to a string of utf8 bytes
|
|
* @param {String} str The string to convert
|
|
* @return {String} A valid squence of utf8 bytes
|
|
*/
|
|
encode_utf8: function (str) {
|
|
return unescape(encodeURIComponent(str));
|
|
},
|
|
|
|
/**
|
|
* Convert a string of utf8 bytes to a native javascript string
|
|
* @param {String} utf8 A valid squence of utf8 bytes
|
|
* @return {String} A native javascript string
|
|
*/
|
|
decode_utf8: function (utf8) {
|
|
try {
|
|
return decodeURIComponent(escape(utf8));
|
|
} catch (e) {
|
|
return utf8;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Convert an array of integers(0.255) to a string
|
|
* @param {Array<Integer>} bin An array of (binary) integers to convert
|
|
* @return {String} The string representation of the array
|
|
*/
|
|
bin2str: function (bin) {
|
|
var result = [];
|
|
|
|
for (var i = 0; i < bin.length; i++) {
|
|
result.push(String.fromCharCode(bin[i]));
|
|
}
|
|
|
|
return result.join('');
|
|
},
|
|
|
|
_str2bin: function (str, result) {
|
|
for (var i = 0; i < str.length; i++) {
|
|
result[i] = str.charCodeAt(i);
|
|
}
|
|
|
|
return result;
|
|
},
|
|
|
|
/**
|
|
* Convert a string to an array of integers(0.255)
|
|
* @param {String} str String to convert
|
|
* @return {Array<Integer>} An array of (binary) integers
|
|
*/
|
|
str2bin: function (str) {
|
|
return this._str2bin(str, new Array(str.length));
|
|
},
|
|
|
|
|
|
/**
|
|
* Convert a string to a Uint8Array
|
|
* @param {String} str String to convert
|
|
* @return {Uint8Array} The array of (binary) integers
|
|
*/
|
|
str2Uint8Array: function (str) {
|
|
return this._str2bin(str, new Uint8Array(new ArrayBuffer(str.length)));
|
|
},
|
|
|
|
/**
|
|
* Convert a Uint8Array to a string. This currently functions
|
|
* the same as bin2str.
|
|
* @function module:util.Uint8Array2str
|
|
* @param {Uint8Array} bin An array of (binary) integers to convert
|
|
* @return {String} String representation of the array
|
|
*/
|
|
Uint8Array2str: function (bin) {
|
|
return this.bin2str(bin);
|
|
},
|
|
|
|
/**
|
|
* Calculates a 16bit sum of a string by adding each character
|
|
* codes modulus 65535
|
|
* @param {String} text String to create a sum of
|
|
* @return {Integer} An integer containing the sum of all character
|
|
* codes % 65535
|
|
*/
|
|
calc_checksum: function (text) {
|
|
var checksum = {
|
|
s: 0,
|
|
add: function (sadd) {
|
|
this.s = (this.s + sadd) % 65536;
|
|
}
|
|
};
|
|
for (var i = 0; i < text.length; i++) {
|
|
checksum.add(text.charCodeAt(i));
|
|
}
|
|
return checksum.s;
|
|
},
|
|
|
|
/**
|
|
* Helper function to print a debug message. Debug
|
|
* messages are only printed if
|
|
* @link module:config/config.debug is set to true.
|
|
* @param {String} str String of the debug message
|
|
*/
|
|
print_debug: function (str) {
|
|
if (config.debug) {
|
|
console.log(str);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Helper function to print a debug message. Debug
|
|
* messages are only printed if
|
|
* @link module:config/config.debug is set to true.
|
|
* Different than print_debug because will call hexstrdump iff necessary.
|
|
* @param {String} str String of the debug message
|
|
*/
|
|
print_debug_hexstr_dump: function (str, strToHex) {
|
|
if (config.debug) {
|
|
str = str + this.hexstrdump(strToHex);
|
|
console.log(str);
|
|
}
|
|
},
|
|
|
|
getLeftNBits: function (string, bitcount) {
|
|
var rest = bitcount % 8;
|
|
if (rest === 0)
|
|
return string.substring(0, bitcount / 8);
|
|
var bytes = (bitcount - rest) / 8 + 1;
|
|
var result = string.substring(0, bytes);
|
|
return this.shiftRight(result, 8 - rest); // +String.fromCharCode(string.charCodeAt(bytes -1) << (8-rest) & 0xFF);
|
|
},
|
|
|
|
/**
|
|
* Shifting a string to n bits right
|
|
* @param {String} value The string to shift
|
|
* @param {Integer} bitcount Amount of bits to shift (MUST be smaller
|
|
* than 9)
|
|
* @return {String} Resulting string.
|
|
*/
|
|
shiftRight: function (value, bitcount) {
|
|
var temp = util.str2bin(value);
|
|
if (bitcount % 8 !== 0) {
|
|
for (var i = temp.length - 1; i >= 0; i--) {
|
|
temp[i] >>= bitcount % 8;
|
|
if (i > 0)
|
|
temp[i] |= (temp[i - 1] << (8 - (bitcount % 8))) & 0xFF;
|
|
}
|
|
} else {
|
|
return value;
|
|
}
|
|
return util.bin2str(temp);
|
|
},
|
|
|
|
/**
|
|
* Return the algorithm type as string
|
|
* @return {String} String representing the message type
|
|
*/
|
|
get_hashAlgorithmString: function (algo) {
|
|
switch (algo) {
|
|
case 1:
|
|
return "MD5";
|
|
case 2:
|
|
return "SHA1";
|
|
case 3:
|
|
return "RIPEMD160";
|
|
case 8:
|
|
return "SHA256";
|
|
case 9:
|
|
return "SHA384";
|
|
case 10:
|
|
return "SHA512";
|
|
case 11:
|
|
return "SHA224";
|
|
}
|
|
return "unknown";
|
|
}
|
|
};
|
|
</code></pre>
|
|
</article>
|
|
</section>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<nav>
|
|
<h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-cleartext.html">cleartext</a></li><li><a href="module-config.html">config</a></li><li><a href="config.html">config/config</a></li><li><a href="localStorage.html">config/localStorage</a></li><li><a href="module-crypto.html">crypto</a></li><li><a href="cfb.html">crypto/cfb</a></li><li><a href="cipher.html">crypto/cipher</a></li><li><a href="aes.html">crypto/cipher/aes</a></li><li><a href="blowfish.html">crypto/cipher/blowfish</a></li><li><a href="cast5.html">crypto/cipher/cast5</a></li><li><a href="des.html">crypto/cipher/des</a></li><li><a href="twofish.html">crypto/cipher/twofish</a></li><li><a href="crypto.html">crypto/crypto</a></li><li><a href="hash.html">crypto/hash</a></li><li><a href="md5.html">crypto/hash/md5</a></li><li><a href="ripe-md.html">crypto/hash/ripe-md</a></li><li><a href="sha.html">crypto/hash/sha</a></li><li><a href="pkcs1.html">crypto/pkcs1</a></li><li><a href="public_key.html">crypto/public_key</a></li><li><a href="dsa.html">crypto/public_key/dsa</a></li><li><a href="elgamal.html">crypto/public_key/elgamal</a></li><li><a href="jsbn.html">crypto/public_key/jsbn</a></li><li><a href="rsa.html">crypto/public_key/rsa</a></li><li><a href="random.html">crypto/random</a></li><li><a href="signature.html">crypto/signature</a></li><li><a href="armor.html">encoding/armor</a></li><li><a href="base64.html">encoding/base64</a></li><li><a href="module-enums.html">enums</a></li><li><a href="module-key.html">key</a></li><li><a href="module-keyring.html">keyring</a></li><li><a href="keyring.html">keyring/keyring</a></li><li><a href="localstore.html">keyring/localstore</a></li><li><a href="module-message.html">message</a></li><li><a href="module-openpgp.html">openpgp</a></li><li><a href="module-packet.html">packet</a></li><li><a href="compressed.html">packet/compressed</a></li><li><a href="literal.html">packet/literal</a></li><li><a href="marker.html">packet/marker</a></li><li><a href="one_pass_signature.html">packet/one_pass_signature</a></li><li><a href="packet.html">packet/packet</a></li><li><a href="packetlist.html">packet/packetlist</a></li><li><a href="public_key_.html">packet/public_key</a></li><li><a href="public_key_encrypted_session_key.html">packet/public_key_encrypted_session_key</a></li><li><a href="public_subkey.html">packet/public_subkey</a></li><li><a href="secret_key.html">packet/secret_key</a></li><li><a href="secret_subkey.html">packet/secret_subkey</a></li><li><a href="signature_.html">packet/signature</a></li><li><a href="sym_encrypted_integrity_protected.html">packet/sym_encrypted_integrity_protected</a></li><li><a href="sym_encrypted_session_key.html">packet/sym_encrypted_session_key</a></li><li><a href="symmetrically_encrypted.html">packet/symmetrically_encrypted</a></li><li><a href="trust.html">packet/trust</a></li><li><a href="user_attribute.html">packet/user_attribute</a></li><li><a href="userid.html">packet/userid</a></li><li><a href="keyid.html">type/keyid</a></li><li><a href="mpi.html">type/mpi</a></li><li><a href="s2k.html">type/s2k</a></li><li><a href="module-util.html">util</a></li></ul><h3>Classes</h3><ul><li><a href="JXG.Util.html">JXG.Util</a></li><li><a href="module-cleartext-CleartextMessage.html">cleartext~CleartextMessage</a></li><li><a href="localStorage-LocalStorage.html">config/localStorage~LocalStorage</a></li><li><a href="keyring-Keyring.html">keyring/keyring~Keyring</a></li><li><a href="module-key-Key.html">key~Key</a></li><li><a href="module-key-SubKey.html">key~SubKey</a></li><li><a href="module-key-User.html">key~User</a></li><li><a href="module-message-Message.html">message~Message</a></li><li><a href="compressed-Compressed.html">packet/compressed~Compressed</a></li><li><a href="literal-Literal.html">packet/literal~Literal</a></li><li><a href="marker-Marker.html">packet/marker~Marker</a></li><li><a href="one_pass_signature-OnePassSignature.html">packet/one_pass_signature~OnePassSignature</a></li><li><a href="packetlist-Packetlist.html">packet/packetlist~Packetlist</a></li><li><a href="public_key_encrypted_session_key-PublicKeyEncryptedSessionKey.html">packet/public_key_encrypted_session_key~PublicKeyEncryptedSessionKey</a></li><li><a href="public_key-PublicKey.html">packet/public_key~PublicKey</a></li><li><a href="public_subkey-PublicSubkey.html">packet/public_subkey~PublicSubkey</a></li><li><a href="secret_key-SecretKey.html">packet/secret_key~SecretKey</a></li><li><a href="secret_subkey-SecretSubkey.html">packet/secret_subkey~SecretSubkey</a></li><li><a href="signature-Signature.html">packet/signature~Signature</a></li><li><a href="sym_encrypted_integrity_protected-SymEncryptedIntegrityProtected.html">packet/sym_encrypted_integrity_protected~SymEncryptedIntegrityProtected</a></li><li><a href="sym_encrypted_session_key-SymEncryptedSessionKey.html">packet/sym_encrypted_session_key~SymEncryptedSessionKey</a></li><li><a href="symmetrically_encrypted-SymmetricallyEncrypted.html">packet/symmetrically_encrypted~SymmetricallyEncrypted</a></li><li><a href="trust-Trust.html">packet/trust~Trust</a></li><li><a href="user_attribute-UserAttribute.html">packet/user_attribute~UserAttribute</a></li><li><a href="userid-Userid.html">packet/userid~Userid</a></li><li><a href="keyid-Keyid.html">type/keyid~Keyid</a></li><li><a href="mpi-MPI.html">type/mpi~MPI</a></li><li><a href="s2k-S2K.html">type/s2k~S2K</a></li></ul>
|
|
</nav>
|
|
|
|
<br clear="both">
|
|
|
|
<footer>
|
|
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Jan 09 2014 02:24:28 GMT-0800 (PST)
|
|
</footer>
|
|
|
|
<script> prettyPrint(); </script>
|
|
<script src="scripts/linenumber.js"> </script>
|
|
</body>
|
|
</html>
|