[Pkg-javascript-commits] [node-minimalistic-crypto-utils] 01/08: initial
Bastien Roucariès
rouca at moszumanska.debian.org
Thu May 4 10:24:48 UTC 2017
This is an automated email from the git hooks/post-receive script.
rouca pushed a commit to branch master
in repository node-minimalistic-crypto-utils.
commit 4dfbce943805e300a6de83ec63100d229861e573
Author: Fedor Indutny <fedor at indutny.com>
Date: Wed Feb 22 16:11:29 2017 -0500
initial
---
.gitignore | 2 ++
README.md | 45 ++++++++++++++++++++++++++++++++++++++++++
lib/utils.js | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
package.json | 27 +++++++++++++++++++++++++
test/utils-test.js | 27 +++++++++++++++++++++++++
5 files changed, 159 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1ca9571
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+npm-debug.log
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0198830
--- /dev/null
+++ b/README.md
@@ -0,0 +1,45 @@
+# minimalistic-crypto-utils
+
+Very minimal utils that are required in order to write reasonable JS-only
+crypto module.
+
+## Usage
+
+```js
+const utils = require('minimalistic-crypto-utils');
+
+utils.toArray('abcd', 'hex');
+utils.encode([ 1, 2, 3, 4 ], 'hex');
+utils.toHex([ 1, 2, 3, 4 ]);
+```
+
+#### LICENSE
+
+This software is licensed under the MIT License.
+
+Copyright Fedor Indutny, 2017.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+[0]: http://tools.ietf.org/html/rfc6979
+[1]: https://github.com/indutny/bn.js
+[2]: https://github.com/indutny/hash.js
+[3]: https://github.com/bitchan/eccrypto
+[4]: https://github.com/wanderer/secp256k1-node
diff --git a/lib/utils.js b/lib/utils.js
new file mode 100644
index 0000000..f87a82e
--- /dev/null
+++ b/lib/utils.js
@@ -0,0 +1,58 @@
+'use strict';
+
+var utils = exports;
+
+function toArray(msg, enc) {
+ if (Array.isArray(msg))
+ return msg.slice();
+ if (!msg)
+ return [];
+ var res = [];
+ if (typeof msg !== 'string') {
+ for (var i = 0; i < msg.length; i++)
+ res[i] = msg[i] | 0;
+ return res;
+ }
+ if (!enc) {
+ for (var i = 0; i < msg.length; i++) {
+ var c = msg.charCodeAt(i);
+ var hi = c >> 8;
+ var lo = c & 0xff;
+ if (hi)
+ res.push(hi, lo);
+ else
+ res.push(lo);
+ }
+ } else if (enc === 'hex') {
+ msg = msg.replace(/[^a-z0-9]+/ig, '');
+ if (msg.length % 2 !== 0)
+ msg = '0' + msg;
+ for (var i = 0; i < msg.length; i += 2)
+ res.push(parseInt(msg[i] + msg[i + 1], 16));
+ }
+ return res;
+}
+utils.toArray = toArray;
+
+function zero2(word) {
+ if (word.length === 1)
+ return '0' + word;
+ else
+ return word;
+}
+utils.zero2 = zero2;
+
+function toHex(msg) {
+ var res = '';
+ for (var i = 0; i < msg.length; i++)
+ res += zero2(msg[i].toString(16));
+ return res;
+}
+utils.toHex = toHex;
+
+utils.encode = function encode(arr, enc) {
+ if (enc === 'hex')
+ return toHex(arr);
+ else
+ return arr;
+};
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..acc9f9f
--- /dev/null
+++ b/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "minimalistic-crypto-utils",
+ "version": "1.0.0",
+ "description": "Minimalistic tools for JS crypto modules",
+ "main": "lib/utils.js",
+ "scripts": {
+ "test": "mocha --reporter=spec test/*-test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/indutny/minimalistic-crypto-utils.git"
+ },
+ "keywords": [
+ "minimalistic",
+ "utils",
+ "crypto"
+ ],
+ "author": "Fedor Indutny <fedor at indutny.com>",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/indutny/minimalistic-crypto-utils/issues"
+ },
+ "homepage": "https://github.com/indutny/minimalistic-crypto-utils#readme",
+ "devDependencies": {
+ "mocha": "^3.2.0"
+ }
+}
diff --git a/test/utils-test.js b/test/utils-test.js
new file mode 100644
index 0000000..bbf01ee
--- /dev/null
+++ b/test/utils-test.js
@@ -0,0 +1,27 @@
+'use strict';
+
+const assert = require('assert');
+const utils = require('../');
+
+describe('utils', () => {
+ it('should convert to array', () => {
+ assert.deepEqual(utils.toArray('1234', 'hex'), [ 0x12, 0x34 ]);
+ assert.deepEqual(utils.toArray('1234'), [ 49, 50, 51, 52 ]);
+ assert.deepEqual(utils.toArray('\u1234234'), [ 18, 52, 50, 51, 52 ]);
+ assert.deepEqual(utils.toArray([ 1, 2, 3, 4 ]), [ 1, 2, 3, 4 ]);
+ });
+
+ it('should zero pad byte to hex', () => {
+ assert.equal(utils.zero2('0'), '00');
+ assert.equal(utils.zero2('01'), '01');
+ });
+
+ it('should convert to hex', () => {
+ assert.equal(utils.toHex([ 0, 1, 2, 3 ]), '00010203');
+ });
+
+ it('should encode', () => {
+ assert.deepEqual(utils.encode([ 0, 1, 2, 3 ]), [ 0, 1, 2, 3 ]);
+ assert.deepEqual(utils.encode([ 0, 1, 2, 3 ], 'hex'), '00010203');
+ });
+});
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-minimalistic-crypto-utils.git
More information about the Pkg-javascript-commits
mailing list