summaryrefslogtreecommitdiffstats
path: root/test/sha512_test_brute_force.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/sha512_test_brute_force.js')
-rw-r--r--test/sha512_test_brute_force.js34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/sha512_test_brute_force.js b/test/sha512_test_brute_force.js
new file mode 100644
index 0000000..11e7159
--- /dev/null
+++ b/test/sha512_test_brute_force.js
@@ -0,0 +1,34 @@
+/**
+ * Test SHA-512 using an ad-hoc iterative technique.
+ * This uses a string buffer which has n characters on the nth iteration.
+ * Each iteration, the buffer is hashed and the hash is converted to a string.
+ * The first two characters of the string are prepended to the buffer, then the
+ * last character of the buffer is removed. This way, neither the beginning nor
+ * the end of the buffer is fixed.
+ *
+ * The hashes from each output step are also hashed together into one final hash.
+ * This is compared against a final hash which was computed with OpenSSL/Node.js.
+ */
+
+new sjcl.test.TestCase("SHA-512 iterative", function (cb) {
+ if (!sjcl.hash.sha512) {
+ this.unimplemented();
+ cb && cb();
+ return;
+ }
+
+ var toBeHashed = "", cumulative = new sjcl.hash.sha512(), hash, thiz=this;
+ browserUtil.cpsIterate(function (i, cbb) {
+ for (var n=100*i; n<100*(i+1); n++) {
+ hash = sjcl.hash.sha512.hash(toBeHashed);
+ hash = sjcl.codec.hex.fromBits(hash);
+ cumulative.update(hash);
+ toBeHashed = (hash.substring(0,2)+toBeHashed).substring(0,n+1);
+ }
+ cbb && cbb();
+ }, 0, 10, true, function () {
+ hash = sjcl.codec.hex.fromBits(cumulative.finalize());
+ thiz.require(hash === "602923787640dd6d77a99b101c379577a4054df2d61f39c74172cafa2d9f5b26a11b40b7ba4cdc87e84a4ab91b85391cb3e1c0200f3e3d5e317486aae7bebbf3");
+ cb && cb();
+ });
+});