🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Sign inDemoInstall
Socket

js-md4

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

js-md4 - npm Package Compare versions

Comparing version

to
0.3.0

doc/fonts/OpenSans-Bold-webfont.eot

2

bower.json
{
"name": "js-md4",
"version": "0.2.0",
"version": "0.3.0",
"main": ["src/md4.js"],

@@ -5,0 +5,0 @@ "ignore": [

@@ -1,10 +0,10 @@

/*
* js-md4 v0.2.0
* https://github.com/emn178/js-md4
/**
* [js-md4]{@link https://github.com/emn178/js-md4}
*
* Copyright 2015, emn178@gmail.com
*
* @license under the MIT license:
* http://www.opensource.org/licenses/MIT
* @namespace md4
* @version 0.3.0
* @author Yi-Cyuan Chen [emn178@gmail.com]
* @copyright Yi-Cyuan Chen 2015
* @license MIT
*/
!function(e){"use strict";var r="object"==typeof process&&process.versions&&process.versions.node;r&&(e=global);var o,t=!e.JS_MD4_TEST&&"object"==typeof module&&module.exports,f="function"==typeof define&&define.amd,n=!e.JS_MD4_TEST&&"undefined"!=typeof ArrayBuffer,i="0123456789abcdef".split(""),s=[128,32768,8388608,-2147483648],a=[0,8,16,24],c=[];if(n){var d=new ArrayBuffer(68);o=new Uint8Array(d),c=new Uint32Array(d)}var u=function(e){var r="string"!=typeof e;r&&e.constructor==ArrayBuffer&&(e=new Uint8Array(e));var t,f,d,u,l,p,y,A,v,h,m,w,b,C,S=!0,T=!1,_=0,g=0,B=0,U=e.length||0;c[16]=0;do{if(c[0]=c[16],c[16]=c[1]=c[2]=c[3]=c[4]=c[5]=c[6]=c[7]=c[8]=c[9]=c[10]=c[11]=c[12]=c[13]=c[14]=c[15]=0,r)if(n)for(C=g;U>_&&64>C;++_)o[C++]=e[_];else for(C=g;U>_&&64>C;++_)c[C>>2]|=e[_]<<a[3&C++];else if(n)for(C=g;U>_&&64>C;++_)b=e.charCodeAt(_),128>b?o[C++]=b:2048>b?(o[C++]=192|b>>6,o[C++]=128|63&b):55296>b||b>=57344?(o[C++]=224|b>>12,o[C++]=128|b>>6&63,o[C++]=128|63&b):(b=65536+((1023&b)<<10|1023&e.charCodeAt(++_)),o[C++]=240|b>>18,o[C++]=128|b>>12&63,o[C++]=128|b>>6&63,o[C++]=128|63&b);else for(C=g;U>_&&64>C;++_)b=e.charCodeAt(_),128>b?c[C>>2]|=b<<a[3&C++]:2048>b?(c[C>>2]|=(192|b>>6)<<a[3&C++],c[C>>2]|=(128|63&b)<<a[3&C++]):55296>b||b>=57344?(c[C>>2]|=(224|b>>12)<<a[3&C++],c[C>>2]|=(128|b>>6&63)<<a[3&C++],c[C>>2]|=(128|63&b)<<a[3&C++]):(b=65536+((1023&b)<<10|1023&e.charCodeAt(++_)),c[C>>2]|=(240|b>>18)<<a[3&C++],c[C>>2]|=(128|b>>12&63)<<a[3&C++],c[C>>2]|=(128|b>>6&63)<<a[3&C++],c[C>>2]|=(128|63&b)<<a[3&C++]);B+=C-g,g=C-64,_==U&&(c[C>>2]|=s[3&C],++_),_>U&&56>C&&(c[14]=B<<3,T=!0),S?(l=c[0]-1,l=l<<3|l>>>29,A=(4023233417&l|2562383102&~l)+c[1]+271733878,A=A<<7|A>>>25,y=(A&l|4023233417&~A)+c[2]-1732584194,y=y<<11|y>>>21,p=(y&A|~y&l)+c[3]-271733879,p=p<<19|p>>>13):(l=t,p=f,y=d,A=u,l+=(p&y|~p&A)+c[0],l=l<<3|l>>>29,A+=(l&p|~l&y)+c[1],A=A<<7|A>>>25,y+=(A&l|~A&p)+c[2],y=y<<11|y>>>21,p+=(y&A|~y&l)+c[3],p=p<<19|p>>>13),l+=(p&y|~p&A)+c[4],l=l<<3|l>>>29,A+=(l&p|~l&y)+c[5],A=A<<7|A>>>25,y+=(A&l|~A&p)+c[6],y=y<<11|y>>>21,p+=(y&A|~y&l)+c[7],p=p<<19|p>>>13,l+=(p&y|~p&A)+c[8],l=l<<3|l>>>29,A+=(l&p|~l&y)+c[9],A=A<<7|A>>>25,y+=(A&l|~A&p)+c[10],y=y<<11|y>>>21,p+=(y&A|~y&l)+c[11],p=p<<19|p>>>13,l+=(p&y|~p&A)+c[12],l=l<<3|l>>>29,A+=(l&p|~l&y)+c[13],A=A<<7|A>>>25,y+=(A&l|~A&p)+c[14],y=y<<11|y>>>21,p+=(y&A|~y&l)+c[15],p=p<<19|p>>>13,h=p&y,l+=(h|p&A|y&A)+c[0]+1518500249,l=l<<3|l>>>29,v=l&p,A+=(v|l&y|h)+c[4]+1518500249,A=A<<5|A>>>27,w=A&l,y+=(w|A&p|v)+c[8]+1518500249,y=y<<9|y>>>23,m=y&A,p+=(m|y&l|w)+c[12]+1518500249,p=p<<13|p>>>19,h=p&y,l+=(h|p&A|m)+c[1]+1518500249,l=l<<3|l>>>29,v=l&p,A+=(v|l&y|h)+c[5]+1518500249,A=A<<5|A>>>27,w=A&l,y+=(w|A&p|v)+c[9]+1518500249,y=y<<9|y>>>23,m=y&A,p+=(m|y&l|w)+c[13]+1518500249,p=p<<13|p>>>19,h=p&y,l+=(h|p&A|m)+c[2]+1518500249,l=l<<3|l>>>29,v=l&p,A+=(v|l&y|h)+c[6]+1518500249,A=A<<5|A>>>27,w=A&l,y+=(w|A&p|v)+c[10]+1518500249,y=y<<9|y>>>23,m=y&A,p+=(m|y&l|w)+c[14]+1518500249,p=p<<13|p>>>19,h=p&y,l+=(h|p&A|m)+c[3]+1518500249,l=l<<3|l>>>29,v=l&p,A+=(v|l&y|h)+c[7]+1518500249,A=A<<5|A>>>27,w=A&l,y+=(w|A&p|v)+c[11]+1518500249,y=y<<9|y>>>23,p+=(y&A|y&l|w)+c[15]+1518500249,p=p<<13|p>>>19,h=p^y,l+=(h^A)+c[0]+1859775393,l=l<<3|l>>>29,A+=(h^l)+c[8]+1859775393,A=A<<9|A>>>23,w=A^l,y+=(w^p)+c[4]+1859775393,y=y<<11|y>>>21,p+=(w^y)+c[12]+1859775393,p=p<<15|p>>>17,h=p^y,l+=(h^A)+c[2]+1859775393,l=l<<3|l>>>29,A+=(h^l)+c[10]+1859775393,A=A<<9|A>>>23,w=A^l,y+=(w^p)+c[6]+1859775393,y=y<<11|y>>>21,p+=(w^y)+c[14]+1859775393,p=p<<15|p>>>17,h=p^y,l+=(h^A)+c[1]+1859775393,l=l<<3|l>>>29,A+=(h^l)+c[9]+1859775393,A=A<<9|A>>>23,w=A^l,y+=(w^p)+c[5]+1859775393,y=y<<11|y>>>21,p+=(w^y)+c[13]+1859775393,p=p<<15|p>>>17,h=p^y,l+=(h^A)+c[3]+1859775393,l=l<<3|l>>>29,A+=(h^l)+c[11]+1859775393,A=A<<9|A>>>23,w=A^l,y+=(w^p)+c[7]+1859775393,y=y<<11|y>>>21,p+=(w^y)+c[15]+1859775393,p=p<<15|p>>>17,S?(t=l+1732584193<<0,f=p-271733879<<0,d=y-1732584194<<0,u=A+271733878<<0,S=!1):(t=t+l<<0,f=f+p<<0,d=d+y<<0,u=u+A<<0)}while(!T);return i[t>>4&15]+i[15&t]+i[t>>12&15]+i[t>>8&15]+i[t>>20&15]+i[t>>16&15]+i[t>>28&15]+i[t>>24&15]+i[f>>4&15]+i[15&f]+i[f>>12&15]+i[f>>8&15]+i[f>>20&15]+i[f>>16&15]+i[f>>28&15]+i[f>>24&15]+i[d>>4&15]+i[15&d]+i[d>>12&15]+i[d>>8&15]+i[d>>20&15]+i[d>>16&15]+i[d>>28&15]+i[d>>24&15]+i[u>>4&15]+i[15&u]+i[u>>12&15]+i[u>>8&15]+i[u>>20&15]+i[u>>16&15]+i[u>>28&15]+i[u>>24&15]};t?module.exports=u:(e.md4=u,f&&define(function(){return u}))}(this);
!function(t){"use strict";function i(t){if(t)c[0]=c[16]=c[1]=c[2]=c[3]=c[4]=c[5]=c[6]=c[7]=c[8]=c[9]=c[10]=c[11]=c[12]=c[13]=c[14]=c[15]=0,this.blocks=c,this.buffer8=s;else if(n){var i=new ArrayBuffer(68);this.buffer8=new Uint8Array(i),this.blocks=new Uint32Array(i)}else this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.h0=this.h1=this.h2=this.h3=this.start=this.bytes=0,this.finalized=this.hashed=!1,this.first=!0}var h="object"==typeof process&&process.versions&&process.versions.node;h&&(t=global);var s,e=!t.JS_MD4_TEST&&"object"==typeof module&&module.exports,r="function"==typeof define&&define.amd,n=!t.JS_MD4_TEST&&"undefined"!=typeof ArrayBuffer,o="0123456789abcdef".split(""),a=[128,32768,8388608,-2147483648],f=[0,8,16,24],u=["hex","array","digest","buffer"],c=[];if(n){var p=new ArrayBuffer(68);s=new Uint8Array(p),c=new Uint32Array(p)}var d=function(t){return function(h){return new i(!0).update(h)[t]()}},y=function(){var t=d("hex");t.create=function(){return new i},t.update=function(i){return t.create().update(i)};for(var h=0;h<u.length;++h){var s=u[h];t[s]=d(s)}return t};i.prototype.update=function(i){if(!this.finalized){var h="string"!=typeof i;h&&i.constructor==t.ArrayBuffer&&(i=new Uint8Array(i));for(var s,e,r=0,o=i.length||0,a=this.blocks,u=this.buffer8;o>r;){if(this.hashed&&(this.hashed=!1,a[0]=a[16],a[16]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=a[8]=a[9]=a[10]=a[11]=a[12]=a[13]=a[14]=a[15]=0),h)if(n)for(e=this.start;o>r&&64>e;++r)u[e++]=i[r];else for(e=this.start;o>r&&64>e;++r)a[e>>2]|=i[r]<<f[3&e++];else if(n)for(e=this.start;o>r&&64>e;++r)s=i.charCodeAt(r),128>s?u[e++]=s:2048>s?(u[e++]=192|s>>6,u[e++]=128|63&s):55296>s||s>=57344?(u[e++]=224|s>>12,u[e++]=128|s>>6&63,u[e++]=128|63&s):(s=65536+((1023&s)<<10|1023&i.charCodeAt(++r)),u[e++]=240|s>>18,u[e++]=128|s>>12&63,u[e++]=128|s>>6&63,u[e++]=128|63&s);else for(e=this.start;o>r&&64>e;++r)s=i.charCodeAt(r),128>s?a[e>>2]|=s<<f[3&e++]:2048>s?(a[e>>2]|=(192|s>>6)<<f[3&e++],a[e>>2]|=(128|63&s)<<f[3&e++]):55296>s||s>=57344?(a[e>>2]|=(224|s>>12)<<f[3&e++],a[e>>2]|=(128|s>>6&63)<<f[3&e++],a[e>>2]|=(128|63&s)<<f[3&e++]):(s=65536+((1023&s)<<10|1023&i.charCodeAt(++r)),a[e>>2]|=(240|s>>18)<<f[3&e++],a[e>>2]|=(128|s>>12&63)<<f[3&e++],a[e>>2]|=(128|s>>6&63)<<f[3&e++],a[e>>2]|=(128|63&s)<<f[3&e++]);this.lastByteIndex=e,this.bytes+=e-this.start,e>=64?(this.start=e-64,this.hash(),this.hashed=!0):this.start=e}return this}},i.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,i=this.lastByteIndex;t[i>>2]|=a[3&i],i>=56&&(this.hashed||this.hash(),t[0]=t[16],t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.bytes<<3,this.hash()}},i.prototype.hash=function(){var t,i,h,s,e,r,n,o,a=this.blocks;this.first?(t=a[0]-1,t=t<<3|t>>>29,s=(4023233417&t|2562383102&~t)+a[1]+271733878,s=s<<7|s>>>25,h=(s&t|4023233417&~s)+a[2]-1732584194,h=h<<11|h>>>21,i=(h&s|~h&t)+a[3]-271733879,i=i<<19|i>>>13):(t=this.h0,i=this.h1,h=this.h2,s=this.h3,t+=(i&h|~i&s)+a[0],t=t<<3|t>>>29,s+=(t&i|~t&h)+a[1],s=s<<7|s>>>25,h+=(s&t|~s&i)+a[2],h=h<<11|h>>>21,i+=(h&s|~h&t)+a[3],i=i<<19|i>>>13),t+=(i&h|~i&s)+a[4],t=t<<3|t>>>29,s+=(t&i|~t&h)+a[5],s=s<<7|s>>>25,h+=(s&t|~s&i)+a[6],h=h<<11|h>>>21,i+=(h&s|~h&t)+a[7],i=i<<19|i>>>13,t+=(i&h|~i&s)+a[8],t=t<<3|t>>>29,s+=(t&i|~t&h)+a[9],s=s<<7|s>>>25,h+=(s&t|~s&i)+a[10],h=h<<11|h>>>21,i+=(h&s|~h&t)+a[11],i=i<<19|i>>>13,t+=(i&h|~i&s)+a[12],t=t<<3|t>>>29,s+=(t&i|~t&h)+a[13],s=s<<7|s>>>25,h+=(s&t|~s&i)+a[14],h=h<<11|h>>>21,i+=(h&s|~h&t)+a[15],i=i<<19|i>>>13,r=i&h,t+=(r|i&s|h&s)+a[0]+1518500249,t=t<<3|t>>>29,e=t&i,s+=(e|t&h|r)+a[4]+1518500249,s=s<<5|s>>>27,o=s&t,h+=(o|s&i|e)+a[8]+1518500249,h=h<<9|h>>>23,n=h&s,i+=(n|h&t|o)+a[12]+1518500249,i=i<<13|i>>>19,r=i&h,t+=(r|i&s|n)+a[1]+1518500249,t=t<<3|t>>>29,e=t&i,s+=(e|t&h|r)+a[5]+1518500249,s=s<<5|s>>>27,o=s&t,h+=(o|s&i|e)+a[9]+1518500249,h=h<<9|h>>>23,n=h&s,i+=(n|h&t|o)+a[13]+1518500249,i=i<<13|i>>>19,r=i&h,t+=(r|i&s|n)+a[2]+1518500249,t=t<<3|t>>>29,e=t&i,s+=(e|t&h|r)+a[6]+1518500249,s=s<<5|s>>>27,o=s&t,h+=(o|s&i|e)+a[10]+1518500249,h=h<<9|h>>>23,n=h&s,i+=(n|h&t|o)+a[14]+1518500249,i=i<<13|i>>>19,r=i&h,t+=(r|i&s|n)+a[3]+1518500249,t=t<<3|t>>>29,e=t&i,s+=(e|t&h|r)+a[7]+1518500249,s=s<<5|s>>>27,o=s&t,h+=(o|s&i|e)+a[11]+1518500249,h=h<<9|h>>>23,i+=(h&s|h&t|o)+a[15]+1518500249,i=i<<13|i>>>19,r=i^h,t+=(r^s)+a[0]+1859775393,t=t<<3|t>>>29,s+=(r^t)+a[8]+1859775393,s=s<<9|s>>>23,o=s^t,h+=(o^i)+a[4]+1859775393,h=h<<11|h>>>21,i+=(o^h)+a[12]+1859775393,i=i<<15|i>>>17,r=i^h,t+=(r^s)+a[2]+1859775393,t=t<<3|t>>>29,s+=(r^t)+a[10]+1859775393,s=s<<9|s>>>23,o=s^t,h+=(o^i)+a[6]+1859775393,h=h<<11|h>>>21,i+=(o^h)+a[14]+1859775393,i=i<<15|i>>>17,r=i^h,t+=(r^s)+a[1]+1859775393,t=t<<3|t>>>29,s+=(r^t)+a[9]+1859775393,s=s<<9|s>>>23,o=s^t,h+=(o^i)+a[5]+1859775393,h=h<<11|h>>>21,i+=(o^h)+a[13]+1859775393,i=i<<15|i>>>17,r=i^h,t+=(r^s)+a[3]+1859775393,t=t<<3|t>>>29,s+=(r^t)+a[11]+1859775393,s=s<<9|s>>>23,o=s^t,h+=(o^i)+a[7]+1859775393,h=h<<11|h>>>21,i+=(o^h)+a[15]+1859775393,i=i<<15|i>>>17,this.first?(this.h0=t+1732584193<<0,this.h1=i-271733879<<0,this.h2=h-1732584194<<0,this.h3=s+271733878<<0,this.first=!1):(this.h0=this.h0+t<<0,this.h1=this.h1+i<<0,this.h2=this.h2+h<<0,this.h3=this.h3+s<<0)},i.prototype.hex=function(){this.finalize();var t=this.h0,i=this.h1,h=this.h2,s=this.h3;return o[t>>4&15]+o[15&t]+o[t>>12&15]+o[t>>8&15]+o[t>>20&15]+o[t>>16&15]+o[t>>28&15]+o[t>>24&15]+o[i>>4&15]+o[15&i]+o[i>>12&15]+o[i>>8&15]+o[i>>20&15]+o[i>>16&15]+o[i>>28&15]+o[i>>24&15]+o[h>>4&15]+o[15&h]+o[h>>12&15]+o[h>>8&15]+o[h>>20&15]+o[h>>16&15]+o[h>>28&15]+o[h>>24&15]+o[s>>4&15]+o[15&s]+o[s>>12&15]+o[s>>8&15]+o[s>>20&15]+o[s>>16&15]+o[s>>28&15]+o[s>>24&15]},i.prototype.toString=i.prototype.hex,i.prototype.digest=function(){this.finalize();var t=this.h0,i=this.h1,h=this.h2,s=this.h3;return[255&t,t>>8&255,t>>16&255,t>>24&255,255&i,i>>8&255,i>>16&255,i>>24&255,255&h,h>>8&255,h>>16&255,h>>24&255,255&s,s>>8&255,s>>16&255,s>>24&255]},i.prototype.array=i.prototype.digest,i.prototype.buffer=function(){this.finalize();var t=new ArrayBuffer(16),i=new Uint32Array(t);return i[0]=this.h0,i[1]=this.h1,i[2]=this.h2,i[3]=this.h3,t};var l=y();e?module.exports=l:(t.md4=l,r&&define(function(){return l}))}(this);

@@ -0,1 +1,7 @@

# v0.3.0 / 2015-12-28
* Added support for update hash.
* Added support for bytes array output.
* Added support for ArrayBuffer output.
# v0.2.0 / 2015-12-01

@@ -2,0 +8,0 @@

@@ -1,2 +0,2 @@

Copyright 2015 emn178@gmail.com
Copyright 2015 Yi-Cyuan Chen

@@ -3,0 +3,0 @@ Permission is hereby granted, free of charge, to any person obtaining

{
"name": "js-md4",
"version": "0.2.0",
"version": "0.3.0",
"description": "A simple MD4 hash function for JavaScript supports UTF-8 encoding.",

@@ -9,2 +9,3 @@ "main": "src/md4.js",

"jscoverage": "~0.5.9",
"jsdoc": "^3.4.0",
"mocha": "~2.3.4",

@@ -17,3 +18,5 @@ "uglifyjs": "~2.4.10"

"coveralls": "mocha tests/node-test.js -R mocha-lcov-reporter -r jscoverage | coveralls",
"build": "uglifyjs src/md4.js --compress --mangle --comments --output build/md4.min.js"
"doc": "rm -rf doc;jsdoc src README.md -d doc",
"compress": "uglifyjs src/md4.js --compress --mangle --comments --output build/md4.min.js",
"build": "npm run-script compress;npm run-script doc"
},

@@ -20,0 +23,0 @@ "repository": {

@@ -27,2 +27,5 @@ # js-md4

md4('Message to hash');
var hash = md4.create();
hash.update('Message to hash');
hash.hex();
```

@@ -33,63 +36,31 @@ If you use node.js, you should require the module first:

```
## Example
Code
It supports AMD:
```JavaScript
md4('');
md4('The quick brown fox jumps over the lazy dog');
md4('The quick brown fox jumps over the lazy dog.');
require(['your/path/md4.js'], function(md4) {
// ...
});
```
Output
[See document](https://emn178.github.com/js-md4/doc/)
31d6cfe0d16ae931b73c59d7e0c089c0
1bee69a46ba811185c194762abaeae90
2812c6c7136898c51f6f6739ad08750e
It also supports UTF-8 encoding:
Code
## Example
```JavaScript
md4('中文');
```
Output
md4(''); // 31d6cfe0d16ae931b73c59d7e0c089c0
md4('The quick brown fox jumps over the lazy dog'); // 1bee69a46ba811185c194762abaeae90
md4('The quick brown fox jumps over the lazy dog.'); // 2812c6c7136898c51f6f6739ad08750e
223088bf7bd45a16436b15360c5fc5a0
// It also supports UTF-8 encoding
md4('中文'); // 223088bf7bd45a16436b15360c5fc5a0
It also supports byte `Array`, `Uint8Array`, `ArrayBuffer` input:
// It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`
md4([]); // 31d6cfe0d16ae931b73c59d7e0c089c0
md4(new Uint8Array([])); // 31d6cfe0d16ae931b73c59d7e0c089c0
Code
```JavaScript
md4([]);
md4(new Uint8Array([]));
// Different output
md4(''); // 31d6cfe0d16ae931b73c59d7e0c089c0
md4.hex(''); // 31d6cfe0d16ae931b73c59d7e0c089c0
md4.array(''); // [49, 214, 207, 224, 209, 106, 233, 49, 183, 60, 89, 215, 224, 192, 137, 192]
md4.digest(''); // [49, 214, 207, 224, 209, 106, 233, 49, 183, 60, 89, 215, 224, 192, 137, 192]
md4.buffer(''); // ArrayBuffer
```
Output
31d6cfe0d16ae931b73c59d7e0c089c0
31d6cfe0d16ae931b73c59d7e0c089c0
## Extensions
### jQuery
If you prefer jQuery style, you can add following code to add a jQuery extension.
Code
```JavaScript
jQuery.md4 = md4
```
And then you could use like this:
```JavaScript
$.md4('message');
```
### Prototype
If you prefer prototype style, you can add following code to add a prototype extension.
Code
```JavaScript
String.prototype.md4 = function() {
return md4(this);
};
```
And then you could use like this:
```JavaScript
'message'.md4();
```
## License

@@ -100,2 +71,2 @@ The project is released under the [MIT license](http://www.opensource.org/licenses/MIT).

The project's website is located at https://github.com/emn178/js-md4
Author: emn178@gmail.com
Author: Yi-Cyuan Chen

@@ -1,15 +0,15 @@

/*
* js-md4 v0.2.0
* https://github.com/emn178/js-md4
/**
* [js-md4]{@link https://github.com/emn178/js-md4}
*
* Copyright 2015, emn178@gmail.com
*
* @license under the MIT license:
* http://www.opensource.org/licenses/MIT
* @namespace md4
* @version 0.3.0
* @author Yi-Cyuan Chen [emn178@gmail.com]
* @copyright Yi-Cyuan Chen 2015
* @license MIT
*/
;(function(root) {
(function (root) {
'use strict';
var NODE_JS = typeof process == 'object' && process.versions && process.versions.node;
if(NODE_JS) {
if (NODE_JS) {
root = global;

@@ -24,5 +24,6 @@ }

var SHIFT = [0, 8, 16, 24];
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer'];
var blocks = [], buffer8;
if(ARRAY_BUFFER) {
if (ARRAY_BUFFER) {
var buffer = new ArrayBuffer(68);

@@ -33,25 +34,147 @@ buffer8 = new Uint8Array(buffer);

var md4 = function(message) {
var notString = typeof(message) != 'string';
if(notString && message.constructor == ArrayBuffer) {
message = new Uint8Array(message);
/**
* @method hex
* @memberof md4
* @description Output hash as hex string
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} Hex string
* @example
* md4.hex('The quick brown fox jumps over the lazy dog');
* // equal to
* md4('The quick brown fox jumps over the lazy dog');
*/
/**
* @method digest
* @memberof md4
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md4.digest('The quick brown fox jumps over the lazy dog');
*/
/**
* @method array
* @memberof md4
* @description Output hash as bytes array
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Array} Bytes array
* @example
* md4.array('The quick brown fox jumps over the lazy dog');
*/
/**
* @method buffer
* @memberof md4
* @description Output hash as ArrayBuffer
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {ArrayBuffer} ArrayBuffer
* @example
* md4.buffer('The quick brown fox jumps over the lazy dog');
*/
var createOutputMethod = function (outputType) {
return function(message) {
return new Md4(true).update(message)[outputType]();
}
};
var h0, h1, h2, h3, a, b, c, d, ab, bc, cd, da, code, first = true, end = false,
index = 0, i, start = 0, bytes = 0, length = message.length || 0;
/**
* @method create
* @memberof md4
* @description Create Md4 object
* @returns {Md4} MD4 object.
* @example
* var hash = md4.create();
*/
/**
* @method update
* @memberof md4
* @description Create and update Md4 object
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Md4} MD4 object.
* @example
* var hash = md4.update('The quick brown fox jumps over the lazy dog');
* // equal to
* var hash = md4.create();
* hash.update('The quick brown fox jumps over the lazy dog');
*/
var createMethod = function () {
var method = createOutputMethod('hex');
method.create = function () {
return new Md4();
};
method.update = function (message) {
return method.create().update(message);
};
for (var i = 0;i < OUTPUT_TYPES.length;++i) {
var type = OUTPUT_TYPES[i];
method[type] = createOutputMethod(type);
}
return method;
};
blocks[16] = 0;
do {
blocks[0] = blocks[16];
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
/**
* Md4 class
* @class Md4
* @description This is internal class.
* @see {@link md4.create}
*/
function Md4(sharedMemory) {
if (sharedMemory) {
blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
if(notString) {
if(ARRAY_BUFFER) {
for (i = start;index < length && i < 64; ++index) {
this.blocks = blocks;
this.buffer8 = buffer8;
} else {
if (ARRAY_BUFFER) {
var buffer = new ArrayBuffer(68);
this.buffer8 = new Uint8Array(buffer);
this.blocks = new Uint32Array(buffer);
} else {
this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
}
}
this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = 0;
this.finalized = this.hashed = false;
this.first = true;
}
/**
* @method update
* @memberof Md4
* @instance
* @description Update hash
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {Md4} MD4 object.
* @see {@link md4.update}
*/
Md4.prototype.update = function (message) {
if (this.finalized) {
return;
}
var notString = typeof(message) != 'string';
if(notString && message.constructor == root.ArrayBuffer) {
message = new Uint8Array(message);
}
var code, index = 0, i, length = message.length || 0, blocks = this.blocks;
var buffer8 = this.buffer8;
while (index < length) {
if (this.hashed) {
this.hashed = false;
blocks[0] = blocks[16];
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
}
if (notString) {
if (ARRAY_BUFFER) {
for (i = this.start;index < length && i < 64; ++index) {
buffer8[i++] = message[index];
}
} else {
for (i = start;index < length && i < 64; ++index) {
for (i = this.start;index < length && i < 64; ++index) {
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];

@@ -61,4 +184,4 @@ }

} else {
if(ARRAY_BUFFER) {
for (i = start;index < length && i < 64; ++index) {
if (ARRAY_BUFFER) {
for (i = this.start;index < length && i < 64; ++index) {
code = message.charCodeAt(index);

@@ -83,3 +206,3 @@ if (code < 0x80) {

} else {
for (i = start;index < length && i < 64; ++index) {
for (i = this.start;index < length && i < 64; ++index) {
code = message.charCodeAt(index);

@@ -105,164 +228,205 @@ if (code < 0x80) {

}
bytes += i - start;
start = i - 64;
if(index == length) {
blocks[i >> 2] |= EXTRA[i & 3];
++index;
this.lastByteIndex = i;
this.bytes += i - this.start;
if (i >= 64) {
this.start = i - 64;
this.hash();
this.hashed = true;
} else {
this.start = i;
}
if(index > length && i < 56) {
blocks[14] = bytes << 3;
end = true;
}
return this;
};
Md4.prototype.finalize = function () {
if (this.finalized) {
return;
}
this.finalized = true;
var blocks = this.blocks, i = this.lastByteIndex;
blocks[i >> 2] |= EXTRA[i & 3];
if (i >= 56) {
if (!this.hashed) {
this.hash();
}
blocks[0] = blocks[16];
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
}
blocks[14] = this.bytes << 3;
this.hash();
};
if(first) {
a = blocks[0] - 1;
a = (a << 3) | (a >>> 29);
d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878;
d = (d << 7) | (d >>> 25);
c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194;
c = (c << 11) | (c >>> 21);
b = ((c & d) | (~c & a)) + blocks[3] - 271733879;
b = (b << 19) | (b >>> 13);
} else {
a = h0;
b = h1;
c = h2;
d = h3;
a += ((b & c) | (~b & d)) + blocks[0];
a = (a << 3) | (a >>> 29);
d += ((a & b) | (~a & c)) + blocks[1];
d = (d << 7) | (d >>> 25);
c += ((d & a) | (~d & b)) + blocks[2];
c = (c << 11) | (c >>> 21);
b += ((c & d) | (~c & a)) + blocks[3];
b = (b << 19) | (b >>> 13);
}
a += ((b & c) | (~b & d)) + blocks[4];
Md4.prototype.hash = function () {
var a, b, c, d, ab, bc, cd, da, blocks = this.blocks;
if (this.first) {
a = blocks[0] - 1;
a = (a << 3) | (a >>> 29);
d += ((a & b) | (~a & c)) + blocks[5];
d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878;
d = (d << 7) | (d >>> 25);
c += ((d & a) | (~d & b)) + blocks[6];
c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194;
c = (c << 11) | (c >>> 21);
b += ((c & d) | (~c & a)) + blocks[7];
b = ((c & d) | (~c & a)) + blocks[3] - 271733879;
b = (b << 19) | (b >>> 13);
a += ((b & c) | (~b & d)) + blocks[8];
} else {
a = this.h0;
b = this.h1;
c = this.h2;
d = this.h3;
a += ((b & c) | (~b & d)) + blocks[0];
a = (a << 3) | (a >>> 29);
d += ((a & b) | (~a & c)) + blocks[9];
d += ((a & b) | (~a & c)) + blocks[1];
d = (d << 7) | (d >>> 25);
c += ((d & a) | (~d & b)) + blocks[10];
c += ((d & a) | (~d & b)) + blocks[2];
c = (c << 11) | (c >>> 21);
b += ((c & d) | (~c & a)) + blocks[11];
b += ((c & d) | (~c & a)) + blocks[3];
b = (b << 19) | (b >>> 13);
a += ((b & c) | (~b & d)) + blocks[12];
a = (a << 3) | (a >>> 29);
d += ((a & b) | (~a & c)) + blocks[13];
d = (d << 7) | (d >>> 25);
c += ((d & a) | (~d & b)) + blocks[14];
c = (c << 11) | (c >>> 21);
b += ((c & d) | (~c & a)) + blocks[15];
b = (b << 19) | (b >>> 13);
}
a += ((b & c) | (~b & d)) + blocks[4];
a = (a << 3) | (a >>> 29);
d += ((a & b) | (~a & c)) + blocks[5];
d = (d << 7) | (d >>> 25);
c += ((d & a) | (~d & b)) + blocks[6];
c = (c << 11) | (c >>> 21);
b += ((c & d) | (~c & a)) + blocks[7];
b = (b << 19) | (b >>> 13);
a += ((b & c) | (~b & d)) + blocks[8];
a = (a << 3) | (a >>> 29);
d += ((a & b) | (~a & c)) + blocks[9];
d = (d << 7) | (d >>> 25);
c += ((d & a) | (~d & b)) + blocks[10];
c = (c << 11) | (c >>> 21);
b += ((c & d) | (~c & a)) + blocks[11];
b = (b << 19) | (b >>> 13);
a += ((b & c) | (~b & d)) + blocks[12];
a = (a << 3) | (a >>> 29);
d += ((a & b) | (~a & c)) + blocks[13];
d = (d << 7) | (d >>> 25);
c += ((d & a) | (~d & b)) + blocks[14];
c = (c << 11) | (c >>> 21);
b += ((c & d) | (~c & a)) + blocks[15];
b = (b << 19) | (b >>> 13);
bc = b & c;
a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249;
a = (a << 3) | (a >>> 29);
ab = a & b;
d += (ab | (a & c) | bc) + blocks[4] + 1518500249;
d = (d << 5) | (d >>> 27);
da = d & a;
c += (da | (d & b) | ab) + blocks[8] + 1518500249;
c = (c << 9) | (c >>> 23);
cd = c & d;
b += (cd | (c & a) | da) + blocks[12] + 1518500249;
b = (b << 13) | (b >>> 19);
bc = b & c;
a += (bc | (b & d) | cd) + blocks[1] + 1518500249;
a = (a << 3) | (a >>> 29);
ab = a & b;
d += (ab | (a & c) | bc) + blocks[5] + 1518500249;
d = (d << 5) | (d >>> 27);
da = d & a;
c += (da | (d & b) | ab) + blocks[9] + 1518500249;
c = (c << 9) | (c >>> 23);
cd = c & d;
b += (cd | (c & a) | da) + blocks[13] + 1518500249;
b = (b << 13) | (b >>> 19);
bc = b & c;
a += (bc | (b & d) | cd) + blocks[2] + 1518500249;
a = (a << 3) | (a >>> 29);
ab = a & b;
d += (ab | (a & c) | bc) + blocks[6] + 1518500249;
d = (d << 5) | (d >>> 27);
da = d & a;
c += (da | (d & b) | ab) + blocks[10] + 1518500249;
c = (c << 9) | (c >>> 23);
cd = c & d;
b += (cd | (c & a) | da) + blocks[14] + 1518500249;
b = (b << 13) | (b >>> 19);
bc = b & c;
a += (bc | (b & d) | cd) + blocks[3] + 1518500249;
a = (a << 3) | (a >>> 29);
ab = a & b;
d += (ab | (a & c) | bc) + blocks[7] + 1518500249;
d = (d << 5) | (d >>> 27);
da = d & a;
c += (da | (d & b) | ab) + blocks[11] + 1518500249;
c = (c << 9) | (c >>> 23);
b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249;
b = (b << 13) | (b >>> 19);
bc = b & c;
a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249;
a = (a << 3) | (a >>> 29);
ab = a & b;
d += (ab | (a & c) | bc) + blocks[4] + 1518500249;
d = (d << 5) | (d >>> 27);
da = d & a;
c += (da | (d & b) | ab) + blocks[8] + 1518500249;
c = (c << 9) | (c >>> 23);
cd = c & d;
b += (cd | (c & a) | da) + blocks[12] + 1518500249;
b = (b << 13) | (b >>> 19);
bc = b & c;
a += (bc | (b & d) | cd) + blocks[1] + 1518500249;
a = (a << 3) | (a >>> 29);
ab = a & b;
d += (ab | (a & c) | bc) + blocks[5] + 1518500249;
d = (d << 5) | (d >>> 27);
da = d & a;
c += (da | (d & b) | ab) + blocks[9] + 1518500249;
c = (c << 9) | (c >>> 23);
cd = c & d;
b += (cd | (c & a) | da) + blocks[13] + 1518500249;
b = (b << 13) | (b >>> 19);
bc = b & c;
a += (bc | (b & d) | cd) + blocks[2] + 1518500249;
a = (a << 3) | (a >>> 29);
ab = a & b;
d += (ab | (a & c) | bc) + blocks[6] + 1518500249;
d = (d << 5) | (d >>> 27);
da = d & a;
c += (da | (d & b) | ab) + blocks[10] + 1518500249;
c = (c << 9) | (c >>> 23);
cd = c & d;
b += (cd | (c & a) | da) + blocks[14] + 1518500249;
b = (b << 13) | (b >>> 19);
bc = b & c;
a += (bc | (b & d) | cd) + blocks[3] + 1518500249;
a = (a << 3) | (a >>> 29);
ab = a & b;
d += (ab | (a & c) | bc) + blocks[7] + 1518500249;
d = (d << 5) | (d >>> 27);
da = d & a;
c += (da | (d & b) | ab) + blocks[11] + 1518500249;
c = (c << 9) | (c >>> 23);
b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249;
b = (b << 13) | (b >>> 19);
bc = b ^ c;
a += (bc ^ d) + blocks[0] + 1859775393;
a = (a << 3) | (a >>> 29);
d += (bc ^ a) + blocks[8] + 1859775393;
d = (d << 9) | (d >>> 23);
da = d ^ a;
c += (da ^ b) + blocks[4] + 1859775393;
c = (c << 11) | (c >>> 21);
b += (da ^ c) + blocks[12] + 1859775393;
b = (b << 15) | (b >>> 17);
bc = b ^ c;
a += (bc ^ d) + blocks[2] + 1859775393;
a = (a << 3) | (a >>> 29);
d += (bc ^ a) + blocks[10] + 1859775393;
d = (d << 9) | (d >>> 23);
da = d ^ a;
c += (da ^ b) + blocks[6] + 1859775393;
c = (c << 11) | (c >>> 21);
b += (da ^ c) + blocks[14] + 1859775393;
b = (b << 15) | (b >>> 17);
bc = b ^ c;
a += (bc ^ d) + blocks[1] + 1859775393;
a = (a << 3) | (a >>> 29);
d += (bc ^ a) + blocks[9] + 1859775393;
d = (d << 9) | (d >>> 23);
da = d ^ a;
c += (da ^ b) + blocks[5] + 1859775393;
c = (c << 11) | (c >>> 21);
b += (da ^ c) + blocks[13] + 1859775393;
b = (b << 15) | (b >>> 17);
bc = b ^ c;
a += (bc ^ d) + blocks[3] + 1859775393;
a = (a << 3) | (a >>> 29);
d += (bc ^ a) + blocks[11] + 1859775393;
d = (d << 9) | (d >>> 23);
da = d ^ a;
c += (da ^ b) + blocks[7] + 1859775393;
c = (c << 11) | (c >>> 21);
b += (da ^ c) + blocks[15] + 1859775393;
b = (b << 15) | (b >>> 17);
bc = b ^ c;
a += (bc ^ d) + blocks[0] + 1859775393;
a = (a << 3) | (a >>> 29);
d += (bc ^ a) + blocks[8] + 1859775393;
d = (d << 9) | (d >>> 23);
da = d ^ a;
c += (da ^ b) + blocks[4] + 1859775393;
c = (c << 11) | (c >>> 21);
b += (da ^ c) + blocks[12] + 1859775393;
b = (b << 15) | (b >>> 17);
bc = b ^ c;
a += (bc ^ d) + blocks[2] + 1859775393;
a = (a << 3) | (a >>> 29);
d += (bc ^ a) + blocks[10] + 1859775393;
d = (d << 9) | (d >>> 23);
da = d ^ a;
c += (da ^ b) + blocks[6] + 1859775393;
c = (c << 11) | (c >>> 21);
b += (da ^ c) + blocks[14] + 1859775393;
b = (b << 15) | (b >>> 17);
bc = b ^ c;
a += (bc ^ d) + blocks[1] + 1859775393;
a = (a << 3) | (a >>> 29);
d += (bc ^ a) + blocks[9] + 1859775393;
d = (d << 9) | (d >>> 23);
da = d ^ a;
c += (da ^ b) + blocks[5] + 1859775393;
c = (c << 11) | (c >>> 21);
b += (da ^ c) + blocks[13] + 1859775393;
b = (b << 15) | (b >>> 17);
bc = b ^ c;
a += (bc ^ d) + blocks[3] + 1859775393;
a = (a << 3) | (a >>> 29);
d += (bc ^ a) + blocks[11] + 1859775393;
d = (d << 9) | (d >>> 23);
da = d ^ a;
c += (da ^ b) + blocks[7] + 1859775393;
c = (c << 11) | (c >>> 21);
b += (da ^ c) + blocks[15] + 1859775393;
b = (b << 15) | (b >>> 17);
if(first) {
h0 = a + 1732584193 << 0;
h1 = b - 271733879 << 0;
h2 = c - 1732584194 << 0;
h3 = d + 271733878 << 0;
first = false;
} else {
h0 = h0 + a << 0;
h1 = h1 + b << 0;
h2 = h2 + c << 0;
h3 = h3 + d << 0;
}
} while(!end);
if (this.first) {
this.h0 = a + 1732584193 << 0;
this.h1 = b - 271733879 << 0;
this.h2 = c - 1732584194 << 0;
this.h3 = d + 271733878 << 0;
this.first = false;
} else {
this.h0 = this.h0 + a << 0;
this.h1 = this.h1 + b << 0;
this.h2 = this.h2 + c << 0;
this.h3 = this.h3 + d << 0;
}
};
/**
* @method hex
* @memberof Md4
* @instance
* @description Output hash as hex string
* @returns {String} Hex string
* @see {@link md4.hex}
* @example
* hash.hex();
*/
Md4.prototype.hex = function () {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +

@@ -286,9 +450,96 @@ HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +

if(COMMON_JS) {
module.exports = md4;
/**
* @method toString
* @memberof Md4
* @instance
* @description Output hash as hex string
* @returns {String} Hex string
* @see {@link md4.hex}
* @example
* hash.toString();
*/
Md4.prototype.toString = Md4.prototype.hex;
/**
* @method digest
* @memberof Md4
* @instance
* @description Output hash as bytes array
* @returns {Array} Bytes array
* @see {@link md4.digest}
* @example
* hash.digest();
*/
Md4.prototype.digest = function() {
this.finalize();
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
return [
h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,
h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,
h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,
h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF
];
};
/**
* @method array
* @memberof Md4
* @instance
* @description Output hash as bytes array
* @returns {Array} Bytes array
* @see {@link md4.array}
* @example
* hash.array();
*/
Md4.prototype.array = Md4.prototype.digest;
/**
* @method buffer
* @memberof Md4
* @instance
* @description Output hash as ArrayBuffer
* @returns {ArrayBuffer} ArrayBuffer
* @see {@link md4.buffer}
* @example
* hash.buffer();
*/
Md4.prototype.buffer = function() {
this.finalize();
var buffer = new ArrayBuffer(16);
var blocks = new Uint32Array(buffer);
blocks[0] = this.h0;
blocks[1] = this.h1;
blocks[2] = this.h2;
blocks[3] = this.h3;
return buffer;
};
var exports = createMethod();
if (COMMON_JS) {
module.exports = exports;
} else {
root.md4 = md4;
if(AMD) {
define(function() {
return md4;
/**
* @method md4
* @description MD4 hash function, export to global in browsers.
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
* @returns {String} md4 hashes
* @example
* md4(''); // 31d6cfe0d16ae931b73c59d7e0c089c0
* md4('The quick brown fox jumps over the lazy dog'); // 1bee69a46ba811185c194762abaeae90
* md4('The quick brown fox jumps over the lazy dog.'); // 2812c6c7136898c51f6f6739ad08750e
*
* // It also supports UTF-8 encoding
* md4('中文'); // 223088bf7bd45a16436b15360c5fc5a0
*
* // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`
* md4([]); // 31d6cfe0d16ae931b73c59d7e0c089c0
* md4(new Uint8Array([])); // 31d6cfe0d16ae931b73c59d7e0c089c0
*/
root.md4 = exports;
if (AMD) {
define(function () {
return exports;
});

@@ -295,0 +546,0 @@ }

@@ -0,0 +0,0 @@ md4 = require('../src/md4.js');

(function(md4) {
Array.prototype.toHexString = ArrayBuffer.prototype.toHexString = function () {
var array = new Uint8Array(this);
var hex = '';
for (var i = 0;i < array.length;++i) {
var c = array[i].toString('16');
hex += c.length == 1 ? '0' + c : c;
}
return hex;
};
var testCases = {

@@ -51,18 +61,118 @@ 'ascii': {

describe('#md4', function() {
for(var testCaseName in testCases) {
(function(testCaseName) {
var testCase = testCases[testCaseName];
context('when ' + testCaseName, function() {
for(var hash in testCase) {
(function(message, hash) {
it('should be equal', function() {
expect(md4(message)).to.be(hash);
});
})(testCase[hash], hash);
}
});
})(testCaseName);
var methods = [
{
name: 'md4',
call: md4,
},
{
name: 'md4.hex',
call: md4.hex
},
{
name: 'md4.array',
call: function (message) {
return md4.array(message).toHexString();
}
},
{
name: 'md4.digest',
call: function (message) {
return md4.digest(message).toHexString();
}
},
{
name: 'md4.buffer',
call: function (message) {
return md4.buffer(message).toHexString();
}
}
];
var classMethods = [
{
name: 'create',
call: function (message) {
return md4.create().update(message).toString();
}
},
{
name: 'update',
call: function (message) {
return md4.update(message).toString();
}
},
{
name: 'hex',
call: function (message) {
return md4.update(message).hex();
}
},
{
name: 'array',
call: function (message) {
return md4.update(message).array().toHexString();
}
},
{
name: 'digest',
call: function (message) {
return md4.update(message).digest().toHexString();
}
},
{
name: 'buffer',
call: function (message) {
return md4.update(message).buffer().toHexString();
}
},
{
name: 'finalize',
call: function (message) {
var hash = md4.update(message);
hash.hex();
hash.update(message);
return hash.hex();
}
}
];
methods.forEach(function (method) {
describe('#' + method.name, function() {
for(var testCaseName in testCases) {
(function(testCaseName) {
var testCase = testCases[testCaseName];
context('when ' + testCaseName, function() {
for(var hash in testCase) {
(function(message, hash) {
it('should be equal', function() {
expect(method.call(message)).to.be(hash);
});
})(testCase[hash], hash);
}
});
})(testCaseName);
}
});
});
describe('Md4', function() {
classMethods.forEach(function (method) {
describe('#' + method.name, function() {
for(var testCaseName in testCases) {
(function(testCaseName) {
var testCase = testCases[testCaseName];
context('when ' + testCaseName, function() {
for(var hash in testCase) {
(function(message, hash) {
it('should be equal', function() {
expect(method.call(message)).to.be(hash);
});
})(testCase[hash], hash);
}
});
})(testCaseName);
}
});
});
});
})(md4);

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet