Permalink
Browse files

Initial commit

  • Loading branch information...
0 parents commit 3da062b3facd5e04a4f5ce63ea14f26770ac1c0c @pvorb committed Sep 18, 2011
Showing with 144 additions and 0 deletions.
  1. +27 −0 LICENSE.mkd
  2. +15 −0 README.js
  3. +22 −0 package.json
  4. +77 −0 sha1.js
  5. +3 −0 test.js
@@ -0,0 +1,27 @@
+Copyright © 2011, Paul Vorbach. All rights reserved.
+Copyright © 2009, Jeff Mott. All rights reserved.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+* Neither the name Crypto-JS nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,15 @@
+**sha1** is a function for hashing messages with SHA-1.
+
+## Example
+
+```javascript
+var sha1 = require('sha1');
+
+console.log(sha1("message"));
+```
+
+This will print:
+
+```
+6f9b9af3cd6e8b8a73c2cdced37fe9f59226e27d
+```
@@ -0,0 +1,22 @@
+{
+ "author": "Paul Vorbach <paul@vorb.de> (http://vorb.de)",
+ "name": "sha1",
+ "description": "function for hashing messages with SHA-1",
+ "tags": [ "sha1", "hash", "encryption" ],
+ "version": "0.0.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/pvorb/node-sha1.git"
+ },
+ "bugs": {
+ "web": "https://github.com/pvorb/node-sha1/issues"
+ },
+ "main": "sha1.js",
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "charenc": ">=0.0.0",
+ "crypt": ">=0.0.0"
+ }
+}
77 sha1.js
@@ -0,0 +1,77 @@
+(function() {
+ var crypt = require('crypt'),
+ utf8 = require('charenc').utf8,
+ bin = require('charenc').bin,
+
+ // The core
+ sha1 = function(message) {
+ // Convert to byte array
+ if (message.constructor == String)
+ message = utf8.stringToBytes(message);
+ // otherwise assume byte array
+
+ var m = crypt.bytesToWords(message),
+ l = message.length * 8;
+ w = [],
+ H0 = 1732584193,
+ H1 = -271733879,
+ H2 = -1732584194,
+ H3 = 271733878,
+ H4 = -1009589776;
+
+ // Padding
+ m[l >> 5] |= 0x80 << (24 - l % 32);
+ m[((l + 64 >>> 9) << 4) + 15] = l;
+
+ for (var i = 0; i < m.length; i += 16) {
+ var a = H0,
+ b = H1,
+ c = H2,
+ d = H3,
+ e = H4;
+
+ for (var j = 0; j < 80; j++) {
+
+ if (j < 16)
+ w[j] = m[i + j];
+ else {
+ var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];
+ w[j] = (n << 1) | (n >>> 31);
+ }
+
+ var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (
+ j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :
+ j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :
+ j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :
+ (H1 ^ H2 ^ H3) - 899497514);
+
+ H4 = H3;
+ H3 = H2;
+ H2 = (H1 << 30) | (H1 >>> 2);
+ H1 = H0;
+ H0 = t;
+ }
+
+ H0 += a;
+ H1 += b;
+ H2 += c;
+ H3 += d;
+ H4 += e;
+ }
+
+ return [H0, H1, H2, H3, H4];
+ },
+
+ // Public API
+ api = function (message, options) {
+ var digestbytes = crypt.wordsToBytes(sha1(message));
+ return options && options.asBytes ? digestbytes :
+ options && options.asString ? bin.bytesToString(digestbytes) :
+ crypt.bytesToHex(digestbytes);
+ };
+
+ api._blocksize = 16;
+ api._digestsize = 20;
+
+ module.exports = api;
+})();
@@ -0,0 +1,3 @@
+var sha1 = require('./');
+
+console.log(sha1('message'));

0 comments on commit 3da062b

Please sign in to comment.