[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