diff --git a/src/ReCrypt/Functions/ReCrypt_Functions_MD.bs.js b/src/ReCrypt/Functions/ReCrypt_Functions_MD.bs.js deleted file mode 100644 index 9341273..0000000 --- a/src/ReCrypt/Functions/ReCrypt_Functions_MD.bs.js +++ /dev/null @@ -1,10 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - - -function rotl(x, n) { - return (x << n) | (x >>> (64 - n | 0)) | 0; -} - -exports.rotl = rotl; -/* No side effect */ diff --git a/src/ReCrypt/Functions/ReCrypt_Functions_MD.re b/src/ReCrypt/Functions/ReCrypt_Functions_MD.re deleted file mode 100644 index 70f2d33..0000000 --- a/src/ReCrypt/Functions/ReCrypt_Functions_MD.re +++ /dev/null @@ -1,3 +0,0 @@ -let rotl = (x, n) => { - x lsl n lor x lsr (64 - n); -}; diff --git a/src/ReCrypt/Functions/ReCrypt_Functions_MD.rei b/src/ReCrypt/Functions/ReCrypt_Functions_MD.rei deleted file mode 100644 index 3fce3b8..0000000 --- a/src/ReCrypt/Functions/ReCrypt_Functions_MD.rei +++ /dev/null @@ -1 +0,0 @@ -let rotl: (int, int) => int; diff --git a/src/ReCrypt/Functions/ReCrypt_Functions_SHA1.bs.js b/src/ReCrypt/Functions/ReCrypt_Functions_SHA1.bs.js deleted file mode 100644 index 019a988..0000000 --- a/src/ReCrypt/Functions/ReCrypt_Functions_SHA1.bs.js +++ /dev/null @@ -1,41 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Int32 = require("bs-platform/lib/js/int32.js"); - -function rotl(x, n) { - return (x << n) | (x >>> (64 - n | 0)) | 0; -} - -function change(x, y, z) { - return x & y ^ Int32.lognot(x) & z; -} - -function majority(x, y, z) { - return x & y ^ x & z ^ y & z; -} - -function parity(x, y, z) { - return x ^ y ^ z; -} - -function f(t, x, y, z) { - if (t >= 0 && t <= 19) { - return change(x, y, z); - } else if (t >= 20 && t <= 39) { - return parity(x, y, z); - } else if (t >= 40 && t <= 59) { - return majority(x, y, z); - } else if (t >= 60 && t <= 79) { - return parity(x, y, z); - } else { - return 0; - } -} - -exports.rotl = rotl; -exports.change = change; -exports.majority = majority; -exports.parity = parity; -exports.f = f; -/* No side effect */ diff --git a/src/ReCrypt/Functions/ReCrypt_Functions_SHA1.re b/src/ReCrypt/Functions/ReCrypt_Functions_SHA1.re deleted file mode 100644 index 8d9cb1e..0000000 --- a/src/ReCrypt/Functions/ReCrypt_Functions_SHA1.re +++ /dev/null @@ -1,27 +0,0 @@ -let rotl = (x, n) => { - Int32.logor(Int32.shift_left(x, n), Int32.shift_right_logical(x, 64 - n)); -}; - -let change = (x, y, z) => { - Int32.logand(x, y)->Int32.logxor(Int32.logand(Int32.lognot(x), z)); -}; - -let majority = (x, y, z) => { - Int32.logand(x, y) - ->Int32.logxor(Int32.logand(x, z)) - ->Int32.logxor(Int32.logand(y, z)); -}; - -let parity = (x, y, z) => { - x->Int32.logxor(y)->Int32.logxor(z); -}; - -let f = (t, x, y, z) => { - switch (t) { - | t when t >= 0 && t <= 19 => change(x, y, z) - | t when t >= 20 && t <= 39 => parity(x, y, z) - | t when t >= 40 && t <= 59 => majority(x, y, z) - | t when t >= 60 && t <= 79 => parity(x, y, z) - | _ => 0x00l - }; -}; diff --git a/src/ReCrypt/Functions/ReCrypt_Functions_SHA1.rei b/src/ReCrypt/Functions/ReCrypt_Functions_SHA1.rei deleted file mode 100644 index 359f8b2..0000000 --- a/src/ReCrypt/Functions/ReCrypt_Functions_SHA1.rei +++ /dev/null @@ -1,5 +0,0 @@ -let rotl: (int32, int) => int32; -let change: (int32, int32, int32) => int32; -let majority: (int32, int32, int32) => int32; -let parity: (int32, int32, int32) => int32; -let f: (int, int32, int32, int32) => int32; diff --git a/src/ReCrypt/Functions/ReCrypt_Functions_SHA2.bs.js b/src/ReCrypt/Functions/ReCrypt_Functions_SHA2.bs.js deleted file mode 100644 index a727a19..0000000 --- a/src/ReCrypt/Functions/ReCrypt_Functions_SHA2.bs.js +++ /dev/null @@ -1,86 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Int32 = require("bs-platform/lib/js/int32.js"); -var Int64 = require("bs-platform/lib/js/int64.js"); -var Caml_int64 = require("bs-platform/lib/js/caml_int64.js"); - -function rotr(x, n) { - return (x >>> n) | 0 | (x << (64 - n | 0)); -} - -function change(x, y, z) { - return x & y ^ Int32.lognot(x) & z; -} - -function majority(x, y, z) { - return x & y ^ x & z ^ y & z; -} - -function sum0(x) { - return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); -} - -function sum1(x) { - return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); -} - -function sigma0(x) { - return rotr(x, 7) ^ rotr(x, 18) ^ (x >>> 3); -} - -function sigma1(x) { - return rotr(x, 17) ^ rotr(x, 19) ^ (x >>> 10); -} - -var Int32$1 = { - rotr: rotr, - change: change, - majority: majority, - sum0: sum0, - sum1: sum1, - sigma0: sigma0, - sigma1: sigma1 -}; - -function rotr$1(x, n) { - return Caml_int64.or_(Caml_int64.lsr_(x, n), Caml_int64.lsl_(x, 64 - n | 0)); -} - -function change$1(x, y, z) { - return Caml_int64.xor(Caml_int64.and_(x, y), Caml_int64.and_(Int64.lognot(x), z)); -} - -function majority$1(x, y, z) { - return Caml_int64.xor(Caml_int64.xor(Caml_int64.and_(x, y), Caml_int64.and_(x, z)), Caml_int64.and_(y, z)); -} - -function sum0$1(x) { - return Caml_int64.xor(Caml_int64.xor(rotr$1(x, 28), rotr$1(x, 34)), rotr$1(x, 39)); -} - -function sum1$1(x) { - return Caml_int64.xor(Caml_int64.xor(rotr$1(x, 14), rotr$1(x, 18)), rotr$1(x, 41)); -} - -function sigma0$1(x) { - return Caml_int64.xor(Caml_int64.xor(rotr$1(x, 1), rotr$1(x, 8)), Caml_int64.lsr_(x, 7)); -} - -function sigma1$1(x) { - return Caml_int64.xor(Caml_int64.xor(rotr$1(x, 19), rotr$1(x, 61)), Caml_int64.lsr_(x, 6)); -} - -var Int64$1 = { - rotr: rotr$1, - change: change$1, - majority: majority$1, - sum0: sum0$1, - sum1: sum1$1, - sigma0: sigma0$1, - sigma1: sigma1$1 -}; - -exports.Int32 = Int32$1; -exports.Int64 = Int64$1; -/* No side effect */ diff --git a/src/ReCrypt/Functions/ReCrypt_Functions_SHA2.re b/src/ReCrypt/Functions/ReCrypt_Functions_SHA2.re deleted file mode 100644 index 552a76c..0000000 --- a/src/ReCrypt/Functions/ReCrypt_Functions_SHA2.re +++ /dev/null @@ -1,77 +0,0 @@ -module Int32 = { - let rotr = (x, n) => { - Int32.logor( - Int32.shift_right_logical(x, n), - Int32.shift_left(x, 64 - n), - ); - }; - - let change = (x, y, z) => { - Int32.logand(x, y)->Int32.logxor(Int32.logand(Int32.lognot(x), z)); - }; - - let majority = (x, y, z) => { - Int32.logand(x, y) - ->Int32.logxor(Int32.logand(x, z)) - ->Int32.logxor(Int32.logand(y, z)); - }; - - let sum0 = x => { - rotr(x, 2)->Int32.logxor(rotr(x, 13))->Int32.logxor(rotr(x, 22)); - }; - - let sum1 = x => { - rotr(x, 6)->Int32.logxor(rotr(x, 11))->Int32.logxor(rotr(x, 25)); - }; - - let sigma0 = x => { - rotr(x, 7) - ->Int32.logxor(rotr(x, 18)) - ->Int32.logxor(Int32.shift_right_logical(x, 3)); - }; - - let sigma1 = x => { - rotr(x, 17) - ->Int32.logxor(rotr(x, 19)) - ->Int32.logxor(Int32.shift_right_logical(x, 10)); - }; -}; - -module Int64 = { - let rotr = (x, n) => { - Int64.logor( - Int64.shift_right_logical(x, n), - Int64.shift_left(x, 64 - n), - ); - }; - - let change = (x, y, z) => { - Int64.logand(x, y)->Int64.logxor(Int64.logand(Int64.lognot(x), z)); - }; - - let majority = (x, y, z) => { - Int64.logand(x, y) - ->Int64.logxor(Int64.logand(x, z)) - ->Int64.logxor(Int64.logand(y, z)); - }; - - let sum0 = x => { - rotr(x, 28)->Int64.logxor(rotr(x, 34))->Int64.logxor(rotr(x, 39)); - }; - - let sum1 = x => { - rotr(x, 14)->Int64.logxor(rotr(x, 18))->Int64.logxor(rotr(x, 41)); - }; - - let sigma0 = x => { - rotr(x, 1) - ->Int64.logxor(rotr(x, 8)) - ->Int64.logxor(Int64.shift_right_logical(x, 7)); - }; - - let sigma1 = x => { - rotr(x, 19) - ->Int64.logxor(rotr(x, 61)) - ->Int64.logxor(Int64.shift_right_logical(x, 6)); - }; -}; diff --git a/src/ReCrypt/Functions/ReCrypt_Functions_SHA2.rei b/src/ReCrypt/Functions/ReCrypt_Functions_SHA2.rei deleted file mode 100644 index f8d54cc..0000000 --- a/src/ReCrypt/Functions/ReCrypt_Functions_SHA2.rei +++ /dev/null @@ -1,18 +0,0 @@ -module Int32: { - let rotr: (int32, int) => int32; - let change: (int32, int32, int32) => int32; - let majority: (int32, int32, int32) => int32; - let sum0: int32 => int32; - let sum1: int32 => int32; - let sigma0: int32 => int32; - let sigma1: int32 => int32; -}; -module Int64: { - let rotr: (int64, int) => int64; - let change: (int64, int64, int64) => int64; - let majority: (int64, int64, int64) => int64; - let sum0: int64 => int64; - let sum1: int64 => int64; - let sigma0: int64 => int64; - let sigma1: int64 => int64; -}; diff --git a/src/ReCrypt/MD5/ReCrypt_MD5_Constants.bs.js b/src/ReCrypt/MD5/ReCrypt_MD5_Constants.bs.js deleted file mode 100644 index b3ccd88..0000000 --- a/src/ReCrypt/MD5/ReCrypt_MD5_Constants.bs.js +++ /dev/null @@ -1,93 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - - -var k = [ - -680876936, - -389564586, - 606105819, - -1044525330, - -176418897, - 1200080426, - -1473231341, - -45705983, - 1770035416, - -1958414417, - -42063, - -1990404162, - 1804603682, - -40341101, - -1502002290, - 1236535329, - -165796510, - -1069501632, - 643717713, - -373897302, - -701558691, - 38016083, - -660478335, - -405537848, - 568446438, - -1019803690, - -187363961, - 1163531501, - -1444681467, - -51403784, - 1735328473, - -1926607734, - -378558, - -2022574463, - 1839030562, - -35309556, - -1530992060, - 1272893353, - -155497632, - -1094730640, - 681279174, - -358537222, - -722521979, - 76029189, - -640364487, - -421815835, - 530742520, - -995338651, - -198630844, - 1126891415, - -1416354905, - -57434055, - 1700485571, - -1894986606, - -1051523, - -2054922799, - 1873313359, - -30611744, - -1560198380, - 1309151649, - -145523070, - -1120210379, - 718787259, - -343485551 -]; - -var s = [ - 7, - 12, - 17, - 22, - 5, - 9, - 14, - 20, - 4, - 11, - 16, - 23, - 6, - 10, - 15, - 21 -]; - -exports.k = k; -exports.s = s; -/* No side effect */ diff --git a/src/ReCrypt/MD5/ReCrypt_MD5_Constants.re b/src/ReCrypt/MD5/ReCrypt_MD5_Constants.re deleted file mode 100644 index 85f1d3d..0000000 --- a/src/ReCrypt/MD5/ReCrypt_MD5_Constants.re +++ /dev/null @@ -1,68 +0,0 @@ -let k = [| - 0xd76aa478, - 0xe8c7b756, - 0x242070db, - 0xc1bdceee, - 0xf57c0faf, - 0x4787c62a, - 0xa8304613, - 0xfd469501, - 0x698098d8, - 0x8b44f7af, - 0xffff5bb1, - 0x895cd7be, - 0x6b901122, - 0xfd987193, - 0xa679438e, - 0x49b40821, - 0xf61e2562, - 0xc040b340, - 0x265e5a51, - 0xe9b6c7aa, - 0xd62f105d, - 0x02441453, - 0xd8a1e681, - 0xe7d3fbc8, - 0x21e1cde6, - 0xc33707d6, - 0xf4d50d87, - 0x455a14ed, - 0xa9e3e905, - 0xfcefa3f8, - 0x676f02d9, - 0x8d2a4c8a, - 0xfffa3942, - 0x8771f681, - 0x6d9d6122, - 0xfde5380c, - 0xa4beea44, - 0x4bdecfa9, - 0xf6bb4b60, - 0xbebfbc70, - 0x289b7ec6, - 0xeaa127fa, - 0xd4ef3085, - 0x04881d05, - 0xd9d4d039, - 0xe6db99e5, - 0x1fa27cf8, - 0xc4ac5665, - 0xf4292244, - 0x432aff97, - 0xab9423a7, - 0xfc93a039, - 0x655b59c3, - 0x8f0ccc92, - 0xffeff47d, - 0x85845dd1, - 0x6fa87e4f, - 0xfe2ce6e0, - 0xa3014314, - 0x4e0811a1, - 0xf7537e82, - 0xbd3af235, - 0x2ad7d2bb, - 0xeb86d391, -|]; - -let s = [|7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21|]; diff --git a/src/ReCrypt/MD5/ReCrypt_MD5_Constants.rei b/src/ReCrypt/MD5/ReCrypt_MD5_Constants.rei deleted file mode 100644 index 26f607e..0000000 --- a/src/ReCrypt/MD5/ReCrypt_MD5_Constants.rei +++ /dev/null @@ -1,2 +0,0 @@ -let k: array(int); -let s: array(int); diff --git a/src/ReCrypt/MD5/ReCrypt_MD5_Preprocess.bs.js b/src/ReCrypt/MD5/ReCrypt_MD5_Preprocess.bs.js deleted file mode 100644 index 89b4137..0000000 --- a/src/ReCrypt/MD5/ReCrypt_MD5_Preprocess.bs.js +++ /dev/null @@ -1,30 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); - -function pad(msg) { - var size = (msg.length + 8 | 0) + 1 | 0; - while(size % 64 !== 0) { - size = size + 1 | 0; - }; - var length = msg.length; - var bytes = Belt_Array.makeBy(size, (function (index) { - if (index < length) { - return msg.charCodeAt(index) | 0; - } else if (index === length) { - return 128; - } else { - return 0; - } - })); - var va = (length << 3); - for(var i = 0; i <= 7; ++i){ - Belt_Array.set(bytes, i + (size - 8 | 0) | 0, va & 255); - va = (va >>> 8); - } - return bytes; -} - -exports.pad = pad; -/* No side effect */ diff --git a/src/ReCrypt/MD5/ReCrypt_MD5_Preprocess.re b/src/ReCrypt/MD5/ReCrypt_MD5_Preprocess.re deleted file mode 100644 index 212d8ce..0000000 --- a/src/ReCrypt/MD5/ReCrypt_MD5_Preprocess.re +++ /dev/null @@ -1,26 +0,0 @@ -let pad = msg => { - let size = ref(Js.String.length(msg) + 8 + 1); - while (size^ mod 64 != 0) { - size := size^ + 1; - }; - - let length = Js.String.length(msg); - - let bytes = - Belt.Array.makeBy(size^, index => - switch (index) { - | i when i < length => - msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat - | i when i == length => 0x80 - | _ => 0x00 - } - ); - - let va = ref(length * 8); - for (i in 0 to 7) { - bytes->Belt.Array.set(i + (size^ - 8), va^ land 255)->ignore; - va := va^ lsr 8; - }; - - bytes; -}; diff --git a/src/ReCrypt/MD5/ReCrypt_MD5_Preprocess.rei b/src/ReCrypt/MD5/ReCrypt_MD5_Preprocess.rei deleted file mode 100644 index 0a00697..0000000 --- a/src/ReCrypt/MD5/ReCrypt_MD5_Preprocess.rei +++ /dev/null @@ -1 +0,0 @@ -let pad: Js.String.t => array(int); diff --git a/src/ReCrypt/MD5/ReCrypt_MD5_Process.bs.js b/src/ReCrypt/MD5/ReCrypt_MD5_Process.bs.js deleted file mode 100644 index 2275175..0000000 --- a/src/ReCrypt/MD5/ReCrypt_MD5_Process.bs.js +++ /dev/null @@ -1,63 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); -var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); -var ReCrypt_Utils = require("../ReCrypt_Utils.bs.js"); -var ReCrypt_Functions_MD = require("../Functions/ReCrypt_Functions_MD.bs.js"); -var ReCrypt_MD5_Constants = require("./ReCrypt_MD5_Constants.bs.js"); - -function make(message) { - var chunks = ((message.length + 8 | 0) >> 6); - var a = { - contents: 1732584193 - }; - var b = { - contents: -271733879 - }; - var c = { - contents: -1732584194 - }; - var d = { - contents: 271733878 - }; - var w = Belt_Array.make(16, 0); - for(var i = 0; i < chunks; ++i){ - for(var j = 0; j <= 63; ++j){ - var result = (Belt_Option.getWithDefault(Belt_Array.get(message, (i << 6) + j | 0), 0) << 24) | (Belt_Option.getWithDefault(Belt_Array.get(w, (j >>> 2)), 0) >>> 8); - Belt_Array.set(w, (j >>> 2), result); - } - var originalA = a.contents; - var originalB = b.contents; - var originalC = c.contents; - var originalD = d.contents; - Belt_Array.forEachWithIndex(ReCrypt_MD5_Constants.k, (function (j, k) { - var f = 0 <= j && j <= 15 ? b.contents & c.contents | (b.contents ^ -1) & d.contents : ( - 16 <= j && j <= 31 ? b.contents & d.contents | c.contents & (d.contents ^ -1) : ( - 32 <= j && j <= 47 ? b.contents ^ c.contents ^ d.contents : c.contents ^ (b.contents | d.contents ^ -1) - ) - ); - var g = 0 <= j && j <= 15 ? j : ( - 16 <= j && j <= 31 ? (Math.imul(5, j) + 1 | 0) % 16 : ( - 32 <= j && j <= 47 ? (Math.imul(3, j) + 5 | 0) % 16 : Math.imul(7, j) % 16 - ) - ); - var temp = b.contents + ReCrypt_Functions_MD.rotl(((a.contents + f | 0) + Belt_Option.getWithDefault(Belt_Array.get(w, g), 0) | 0) + k | 0, Belt_Option.getWithDefault(Belt_Array.get(ReCrypt_MD5_Constants.s, ((j >>> 4) << 2) | j & 3), 0)) | 0; - a.contents = d.contents; - d.contents = c.contents; - c.contents = b.contents; - b.contents = temp; - - })); - a.contents = originalA + a.contents | 0; - b.contents = originalB + b.contents | 0; - c.contents = originalC + c.contents | 0; - d.contents = originalD + d.contents | 0; - } - return ReCrypt_Utils.stringToHex(Belt_Array.reduce(ReCrypt_Utils.append(ReCrypt_Utils.append(ReCrypt_Utils.append(ReCrypt_Utils.append(Belt_Array.make(16, 0), a.contents, 0), b.contents, 4), c.contents, 8), d.contents, 12), "", (function (acc, curr) { - return acc + String.fromCharCode(curr); - }))); -} - -exports.make = make; -/* No side effect */ diff --git a/src/ReCrypt/MD5/ReCrypt_MD5_Process.re b/src/ReCrypt/MD5/ReCrypt_MD5_Process.re deleted file mode 100644 index e2c573e..0000000 --- a/src/ReCrypt/MD5/ReCrypt_MD5_Process.re +++ /dev/null @@ -1,78 +0,0 @@ -let make = message => { - let chunks = (Belt.Array.length(message) + 8) asr 6; - - let a = ref(0x67452301); - let b = ref(0xEFCDAB89); - let c = ref(0x98BADCFE); - let d = ref(0x10325476); - - let w = Belt.Array.make(16, 0); - - for (i in 0 to chunks - 1) { - for (j in 0 to 63) { - let result = - Belt.Array.get(message, i lsl 6 + j)->Belt.Option.getWithDefault(0) - lsl 24 - lor Belt.Array.get(w, j lsr 2)->Belt.Option.getWithDefault(0) - lsr 8; - - w->Belt.Array.set(j lsr 2, result)->ignore; - }; - - let originalA = a^; - let originalB = b^; - let originalC = c^; - let originalD = d^; - - ReCrypt_MD5_Constants.k->Belt.Array.forEachWithIndex((j, k) => { - let f = - if (0 <= j && j <= 15) { - b^ land c^ lor (b^ lxor (-1) land d^); - } else if (16 <= j && j <= 31) { - b^ land d^ lor (c^ land (d^ lxor (-1))); - } else if (32 <= j && j <= 47) { - b^ lxor c^ lxor d^; - } else { - c^ lxor (b^ lor (d^ lxor (-1))); - }; - - let g = - if (0 <= j && j <= 15) { - j; - } else if (16 <= j && j <= 31) { - (5 * j + 1) mod 16; - } else if (32 <= j && j <= 47) { - (3 * j + 5) mod 16; - } else { - 7 * j mod 16; - }; - - let temp = - b^ - + ReCrypt_Functions.MD.rotl( - a^ + f + w->Belt.Array.get(g)->Belt.Option.getWithDefault(0) + k, - ReCrypt_MD5_Constants.s - ->Belt.Array.get((j lsr 4) lsl 2 lor (j land 3)) - ->Belt.Option.getWithDefault(0), - ); - - a := d^; - d := c^; - c := b^; - b := temp; - }); - - a := originalA + a^; - b := originalB + b^; - c := originalC + c^; - d := originalD + d^; - }; - - Belt.Array.make(16, 0x00) - ->ReCrypt_Utils.append(a^, 0) - ->ReCrypt_Utils.append(b^, 4) - ->ReCrypt_Utils.append(c^, 8) - ->ReCrypt_Utils.append(d^, 12) - ->Belt.Array.reduce("", (acc, curr) => acc ++ Js.String.fromCharCode(curr)) - ->ReCrypt_Utils.stringToHex; -}; diff --git a/src/ReCrypt/MD5/ReCrypt_MD5_Process.rei b/src/ReCrypt/MD5/ReCrypt_MD5_Process.rei deleted file mode 100644 index a10b982..0000000 --- a/src/ReCrypt/MD5/ReCrypt_MD5_Process.rei +++ /dev/null @@ -1 +0,0 @@ -let make: array(int) => string; diff --git a/src/ReCrypt/ReCrypt_Functions.bs.js b/src/ReCrypt/ReCrypt_Functions.bs.js deleted file mode 100644 index 8e407bc..0000000 --- a/src/ReCrypt/ReCrypt_Functions.bs.js +++ /dev/null @@ -1,14 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - - -var MD; - -var SHA1; - -var SHA2; - -exports.MD = MD; -exports.SHA1 = SHA1; -exports.SHA2 = SHA2; -/* No side effect */ diff --git a/src/ReCrypt/ReCrypt_Functions.re b/src/ReCrypt/ReCrypt_Functions.re deleted file mode 100644 index 6e66fe8..0000000 --- a/src/ReCrypt/ReCrypt_Functions.re +++ /dev/null @@ -1,3 +0,0 @@ -module MD = ReCrypt_Functions_MD; -module SHA1 = ReCrypt_Functions_SHA1; -module SHA2 = ReCrypt_Functions_SHA2; diff --git a/src/ReCrypt/ReCrypt_MD5.bs.js b/src/ReCrypt/ReCrypt_MD5.bs.js index f2d6a9c..f56a709 100644 --- a/src/ReCrypt/ReCrypt_MD5.bs.js +++ b/src/ReCrypt/ReCrypt_MD5.bs.js @@ -1,11 +1,185 @@ // Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE 'use strict'; -var ReCrypt_MD5_Process = require("./MD5/ReCrypt_MD5_Process.bs.js"); -var ReCrypt_MD5_Preprocess = require("./MD5/ReCrypt_MD5_Preprocess.bs.js"); +var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); +var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); + +function rotl(x, n) { + return (x << n) | (x >>> (64 - n | 0)) | 0; +} + +function append(hash, value, offset) { + for(var j = 0; j <= 3; ++j){ + Belt_Array.set(hash, j + offset | 0, (value >>> (j << 3)) & 255); + } + return hash; +} + +var k = [ + -680876936, + -389564586, + 606105819, + -1044525330, + -176418897, + 1200080426, + -1473231341, + -45705983, + 1770035416, + -1958414417, + -42063, + -1990404162, + 1804603682, + -40341101, + -1502002290, + 1236535329, + -165796510, + -1069501632, + 643717713, + -373897302, + -701558691, + 38016083, + -660478335, + -405537848, + 568446438, + -1019803690, + -187363961, + 1163531501, + -1444681467, + -51403784, + 1735328473, + -1926607734, + -378558, + -2022574463, + 1839030562, + -35309556, + -1530992060, + 1272893353, + -155497632, + -1094730640, + 681279174, + -358537222, + -722521979, + 76029189, + -640364487, + -421815835, + 530742520, + -995338651, + -198630844, + 1126891415, + -1416354905, + -57434055, + 1700485571, + -1894986606, + -1051523, + -2054922799, + 1873313359, + -30611744, + -1560198380, + 1309151649, + -145523070, + -1120210379, + 718787259, + -343485551 +]; + +var s = [ + 7, + 12, + 17, + 22, + 5, + 9, + 14, + 20, + 4, + 11, + 16, + 23, + 6, + 10, + 15, + 21 +]; + +function pad(msg) { + var size = (msg.length + 8 | 0) + 1 | 0; + while(size % 64 !== 0) { + size = size + 1 | 0; + }; + var length = msg.length; + var bytes = Belt_Array.makeBy(size, (function (index) { + if (index < length) { + return msg.charCodeAt(index) | 0; + } else if (index === length) { + return 128; + } else { + return 0; + } + })); + var va = (length << 3); + for(var i = 0; i <= 7; ++i){ + Belt_Array.set(bytes, i + (size - 8 | 0) | 0, va & 255); + va = (va >>> 8); + } + return bytes; +} function make(message) { - return ReCrypt_MD5_Process.make(ReCrypt_MD5_Preprocess.pad(message)); + var message$1 = pad(message); + var chunks = ((message$1.length + 8 | 0) >> 6); + var a = { + contents: 1732584193 + }; + var b = { + contents: -271733879 + }; + var c = { + contents: -1732584194 + }; + var d = { + contents: 271733878 + }; + var w = Belt_Array.make(16, 0); + for(var i = 0; i < chunks; ++i){ + for(var j = 0; j <= 63; ++j){ + var result = (Belt_Option.getWithDefault(Belt_Array.get(message$1, (i << 6) + j | 0), 0) << 24) | (Belt_Option.getWithDefault(Belt_Array.get(w, (j >>> 2)), 0) >>> 8); + Belt_Array.set(w, (j >>> 2), result); + } + var originalA = a.contents; + var originalB = b.contents; + var originalC = c.contents; + var originalD = d.contents; + Belt_Array.forEachWithIndex(k, (function (j, k) { + var f = 0 <= j && j <= 15 ? b.contents & c.contents | (b.contents ^ -1) & d.contents : ( + 16 <= j && j <= 31 ? b.contents & d.contents | c.contents & (d.contents ^ -1) : ( + 32 <= j && j <= 47 ? b.contents ^ c.contents ^ d.contents : c.contents ^ (b.contents | d.contents ^ -1) + ) + ); + var g = 0 <= j && j <= 15 ? j : ( + 16 <= j && j <= 31 ? (Math.imul(5, j) + 1 | 0) % 16 : ( + 32 <= j && j <= 47 ? (Math.imul(3, j) + 5 | 0) % 16 : Math.imul(7, j) % 16 + ) + ); + var temp = b.contents + rotl(((a.contents + f | 0) + Belt_Option.getWithDefault(Belt_Array.get(w, g), 0) | 0) + k | 0, Belt_Option.getWithDefault(Belt_Array.get(s, ((j >>> 4) << 2) | j & 3), 0)) | 0; + a.contents = d.contents; + d.contents = c.contents; + c.contents = b.contents; + b.contents = temp; + + })); + a.contents = originalA + a.contents | 0; + b.contents = originalB + b.contents | 0; + c.contents = originalC + c.contents | 0; + d.contents = originalD + d.contents | 0; + } + var input = Belt_Array.reduce(append(append(append(append(Belt_Array.make(16, 0), a.contents, 0), b.contents, 4), c.contents, 8), d.contents, 12), "", (function (acc, curr) { + return acc + String.fromCharCode(curr); + })); + var hex = "0123456789abcdef"; + return Belt_Array.reduce(input.split(""), "", (function (acc, curr) { + var charCode = curr.charCodeAt(0) | 0; + return acc + (hex.charAt((charCode >>> 4) & 15) + hex.charAt(charCode & 15)); + })); } exports.make = make; diff --git a/src/ReCrypt/ReCrypt_MD5.re b/src/ReCrypt/ReCrypt_MD5.re index 89aa957..de503e8 100644 --- a/src/ReCrypt/ReCrypt_MD5.re +++ b/src/ReCrypt/ReCrypt_MD5.re @@ -1,5 +1,216 @@ -module Preprocess = ReCrypt_MD5_Preprocess; -module Process = ReCrypt_MD5_Process; +module Functions = { + let rotl = (x, n) => { + x lsl n lor x lsr (64 - n); + }; +}; + +module Utils = { + let append = (hash, value, offset) => { + for (j in 0 to 3) { + hash->Belt.Array.set(j + offset, value lsr (j * 8) land 0xFF)->ignore; + }; + hash; + }; + + let stringToHex = input => { + let hex = "0123456789abcdef"; + input + ->Js.String2.split("") + ->Belt.Array.reduce("", (acc, curr) => { + let charCode = curr->(Js.String2.charCodeAt(0))->Belt.Int.fromFloat; + + acc + ++ hex->Js.String2.charAt(charCode lsr 4 land 0x0F) + ++ hex->Js.String2.charAt(charCode land 0x0F); + }); + }; +}; + +module Constants = { + let k = [| + 0xd76aa478, + 0xe8c7b756, + 0x242070db, + 0xc1bdceee, + 0xf57c0faf, + 0x4787c62a, + 0xa8304613, + 0xfd469501, + 0x698098d8, + 0x8b44f7af, + 0xffff5bb1, + 0x895cd7be, + 0x6b901122, + 0xfd987193, + 0xa679438e, + 0x49b40821, + 0xf61e2562, + 0xc040b340, + 0x265e5a51, + 0xe9b6c7aa, + 0xd62f105d, + 0x02441453, + 0xd8a1e681, + 0xe7d3fbc8, + 0x21e1cde6, + 0xc33707d6, + 0xf4d50d87, + 0x455a14ed, + 0xa9e3e905, + 0xfcefa3f8, + 0x676f02d9, + 0x8d2a4c8a, + 0xfffa3942, + 0x8771f681, + 0x6d9d6122, + 0xfde5380c, + 0xa4beea44, + 0x4bdecfa9, + 0xf6bb4b60, + 0xbebfbc70, + 0x289b7ec6, + 0xeaa127fa, + 0xd4ef3085, + 0x04881d05, + 0xd9d4d039, + 0xe6db99e5, + 0x1fa27cf8, + 0xc4ac5665, + 0xf4292244, + 0x432aff97, + 0xab9423a7, + 0xfc93a039, + 0x655b59c3, + 0x8f0ccc92, + 0xffeff47d, + 0x85845dd1, + 0x6fa87e4f, + 0xfe2ce6e0, + 0xa3014314, + 0x4e0811a1, + 0xf7537e82, + 0xbd3af235, + 0x2ad7d2bb, + 0xeb86d391, + |]; + + let s = [|7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21|]; +}; + +module Preprocess = { + let pad = msg => { + let size = ref(Js.String.length(msg) + 8 + 1); + while (size^ mod 64 != 0) { + size := size^ + 1; + }; + + let length = Js.String.length(msg); + + let bytes = + Belt.Array.makeBy(size^, index => + switch (index) { + | i when i < length => + msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat + | i when i == length => 0x80 + | _ => 0x00 + } + ); + + let va = ref(length * 8); + for (i in 0 to 7) { + bytes->Belt.Array.set(i + (size^ - 8), va^ land 255)->ignore; + va := va^ lsr 8; + }; + + bytes; + }; +}; + +module Process = { + let make = message => { + let chunks = (Belt.Array.length(message) + 8) asr 6; + + let a = ref(0x67452301); + let b = ref(0xEFCDAB89); + let c = ref(0x98BADCFE); + let d = ref(0x10325476); + + let w = Belt.Array.make(16, 0); + + for (i in 0 to chunks - 1) { + for (j in 0 to 63) { + let result = + Belt.Array.get(message, i lsl 6 + j)->Belt.Option.getWithDefault(0) + lsl 24 + lor Belt.Array.get(w, j lsr 2)->Belt.Option.getWithDefault(0) + lsr 8; + + w->Belt.Array.set(j lsr 2, result)->ignore; + }; + + let originalA = a^; + let originalB = b^; + let originalC = c^; + let originalD = d^; + + Constants.k->Belt.Array.forEachWithIndex((j, k) => { + let f = + if (0 <= j && j <= 15) { + b^ land c^ lor (b^ lxor (-1) land d^); + } else if (16 <= j && j <= 31) { + b^ land d^ lor (c^ land (d^ lxor (-1))); + } else if (32 <= j && j <= 47) { + b^ lxor c^ lxor d^; + } else { + c^ lxor (b^ lor (d^ lxor (-1))); + }; + + let g = + if (0 <= j && j <= 15) { + j; + } else if (16 <= j && j <= 31) { + (5 * j + 1) mod 16; + } else if (32 <= j && j <= 47) { + (3 * j + 5) mod 16; + } else { + 7 * j mod 16; + }; + + let temp = + b^ + + Functions.rotl( + a^ + + f + + w->Belt.Array.get(g)->Belt.Option.getWithDefault(0) + + k, + Constants.s + ->Belt.Array.get((j lsr 4) lsl 2 lor (j land 3)) + ->Belt.Option.getWithDefault(0), + ); + + a := d^; + d := c^; + c := b^; + b := temp; + }); + + a := originalA + a^; + b := originalB + b^; + c := originalC + c^; + d := originalD + d^; + }; + + Belt.Array.make(16, 0x00) + ->Utils.append(a^, 0) + ->Utils.append(b^, 4) + ->Utils.append(c^, 8) + ->Utils.append(d^, 12) + ->Belt.Array.reduce("", (acc, curr) => + acc ++ Js.String.fromCharCode(curr) + ) + ->Utils.stringToHex; + }; +}; let make = message => { message->Preprocess.pad->Process.make; diff --git a/src/ReCrypt/ReCrypt_Sha1.bs.js b/src/ReCrypt/ReCrypt_Sha1.bs.js index e1014a5..0910372 100644 --- a/src/ReCrypt/ReCrypt_Sha1.bs.js +++ b/src/ReCrypt/ReCrypt_Sha1.bs.js @@ -1,11 +1,207 @@ // Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE 'use strict'; -var ReCrypt_Sha1_Process = require("./Sha1/ReCrypt_Sha1_Process.bs.js"); -var ReCrypt_Sha1_Preprocess = require("./Sha1/ReCrypt_Sha1_Preprocess.bs.js"); +var Int32 = require("bs-platform/lib/js/int32.js"); +var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); +var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); + +function rotl(x, n) { + return (x << n) | (x >>> (64 - n | 0)) | 0; +} + +function parity(x, y, z) { + return x ^ y ^ z; +} + +function f(t, x, y, z) { + if (t >= 0 && t <= 19) { + return x & y ^ Int32.lognot(x) & z; + } else if (t >= 20 && t <= 39) { + return parity(x, y, z); + } else if (t >= 40 && t <= 59) { + return x & y ^ x & z ^ y & z; + } else if (t >= 60 && t <= 79) { + return parity(x, y, z); + } else { + return 0; + } +} + +function append32(hash, value, offset) { + for(var j = 0; j <= 3; ++j){ + Belt_Array.set(hash, j + offset | 0, (value >>> (24 - (j << 3) | 0)) & 255); + } + return hash; +} + +var k = [ + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1518500249, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + 1859775393, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -1894007588, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514, + -899497514 +]; + +function pad(msg) { + var size = (msg.length + 8 | 0) + 1 | 0; + while(size % 64 !== 0) { + size = size + 1 | 0; + }; + var length = msg.length; + var bytes = Belt_Array.makeBy(size, (function (index) { + if (index < length) { + return msg.charCodeAt(index) | 0; + } else if (index === length) { + return 128; + } else { + return 0; + } + })); + var va = (length << 3); + for(var i = 1; i <= 15; ++i){ + Belt_Array.set(bytes, bytes.length - i | 0, va & 255); + va = (va >> 8); + } + return bytes; +} function make(message) { - return ReCrypt_Sha1_Process.make(ReCrypt_Sha1_Preprocess.pad(message)); + var message$1 = pad(message); + var chunks = ((message$1.length + 8 | 0) >> 6); + var a = { + contents: 1732584193 + }; + var b = { + contents: -271733879 + }; + var c = { + contents: -1732584194 + }; + var d = { + contents: 271733878 + }; + var e = { + contents: -1009589776 + }; + for(var i = 0; i < chunks; ++i){ + var w = Belt_Array.make(80, 0); + for(var t = 0; t <= 15; ++t){ + var result = (Belt_Option.getWithDefault(Belt_Array.get(message$1, (i << 6) + (t << 2) | 0), 0) << 24) & -16777216 | (Belt_Option.getWithDefault(Belt_Array.get(message$1, ((i << 6) + (t << 2) | 0) + 1 | 0), 0) << 16) & 16711680 | (Belt_Option.getWithDefault(Belt_Array.get(message$1, ((i << 6) + (t << 2) | 0) + 2 | 0), 0) << 8) & 65280 | Belt_Option.getWithDefault(Belt_Array.get(message$1, ((i << 6) + (t << 2) | 0) + 3 | 0), 0) & 255; + Belt_Array.set(w, t, result); + } + for(var t$1 = 16; t$1 <= 79; ++t$1){ + var t3 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 3 | 0), 0); + var t8 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 8 | 0), 0); + var t14 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 14 | 0), 0); + var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), 0); + var result$1 = rotl(t3 ^ t8 ^ t14 ^ t16, 1); + Belt_Array.set(w, t$1, result$1); + } + var originalA = a.contents; + var originalB = b.contents; + var originalC = c.contents; + var originalD = d.contents; + var originalE = e.contents; + Belt_Array.forEachWithIndex(k, (function(w){ + return function (t, k) { + var temp = (((rotl(a.contents, 5) + f(t, b.contents, c.contents, d.contents) | 0) + e.contents | 0) + k | 0) + Belt_Option.getWithDefault(Belt_Array.get(w, t), 0) | 0; + e.contents = d.contents; + d.contents = c.contents; + c.contents = rotl(b.contents, 30); + b.contents = a.contents; + a.contents = temp; + + } + }(w))); + a.contents = originalA + a.contents | 0; + b.contents = originalB + b.contents | 0; + c.contents = originalC + c.contents | 0; + d.contents = originalD + d.contents | 0; + e.contents = originalE + e.contents | 0; + } + var input = Belt_Array.reduce(append32(append32(append32(append32(append32(Belt_Array.make(20, 0), a.contents, 0), b.contents, 4), c.contents, 8), d.contents, 12), e.contents, 16), "", (function (acc, curr) { + return acc + String.fromCharCode(curr); + })); + var hex = "0123456789abcdef"; + return Belt_Array.reduce(input.split(""), "", (function (acc, curr) { + var charCode = curr.charCodeAt(0) | 0; + return acc + (hex.charAt((charCode >>> 4) & 15) + hex.charAt(charCode & 15)); + })); } exports.make = make; diff --git a/src/ReCrypt/ReCrypt_Sha1.re b/src/ReCrypt/ReCrypt_Sha1.re index faaa64d..9d428df 100644 --- a/src/ReCrypt/ReCrypt_Sha1.re +++ b/src/ReCrypt/ReCrypt_Sha1.re @@ -1,5 +1,282 @@ -module Preprocess = ReCrypt_Sha1_Preprocess; -module Process = ReCrypt_Sha1_Process; +module Functions = { + let rotl = (x, n) => { + Int32.logor( + Int32.shift_left(x, n), + Int32.shift_right_logical(x, 64 - n), + ); + }; + + let change = (x, y, z) => { + Int32.logand(x, y)->Int32.logxor(Int32.logand(Int32.lognot(x), z)); + }; + + let majority = (x, y, z) => { + Int32.logand(x, y) + ->Int32.logxor(Int32.logand(x, z)) + ->Int32.logxor(Int32.logand(y, z)); + }; + + let parity = (x, y, z) => { + x->Int32.logxor(y)->Int32.logxor(z); + }; + + let f = (t, x, y, z) => { + switch (t) { + | t when t >= 0 && t <= 19 => change(x, y, z) + | t when t >= 20 && t <= 39 => parity(x, y, z) + | t when t >= 40 && t <= 59 => majority(x, y, z) + | t when t >= 60 && t <= 79 => parity(x, y, z) + | _ => 0x00l + }; + }; +}; + +module Utils = { + let append32 = (hash, value, offset) => { + for (j in 0 to 3) { + hash + ->Belt.Array.set( + j + offset, + Int32.shift_right_logical(value, 24 - j * 8) + ->Int32.logand(0xFFl) + ->Int32.to_int, + ) + ->ignore; + }; + hash; + }; + + let stringToHex = input => { + let hex = "0123456789abcdef"; + input + ->Js.String2.split("") + ->Belt.Array.reduce("", (acc, curr) => { + let charCode = curr->(Js.String2.charCodeAt(0))->Belt.Int.fromFloat; + + acc + ++ hex->Js.String2.charAt(charCode lsr 4 land 0x0F) + ++ hex->Js.String2.charAt(charCode land 0x0F); + }); + }; +}; + +module Constants = { + let k = [| + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x5A827999l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x6ED9EBA1l, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0x8F1BBCDCl, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + 0xCA62C1D6l, + |]; +}; + +module Preprocess = { + let pad = msg => { + let size = ref(Js.String.length(msg) + 8 + 1); + while (size^ mod 64 != 0) { + size := size^ + 1; + }; + + let length = Js.String.length(msg); + + let bytes = + Belt.Array.makeBy(size^, index => + switch (index) { + | i when i < length => + msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat + | i when i == length => 0x80 + | _ => 0x00 + } + ); + + let va = ref(length * 8); + for (i in 1 to 15) { + let _ = + bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); + + va := va^ asr 8; + }; + bytes; + }; +}; + +module Process = { + let make = message => { + let chunks = (Belt.Array.length(message) + 8) asr 6; + + let a = ref(0x67452301l); + let b = ref(0xEFCDAB89l); + let c = ref(0x98BADCFEl); + let d = ref(0x10325476l); + let e = ref(0xC3D2E1F0l); + + for (i in 0 to chunks - 1) { + let w = Belt.Array.make(80, 0x00l); + + for (t in 0 to 15) { + let result = + Belt.Array.get(message, i * 64 + 4 * t) + ->Belt.Option.getWithDefault(0) + ->Int32.of_int + ->Int32.shift_left(24) + ->Int32.logand(-0x1000000l) + ->Int32.logor( + Belt.Array.get(message, i * 64 + 4 * t + 1) + ->Belt.Option.getWithDefault(0) + ->Int32.of_int + ->Int32.shift_left(16) + ->Int32.logand(0x00FF0000l), + ) + ->Int32.logor( + Belt.Array.get(message, i * 64 + 4 * t + 2) + ->Belt.Option.getWithDefault(0) + ->Int32.of_int + ->Int32.shift_left(8) + ->Int32.logand(0xFF00l) + ->Int32.logor( + Belt.Array.get(message, i * 64 + 4 * t + 3) + ->Belt.Option.getWithDefault(0) + ->Int32.of_int + ->Int32.logand(0xFFl), + ), + ); + + w->Belt.Array.set(t, result)->ignore; + }; + + for (t in 16 to 79) { + let t3 = w->Belt.Array.get(t - 3)->Belt.Option.getWithDefault(0x00l); + let t8 = w->Belt.Array.get(t - 8)->Belt.Option.getWithDefault(0x00l); + let t14 = + w->Belt.Array.get(t - 14)->Belt.Option.getWithDefault(0x00l); + let t16 = + w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00l); + let result = + Functions.rotl( + t3->Int32.logxor(t8)->Int32.logxor(t14)->Int32.logxor(t16), + 1, + ); + + w->Belt.Array.set(t, result)->ignore; + }; + + let originalA = a^; + let originalB = b^; + let originalC = c^; + let originalD = d^; + let originalE = e^; + + Constants.k->Belt.Array.forEachWithIndex((t, k) => { + let temp = + Functions.rotl(a^, 5) + ->Int32.add(Functions.f(t, b^, c^, d^)) + ->Int32.add(e^) + ->Int32.add(k) + ->Int32.add( + w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00l), + ); + + e := d^; + d := c^; + c := Functions.rotl(b^, 30); + b := a^; + a := temp; + }); + + a := Int32.add(originalA, a^); + b := Int32.add(originalB, b^); + c := Int32.add(originalC, c^); + d := Int32.add(originalD, d^); + e := Int32.add(originalE, e^); + }; + + Belt.Array.make(20, 0x00) + ->Utils.append32(a^, 0) + ->Utils.append32(b^, 4) + ->Utils.append32(c^, 8) + ->Utils.append32(d^, 12) + ->Utils.append32(e^, 16) + ->Belt.Array.reduce("", (acc, curr) => + acc ++ Js.String.fromCharCode(curr) + ) + ->Utils.stringToHex; + }; +}; let make = message => { message->Preprocess.pad->Process.make; diff --git a/src/ReCrypt/ReCrypt_Sha224.bs.js b/src/ReCrypt/ReCrypt_Sha224.bs.js index 5d7028f..b660ffe 100644 --- a/src/ReCrypt/ReCrypt_Sha224.bs.js +++ b/src/ReCrypt/ReCrypt_Sha224.bs.js @@ -1,11 +1,216 @@ // Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE 'use strict'; -var ReCrypt_Sha224_Process = require("./Sha224/ReCrypt_Sha224_Process.bs.js"); -var ReCrypt_Sha224_Preprocess = require("./Sha224/ReCrypt_Sha224_Preprocess.bs.js"); +var Int32 = require("bs-platform/lib/js/int32.js"); +var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); +var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); + +function rotr(x, n) { + return (x >>> n) | 0 | (x << (64 - n | 0)); +} + +function change(x, y, z) { + return x & y ^ Int32.lognot(x) & z; +} + +function majority(x, y, z) { + return x & y ^ x & z ^ y & z; +} + +function sum0(x) { + return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); +} + +function sum1(x) { + return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); +} + +function sigma0(x) { + return rotr(x, 7) ^ rotr(x, 18) ^ (x >>> 3); +} + +function sigma1(x) { + return rotr(x, 17) ^ rotr(x, 19) ^ (x >>> 10); +} + +function append32(hash, value, offset) { + for(var j = 0; j <= 3; ++j){ + Belt_Array.set(hash, j + offset | 0, (value >>> (24 - (j << 3) | 0)) & 255); + } + return hash; +} + +var k = [ + 1116352408, + 1899447441, + -1245643825, + -373957723, + 961987163, + 1508970993, + -1841331548, + -1424204075, + -670586216, + 310598401, + 607225278, + 1426881987, + 1925078388, + -2132889090, + -1680079193, + -1046744716, + -459576895, + -272742522, + 264347078, + 604807628, + 770255983, + 1249150122, + 1555081692, + 1996064986, + -1740746414, + -1473132947, + -1341970488, + -1084653625, + -958395405, + -710438585, + 113926993, + 338241895, + 666307205, + 773529912, + 1294757372, + 1396182291, + 1695183700, + 1986661051, + -2117940946, + -1838011259, + -1564481375, + -1474664885, + -1035236496, + -949202525, + -778901479, + -694614492, + -200395387, + 275423344, + 430227734, + 506948616, + 659060556, + 883997877, + 958139571, + 1322822218, + 1537002063, + 1747873779, + 1955562222, + 2024104815, + -2067236844, + -1933114872, + -1866530822, + -1538233109, + -1090935817, + -965641998 +]; + +function pad(msg) { + var size = (msg.length + 8 | 0) + 1 | 0; + while(size % 64 !== 0) { + size = size + 1 | 0; + }; + var length = msg.length; + var bytes = Belt_Array.makeBy(size, (function (index) { + if (index < length) { + return msg.charCodeAt(index) | 0; + } else if (index === length) { + return 128; + } else { + return 0; + } + })); + var va = (length << 3); + for(var i = 1; i <= 15; ++i){ + Belt_Array.set(bytes, bytes.length - i | 0, va & 255); + va = (va >> 8); + } + return bytes; +} function make(message) { - return ReCrypt_Sha224_Process.make(ReCrypt_Sha224_Preprocess.pad(message)); + var message$1 = pad(message); + var chunks = ((message$1.length + 8 | 0) >> 6); + var a = { + contents: -1056596264 + }; + var b = { + contents: 914150663 + }; + var c = { + contents: 812702999 + }; + var d = { + contents: -150054599 + }; + var e = { + contents: -4191439 + }; + var f = { + contents: 1750603025 + }; + var g = { + contents: 1694076839 + }; + var h = { + contents: -1090891868 + }; + for(var i = 0; i < chunks; ++i){ + var w = Belt_Array.make(64, 0); + for(var t = 0; t <= 15; ++t){ + var result = (Belt_Option.getWithDefault(Belt_Array.get(message$1, (i << 6) + (t << 2) | 0), 0) << 24) & -16777216 | (Belt_Option.getWithDefault(Belt_Array.get(message$1, ((i << 6) + (t << 2) | 0) + 1 | 0), 0) << 16) & 16711680 | (Belt_Option.getWithDefault(Belt_Array.get(message$1, ((i << 6) + (t << 2) | 0) + 2 | 0), 0) << 8) & 65280 | Belt_Option.getWithDefault(Belt_Array.get(message$1, ((i << 6) + (t << 2) | 0) + 3 | 0), 0) & 255; + Belt_Array.set(w, t, result); + } + for(var t$1 = 16; t$1 <= 63; ++t$1){ + var t2 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 2 | 0), 0); + var t7 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 7 | 0), 0); + var t15 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 15 | 0), 0); + var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), 0); + var result$1 = ((sigma1(t2) + t7 | 0) + sigma0(t15) | 0) + t16 | 0; + Belt_Array.set(w, t$1, result$1); + } + var originalA = a.contents; + var originalB = b.contents; + var originalC = c.contents; + var originalD = d.contents; + var originalE = e.contents; + var originalF = f.contents; + var originalG = g.contents; + var originalH = h.contents; + Belt_Array.forEachWithIndex(k, (function(w){ + return function (t, k) { + var temp1 = (((h.contents + sum1(e.contents) | 0) + change(e.contents, f.contents, g.contents) | 0) + k | 0) + Belt_Option.getWithDefault(Belt_Array.get(w, t), 0) | 0; + var temp2 = sum0(a.contents) + majority(a.contents, b.contents, c.contents) | 0; + h.contents = g.contents; + g.contents = f.contents; + f.contents = e.contents; + e.contents = d.contents + temp1 | 0; + d.contents = c.contents; + c.contents = b.contents; + b.contents = a.contents; + a.contents = temp1 + temp2 | 0; + + } + }(w))); + a.contents = originalA + a.contents | 0; + b.contents = originalB + b.contents | 0; + c.contents = originalC + c.contents | 0; + d.contents = originalD + d.contents | 0; + e.contents = originalE + e.contents | 0; + f.contents = originalF + f.contents | 0; + g.contents = originalG + g.contents | 0; + h.contents = originalH + h.contents | 0; + } + var input = Belt_Array.reduce(append32(append32(append32(append32(append32(append32(append32(Belt_Array.make(28, 0), a.contents, 0), b.contents, 4), c.contents, 8), d.contents, 12), e.contents, 16), f.contents, 20), g.contents, 24), "", (function (acc, curr) { + return acc + String.fromCharCode(curr); + })); + var hex = "0123456789abcdef"; + return Belt_Array.reduce(input.split(""), "", (function (acc, curr) { + var charCode = curr.charCodeAt(0) | 0; + return acc + (hex.charAt((charCode >>> 4) & 15) + hex.charAt(charCode & 15)); + })); } exports.make = make; diff --git a/src/ReCrypt/ReCrypt_Sha224.re b/src/ReCrypt/ReCrypt_Sha224.re index a0f8943..4823077 100644 --- a/src/ReCrypt/ReCrypt_Sha224.re +++ b/src/ReCrypt/ReCrypt_Sha224.re @@ -1,5 +1,290 @@ -module Preprocess = ReCrypt_Sha224_Preprocess; -module Process = ReCrypt_Sha224_Process; +module Functions = { + let rotr = (x, n) => { + Int32.logor( + Int32.shift_right_logical(x, n), + Int32.shift_left(x, 64 - n), + ); + }; + + let change = (x, y, z) => { + Int32.logand(x, y)->Int32.logxor(Int32.logand(Int32.lognot(x), z)); + }; + + let majority = (x, y, z) => { + Int32.logand(x, y) + ->Int32.logxor(Int32.logand(x, z)) + ->Int32.logxor(Int32.logand(y, z)); + }; + + let sum0 = x => { + rotr(x, 2)->Int32.logxor(rotr(x, 13))->Int32.logxor(rotr(x, 22)); + }; + + let sum1 = x => { + rotr(x, 6)->Int32.logxor(rotr(x, 11))->Int32.logxor(rotr(x, 25)); + }; + + let sigma0 = x => { + rotr(x, 7) + ->Int32.logxor(rotr(x, 18)) + ->Int32.logxor(Int32.shift_right_logical(x, 3)); + }; + + let sigma1 = x => { + rotr(x, 17) + ->Int32.logxor(rotr(x, 19)) + ->Int32.logxor(Int32.shift_right_logical(x, 10)); + }; +}; + +module Utils = { + let append32 = (hash, value, offset) => { + for (j in 0 to 3) { + hash + ->Belt.Array.set( + j + offset, + Int32.shift_right_logical(value, 24 - j * 8) + ->Int32.logand(0xFFl) + ->Int32.to_int, + ) + ->ignore; + }; + hash; + }; + + let stringToHex = input => { + let hex = "0123456789abcdef"; + input + ->Js.String2.split("") + ->Belt.Array.reduce("", (acc, curr) => { + let charCode = curr->(Js.String2.charCodeAt(0))->Belt.Int.fromFloat; + + acc + ++ hex->Js.String2.charAt(charCode lsr 4 land 0x0F) + ++ hex->Js.String2.charAt(charCode land 0x0F); + }); + }; +}; + +module Constants = { + let k = [| + 0x428a2f98l, + 0x71374491l, + (-0x4a3f0431l), + (-0x164a245bl), + 0x3956c25bl, + 0x59f111f1l, + (-0x6dc07d5cl), + (-0x54e3a12bl), + (-0x27f85568l), + 0x12835b01l, + 0x243185bel, + 0x550c7dc3l, + 0x72be5d74l, + (-0x7f214e02l), + (-0x6423f959l), + (-0x3e640e8cl), + (-0x1b64963fl), + (-0x1041b87al), + 0x0fc19dc6l, + 0x240ca1ccl, + 0x2de92c6fl, + 0x4a7484aal, + 0x5cb0a9dcl, + 0x76f988dal, + (-0x67c1aeael), + (-0x57ce3993l), + (-0x4ffcd838l), + (-0x40a68039l), + (-0x391ff40dl), + (-0x2a586eb9l), + 0x06ca6351l, + 0x14292967l, + 0x27b70a85l, + 0x2e1b2138l, + 0x4d2c6dfcl, + 0x53380d13l, + 0x650a7354l, + 0x766a0abbl, + (-0x7e3d36d2l), + (-0x6d8dd37bl), + (-0x5d40175fl), + (-0x57e599b5l), + (-0x3db47490l), + (-0x3893ae5dl), + (-0x2e6d17e7l), + (-0x2966f9dcl), + (-0xbf1ca7bl), + 0x106aa070l, + 0x19a4c116l, + 0x1e376c08l, + 0x2748774cl, + 0x34b0bcb5l, + 0x391c0cb3l, + 0x4ed8aa4al, + 0x5b9cca4fl, + 0x682e6ff3l, + 0x748f82eel, + 0x78a5636fl, + (-0x7b3787ecl), + (-0x7338fdf8l), + (-0x6f410006l), + (-0x5baf9315l), + (-0x41065c09l), + (-0x398e870el), + |]; +}; + +module Preprocess = { + let pad = msg => { + let size = ref(Js.String.length(msg) + 8 + 1); + while (size^ mod 64 != 0) { + size := size^ + 1; + }; + + let length = Js.String.length(msg); + + let bytes = + Belt.Array.makeBy(size^, index => + switch (index) { + | i when i < length => + msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat + | i when i == length => 0x80 + | _ => 0x00 + } + ); + + let va = ref(length * 8); + for (i in 1 to 15) { + let _ = + bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); + + va := va^ asr 8; + }; + bytes; + }; +}; + +module Process = { + let make = message => { + let chunks = (Belt.Array.length(message) + 8) asr 6; + + let a = ref(-0x3efa6128l); + let b = ref(0x367cd507l); + let c = ref(0x3070dd17l); + let d = ref(-0x8f1a6c7l); + let e = ref(-0x3ff4cfl); + let f = ref(0x68581511l); + let g = ref(0x64f98fa7l); + let h = ref(-0x4105b05cl); + + for (i in 0 to chunks - 1) { + let w = Belt.Array.make(64, 0x00l); + + for (t in 0 to 15) { + let result = + Belt.Array.get(message, i * 64 + 4 * t) + ->Belt.Option.getWithDefault(0) + ->Int32.of_int + ->Int32.shift_left(24) + ->Int32.logand(-0x1000000l) + ->Int32.logor( + Belt.Array.get(message, i * 64 + 4 * t + 1) + ->Belt.Option.getWithDefault(0) + ->Int32.of_int + ->Int32.shift_left(16) + ->Int32.logand(0x00FF0000l), + ) + ->Int32.logor( + Belt.Array.get(message, i * 64 + 4 * t + 2) + ->Belt.Option.getWithDefault(0) + ->Int32.of_int + ->Int32.shift_left(8) + ->Int32.logand(0xFF00l) + ->Int32.logor( + Belt.Array.get(message, i * 64 + 4 * t + 3) + ->Belt.Option.getWithDefault(0) + ->Int32.of_int + ->Int32.logand(0xFFl), + ), + ); + + w->Belt.Array.set(t, result)->ignore; + }; + + for (t in 16 to 63) { + let t2 = w->Belt.Array.get(t - 2)->Belt.Option.getWithDefault(0x00l); + let t7 = w->Belt.Array.get(t - 7)->Belt.Option.getWithDefault(0x00l); + let t15 = + w->Belt.Array.get(t - 15)->Belt.Option.getWithDefault(0x00l); + let t16 = + w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00l); + + let result = + Functions.sigma1(t2) + ->Int32.add(t7) + ->Int32.add(Functions.sigma0(t15)) + ->Int32.add(t16); + + w->Belt.Array.set(t, result)->ignore; + }; + + let originalA = a^; + let originalB = b^; + let originalC = c^; + let originalD = d^; + let originalE = e^; + let originalF = f^; + let originalG = g^; + let originalH = h^; + + Constants.k->Belt.Array.forEachWithIndex((t, k) => { + let temp1 = + (h^) + ->Int32.add(Functions.sum1(e^)) + ->Int32.add(Functions.change(e^, f^, g^)) + ->Int32.add(k) + ->Int32.add( + w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00l), + ); + + let temp2 = + Int32.add(Functions.sum0(a^), Functions.majority(a^, b^, c^)); + + h := g^; + g := f^; + f := e^; + e := Int32.add(d^, temp1); + d := c^; + c := b^; + b := a^; + a := Int32.add(temp1, temp2); + }); + + a := Int32.add(originalA, a^); + b := Int32.add(originalB, b^); + c := Int32.add(originalC, c^); + d := Int32.add(originalD, d^); + e := Int32.add(originalE, e^); + f := Int32.add(originalF, f^); + g := Int32.add(originalG, g^); + h := Int32.add(originalH, h^); + }; + + Belt.Array.make(28, 0x00) + ->Utils.append32(a^, 0) + ->Utils.append32(b^, 4) + ->Utils.append32(c^, 8) + ->Utils.append32(d^, 12) + ->Utils.append32(e^, 16) + ->Utils.append32(f^, 20) + ->Utils.append32(g^, 24) + ->Belt.Array.reduce("", (acc, curr) => + acc ++ Js.String.fromCharCode(curr) + ) + ->Utils.stringToHex; + }; +}; let make = message => { message->Preprocess.pad->Process.make; diff --git a/src/ReCrypt/ReCrypt_Sha256.bs.js b/src/ReCrypt/ReCrypt_Sha256.bs.js index b3d85ab..714833c 100644 --- a/src/ReCrypt/ReCrypt_Sha256.bs.js +++ b/src/ReCrypt/ReCrypt_Sha256.bs.js @@ -1,11 +1,216 @@ // Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE 'use strict'; -var ReCrypt_Sha256_Process = require("./Sha256/ReCrypt_Sha256_Process.bs.js"); -var ReCrypt_Sha256_Preprocess = require("./Sha256/ReCrypt_Sha256_Preprocess.bs.js"); +var Int32 = require("bs-platform/lib/js/int32.js"); +var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); +var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); + +function rotr(x, n) { + return (x >>> n) | 0 | (x << (64 - n | 0)); +} + +function change(x, y, z) { + return x & y ^ Int32.lognot(x) & z; +} + +function majority(x, y, z) { + return x & y ^ x & z ^ y & z; +} + +function sum0(x) { + return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); +} + +function sum1(x) { + return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); +} + +function sigma0(x) { + return rotr(x, 7) ^ rotr(x, 18) ^ (x >>> 3); +} + +function sigma1(x) { + return rotr(x, 17) ^ rotr(x, 19) ^ (x >>> 10); +} + +function append32(hash, value, offset) { + for(var j = 0; j <= 3; ++j){ + Belt_Array.set(hash, j + offset | 0, (value >>> (24 - (j << 3) | 0)) & 255); + } + return hash; +} + +var k = [ + 1116352408, + 1899447441, + -1245643825, + -373957723, + 961987163, + 1508970993, + -1841331548, + -1424204075, + -670586216, + 310598401, + 607225278, + 1426881987, + 1925078388, + -2132889090, + -1680079193, + -1046744716, + -459576895, + -272742522, + 264347078, + 604807628, + 770255983, + 1249150122, + 1555081692, + 1996064986, + -1740746414, + -1473132947, + -1341970488, + -1084653625, + -958395405, + -710438585, + 113926993, + 338241895, + 666307205, + 773529912, + 1294757372, + 1396182291, + 1695183700, + 1986661051, + -2117940946, + -1838011259, + -1564481375, + -1474664885, + -1035236496, + -949202525, + -778901479, + -694614492, + -200395387, + 275423344, + 430227734, + 506948616, + 659060556, + 883997877, + 958139571, + 1322822218, + 1537002063, + 1747873779, + 1955562222, + 2024104815, + -2067236844, + -1933114872, + -1866530822, + -1538233109, + -1090935817, + -965641998 +]; + +function pad(msg) { + var size = (msg.length + 8 | 0) + 1 | 0; + while(size % 64 !== 0) { + size = size + 1 | 0; + }; + var length = msg.length; + var bytes = Belt_Array.makeBy(size, (function (index) { + if (index < length) { + return msg.charCodeAt(index) | 0; + } else if (index === length) { + return 128; + } else { + return 0; + } + })); + var va = (length << 3); + for(var i = 1; i <= 15; ++i){ + Belt_Array.set(bytes, bytes.length - i | 0, va & 255); + va = (va >> 8); + } + return bytes; +} function make(message) { - return ReCrypt_Sha256_Process.make(ReCrypt_Sha256_Preprocess.pad(message)); + var message$1 = pad(message); + var chunks = ((message$1.length + 8 | 0) >> 6); + var a = { + contents: 1779033703 + }; + var b = { + contents: -1150833019 + }; + var c = { + contents: 1013904242 + }; + var d = { + contents: -1521486534 + }; + var e = { + contents: 1359893119 + }; + var f = { + contents: -1694144372 + }; + var g = { + contents: 528734635 + }; + var h = { + contents: 1541459225 + }; + for(var i = 0; i < chunks; ++i){ + var w = Belt_Array.make(64, 0); + for(var t = 0; t <= 15; ++t){ + var result = (message$1[(i << 6) + (t << 2) | 0] << 24) & -16777216 | (message$1[((i << 6) + (t << 2) | 0) + 1 | 0] << 16) & 16711680 | (message$1[((i << 6) + (t << 2) | 0) + 2 | 0] << 8) & 65280 | message$1[((i << 6) + (t << 2) | 0) + 3 | 0] & 255; + Belt_Array.set(w, t, result); + } + for(var t$1 = 16; t$1 <= 63; ++t$1){ + var t2 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 2 | 0), 0); + var t7 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 7 | 0), 0); + var t15 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 15 | 0), 0); + var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), 0); + var result$1 = ((sigma1(t2) + t7 | 0) + sigma0(t15) | 0) + t16 | 0; + Belt_Array.set(w, t$1, result$1); + } + var originalA = a.contents; + var originalB = b.contents; + var originalC = c.contents; + var originalD = d.contents; + var originalE = e.contents; + var originalF = f.contents; + var originalG = g.contents; + var originalH = h.contents; + Belt_Array.forEachWithIndex(k, (function(w){ + return function (t, k) { + var temp1 = (((h.contents + sum1(e.contents) | 0) + change(e.contents, f.contents, g.contents) | 0) + k | 0) + Belt_Option.getWithDefault(Belt_Array.get(w, t), 0) | 0; + var temp2 = sum0(a.contents) + majority(a.contents, b.contents, c.contents) | 0; + h.contents = g.contents; + g.contents = f.contents; + f.contents = e.contents; + e.contents = d.contents + temp1 | 0; + d.contents = c.contents; + c.contents = b.contents; + b.contents = a.contents; + a.contents = temp1 + temp2 | 0; + + } + }(w))); + a.contents = originalA + a.contents | 0; + b.contents = originalB + b.contents | 0; + c.contents = originalC + c.contents | 0; + d.contents = originalD + d.contents | 0; + e.contents = originalE + e.contents | 0; + f.contents = originalF + f.contents | 0; + g.contents = originalG + g.contents | 0; + h.contents = originalH + h.contents | 0; + } + var input = Belt_Array.reduce(append32(append32(append32(append32(append32(append32(append32(append32(Belt_Array.make(32, 0), a.contents, 0), b.contents, 4), c.contents, 8), d.contents, 12), e.contents, 16), f.contents, 20), g.contents, 24), h.contents, 28), "", (function (acc, curr) { + return acc + String.fromCharCode(curr); + })); + var hex = "0123456789abcdef"; + return Belt_Array.reduce(input.split(""), "", (function (acc, curr) { + var charCode = curr.charCodeAt(0) | 0; + return acc + (hex.charAt((charCode >>> 4) & 15) + hex.charAt(charCode & 15)); + })); } exports.make = make; diff --git a/src/ReCrypt/ReCrypt_Sha256.re b/src/ReCrypt/ReCrypt_Sha256.re index e02d8fa..d82efe0 100644 --- a/src/ReCrypt/ReCrypt_Sha256.re +++ b/src/ReCrypt/ReCrypt_Sha256.re @@ -1,5 +1,286 @@ -module Preprocess = ReCrypt_Sha256_Preprocess; -module Process = ReCrypt_Sha256_Process; +module Functions = { + let rotr = (x, n) => { + Int32.logor( + Int32.shift_right_logical(x, n), + Int32.shift_left(x, 64 - n), + ); + }; + + let change = (x, y, z) => { + Int32.logand(x, y)->Int32.logxor(Int32.logand(Int32.lognot(x), z)); + }; + + let majority = (x, y, z) => { + Int32.logand(x, y) + ->Int32.logxor(Int32.logand(x, z)) + ->Int32.logxor(Int32.logand(y, z)); + }; + + let sum0 = x => { + rotr(x, 2)->Int32.logxor(rotr(x, 13))->Int32.logxor(rotr(x, 22)); + }; + + let sum1 = x => { + rotr(x, 6)->Int32.logxor(rotr(x, 11))->Int32.logxor(rotr(x, 25)); + }; + + let sigma0 = x => { + rotr(x, 7) + ->Int32.logxor(rotr(x, 18)) + ->Int32.logxor(Int32.shift_right_logical(x, 3)); + }; + + let sigma1 = x => { + rotr(x, 17) + ->Int32.logxor(rotr(x, 19)) + ->Int32.logxor(Int32.shift_right_logical(x, 10)); + }; +}; + +module Utils = { + let append32 = (hash, value, offset) => { + for (j in 0 to 3) { + hash + ->Belt.Array.set( + j + offset, + Int32.shift_right_logical(value, 24 - j * 8) + ->Int32.logand(0xFFl) + ->Int32.to_int, + ) + ->ignore; + }; + hash; + }; + + let stringToHex = input => { + let hex = "0123456789abcdef"; + input + ->Js.String2.split("") + ->Belt.Array.reduce("", (acc, curr) => { + let charCode = curr->(Js.String2.charCodeAt(0))->Belt.Int.fromFloat; + + acc + ++ hex->Js.String2.charAt(charCode lsr 4 land 0x0F) + ++ hex->Js.String2.charAt(charCode land 0x0F); + }); + }; +}; + +module Constants = { + let k = [| + 0x428a2f98l, + 0x71374491l, + (-0x4a3f0431l), + (-0x164a245bl), + 0x3956c25bl, + 0x59f111f1l, + (-0x6dc07d5cl), + (-0x54e3a12bl), + (-0x27f85568l), + 0x12835b01l, + 0x243185bel, + 0x550c7dc3l, + 0x72be5d74l, + (-0x7f214e02l), + (-0x6423f959l), + (-0x3e640e8cl), + (-0x1b64963fl), + (-0x1041b87al), + 0x0fc19dc6l, + 0x240ca1ccl, + 0x2de92c6fl, + 0x4a7484aal, + 0x5cb0a9dcl, + 0x76f988dal, + (-0x67c1aeael), + (-0x57ce3993l), + (-0x4ffcd838l), + (-0x40a68039l), + (-0x391ff40dl), + (-0x2a586eb9l), + 0x06ca6351l, + 0x14292967l, + 0x27b70a85l, + 0x2e1b2138l, + 0x4d2c6dfcl, + 0x53380d13l, + 0x650a7354l, + 0x766a0abbl, + (-0x7e3d36d2l), + (-0x6d8dd37bl), + (-0x5d40175fl), + (-0x57e599b5l), + (-0x3db47490l), + (-0x3893ae5dl), + (-0x2e6d17e7l), + (-0x2966f9dcl), + (-0xbf1ca7bl), + 0x106aa070l, + 0x19a4c116l, + 0x1e376c08l, + 0x2748774cl, + 0x34b0bcb5l, + 0x391c0cb3l, + 0x4ed8aa4al, + 0x5b9cca4fl, + 0x682e6ff3l, + 0x748f82eel, + 0x78a5636fl, + (-0x7b3787ecl), + (-0x7338fdf8l), + (-0x6f410006l), + (-0x5baf9315l), + (-0x41065c09l), + (-0x398e870el), + |]; +}; + +module Preprocess = { + let pad = msg => { + let size = ref(Js.String.length(msg) + 8 + 1); + while (size^ mod 64 != 0) { + size := size^ + 1; + }; + + let length = Js.String.length(msg); + + let bytes = + Belt.Array.makeBy(size^, index => + switch (index) { + | i when i < length => + msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat + | i when i == length => 0x80 + | _ => 0x00 + } + ); + + let va = ref(length * 8); + for (i in 1 to 15) { + let _ = + bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); + + va := va^ asr 8; + }; + bytes; + }; +}; + +module Process = { + let make = message => { + let chunks = (Belt.Array.length(message) + 8) asr 6; + + let a = ref(0x6a09e667l); + let b = ref(-0x4498517bl); + let c = ref(0x3c6ef372l); + let d = ref(-0x5ab00ac6l); + let e = ref(0x510e527fl); + let f = ref(-0x64fa9774l); + let g = ref(0x1f83d9abl); + let h = ref(0x5be0cd19l); + + for (i in 0 to chunks - 1) { + let w = Belt.Array.make(64, 0x00l); + + for (t in 0 to 15) { + let result = + Belt.Array.getUnsafe(message, i * 64 + 4 * t) + ->Int32.of_int + ->Int32.shift_left(24) + ->Int32.logand(-0x1000000l) + ->Int32.logor( + Belt.Array.getUnsafe(message, i * 64 + 4 * t + 1) + ->Int32.of_int + ->Int32.shift_left(16) + ->Int32.logand(0x00FF0000l), + ) + ->Int32.logor( + Belt.Array.getUnsafe(message, i * 64 + 4 * t + 2) + ->Int32.of_int + ->Int32.shift_left(8) + ->Int32.logand(0xFF00l) + ->Int32.logor( + Belt.Array.getUnsafe(message, i * 64 + 4 * t + 3) + ->Int32.of_int + ->Int32.logand(0xFFl), + ), + ); + w->Belt.Array.set(t, result)->ignore; + }; + + for (t in 16 to 63) { + let t2 = w->Belt.Array.get(t - 2)->Belt.Option.getWithDefault(0x00l); + let t7 = w->Belt.Array.get(t - 7)->Belt.Option.getWithDefault(0x00l); + let t15 = + w->Belt.Array.get(t - 15)->Belt.Option.getWithDefault(0x00l); + let t16 = + w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00l); + + let result = + Functions.sigma1(t2) + ->Int32.add(t7) + ->Int32.add(Functions.sigma0(t15)) + ->Int32.add(t16); + + w->Belt.Array.set(t, result)->ignore; + }; + + let originalA = a^; + let originalB = b^; + let originalC = c^; + let originalD = d^; + let originalE = e^; + let originalF = f^; + let originalG = g^; + let originalH = h^; + + Constants.k->Belt.Array.forEachWithIndex((t, k) => { + let temp1 = + (h^) + ->Int32.add(Functions.sum1(e^)) + ->Int32.add(Functions.change(e^, f^, g^)) + ->Int32.add(k) + ->Int32.add( + w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00l), + ); + + let temp2 = + Int32.add(Functions.sum0(a^), Functions.majority(a^, b^, c^)); + + h := g^; + g := f^; + f := e^; + e := Int32.add(d^, temp1); + d := c^; + c := b^; + b := a^; + a := Int32.add(temp1, temp2); + }); + + a := Int32.add(originalA, a^); + b := Int32.add(originalB, b^); + c := Int32.add(originalC, c^); + d := Int32.add(originalD, d^); + e := Int32.add(originalE, e^); + f := Int32.add(originalF, f^); + g := Int32.add(originalG, g^); + h := Int32.add(originalH, h^); + }; + + Belt.Array.make(32, 0x00) + ->Utils.append32(a^, 0) + ->Utils.append32(b^, 4) + ->Utils.append32(c^, 8) + ->Utils.append32(d^, 12) + ->Utils.append32(e^, 16) + ->Utils.append32(f^, 20) + ->Utils.append32(g^, 24) + ->Utils.append32(h^, 28) + ->Belt.Array.reduce("", (acc, curr) => + acc ++ Js.String.fromCharCode(curr) + ) + ->Utils.stringToHex; + }; +}; let make = message => { message->Preprocess.pad->Process.make; diff --git a/src/ReCrypt/ReCrypt_Sha384.bs.js b/src/ReCrypt/ReCrypt_Sha384.bs.js index 05ab99b..758c1df 100644 --- a/src/ReCrypt/ReCrypt_Sha384.bs.js +++ b/src/ReCrypt/ReCrypt_Sha384.bs.js @@ -1,11 +1,235 @@ // Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE 'use strict'; -var ReCrypt_Sha384_Process = require("./Sha384/ReCrypt_Sha384_Process.bs.js"); -var ReCrypt_Sha384_Preprocess = require("./Sha384/ReCrypt_Sha384_Preprocess.bs.js"); +var Int64 = require("bs-platform/lib/js/int64.js"); +var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); +var Caml_int64 = require("bs-platform/lib/js/caml_int64.js"); +var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); + +function rotr(x, n) { + return Caml_int64.or_(Caml_int64.lsr_(x, n), Caml_int64.lsl_(x, 64 - n | 0)); +} + +function change(x, y, z) { + return Caml_int64.xor(Caml_int64.and_(x, y), Caml_int64.and_(Int64.lognot(x), z)); +} + +function majority(x, y, z) { + return Caml_int64.xor(Caml_int64.xor(Caml_int64.and_(x, y), Caml_int64.and_(x, z)), Caml_int64.and_(y, z)); +} + +function sum0(x) { + return Caml_int64.xor(Caml_int64.xor(rotr(x, 28), rotr(x, 34)), rotr(x, 39)); +} + +function sum1(x) { + return Caml_int64.xor(Caml_int64.xor(rotr(x, 14), rotr(x, 18)), rotr(x, 41)); +} + +function sigma0(x) { + return Caml_int64.xor(Caml_int64.xor(rotr(x, 1), rotr(x, 8)), Caml_int64.lsr_(x, 7)); +} + +function sigma1(x) { + return Caml_int64.xor(Caml_int64.xor(rotr(x, 19), rotr(x, 61)), Caml_int64.lsr_(x, 6)); +} + +function append64(hash, value, offset) { + for(var j = 0; j <= 7; ++j){ + Belt_Array.set(hash, j + offset | 0, Caml_int64.to_int32(Caml_int64.and_(Caml_int64.lsr_(value, 56 - (j << 3) | 0), Caml_int64.mk(255, 0)))); + } + return hash; +} + +var k = [ + Caml_int64.mk(-685199838, 1116352408), + Caml_int64.mk(602891725, 1899447441), + Caml_int64.mk(-330482897, -1245643825), + Caml_int64.mk(-2121671748, -373957723), + Caml_int64.mk(-213338824, 961987163), + Caml_int64.mk(-1241133031, 1508970993), + Caml_int64.mk(-1357295717, -1841331548), + Caml_int64.mk(-630357736, -1424204075), + Caml_int64.mk(-1560083902, -670586216), + Caml_int64.mk(1164996542, 310598401), + Caml_int64.mk(1323610764, 607225278), + Caml_int64.mk(-704662302, 1426881987), + Caml_int64.mk(-226784913, 1925078388), + Caml_int64.mk(991336113, -2132889090), + Caml_int64.mk(633803317, -1680079193), + Caml_int64.mk(-815192428, -1046744716), + Caml_int64.mk(-1628353838, -459576895), + Caml_int64.mk(944711139, -272742522), + Caml_int64.mk(-1953704523, 264347078), + Caml_int64.mk(2007800933, 604807628), + Caml_int64.mk(1495990901, 770255983), + Caml_int64.mk(1856431235, 1249150122), + Caml_int64.mk(-1119749164, 1555081692), + Caml_int64.mk(-2096016459, 1996064986), + Caml_int64.mk(-295247957, -1740746414), + Caml_int64.mk(766784016, -1473132947), + Caml_int64.mk(-1728372417, -1341970488), + Caml_int64.mk(-1091629340, -1084653625), + Caml_int64.mk(1034457026, -958395405), + Caml_int64.mk(-1828018395, -710438585), + Caml_int64.mk(-536640913, 113926993), + Caml_int64.mk(168717936, 338241895), + Caml_int64.mk(1188179964, 666307205), + Caml_int64.mk(1546045734, 773529912), + Caml_int64.mk(1522805485, 1294757372), + Caml_int64.mk(-1651133473, 1396182291), + Caml_int64.mk(-1951439906, 1695183700), + Caml_int64.mk(1014477480, 1986661051), + Caml_int64.mk(1206759142, -2117940946), + Caml_int64.mk(344077627, -1838011259), + Caml_int64.mk(1290863460, -1564481375), + Caml_int64.mk(-1136513023, -1474664885), + Caml_int64.mk(-789014639, -1035236496), + Caml_int64.mk(106217008, -949202525), + Caml_int64.mk(-688958952, -778901479), + Caml_int64.mk(1432725776, -694614492), + Caml_int64.mk(1467031594, -200395387), + Caml_int64.mk(851169720, 275423344), + Caml_int64.mk(-1194143544, 430227734), + Caml_int64.mk(1363258195, 506948616), + Caml_int64.mk(-544281703, 659060556), + Caml_int64.mk(-509917016, 883997877), + Caml_int64.mk(-976659869, 958139571), + Caml_int64.mk(-482243893, 1322822218), + Caml_int64.mk(2003034995, 1537002063), + Caml_int64.mk(-692930397, 1747873779), + Caml_int64.mk(1575990012, 1955562222), + Caml_int64.mk(1125592928, 2024104815), + Caml_int64.mk(-1578062990, -2067236844), + Caml_int64.mk(442776044, -1933114872), + Caml_int64.mk(593698344, -1866530822), + Caml_int64.mk(-561857047, -1538233109), + Caml_int64.mk(-1295615723, -1090935817), + Caml_int64.mk(-479046869, -965641998), + Caml_int64.mk(-366583396, -903397682), + Caml_int64.mk(566280711, -779700025), + Caml_int64.mk(-840897762, -354779690), + Caml_int64.mk(-294727304, -176337025), + Caml_int64.mk(1914138554, 116418474), + Caml_int64.mk(-1563912026, 174292421), + Caml_int64.mk(-1090974290, 289380356), + Caml_int64.mk(320620315, 460393269), + Caml_int64.mk(587496836, 685471733), + Caml_int64.mk(1086792851, 852142971), + Caml_int64.mk(365543100, 1017036298), + Caml_int64.mk(-1676669620, 1126000580), + Caml_int64.mk(-885112138, 1288033470), + Caml_int64.mk(-60457430, 1501505948), + Caml_int64.mk(987167468, 1607167915), + Caml_int64.mk(1246189591, 1816402316) +]; + +function pad(msg) { + var size = (msg.length + 16 | 0) + 1 | 0; + while(size % 128 !== 0) { + size = size + 1 | 0; + }; + var length = msg.length; + var bytes = Belt_Array.makeBy(size, (function (index) { + if (index < length) { + return msg.charCodeAt(index) | 0; + } else if (index === length) { + return 128; + } else { + return 0; + } + })); + var va = (length << 3); + for(var i = 1; i <= 15; ++i){ + Belt_Array.set(bytes, bytes.length - i | 0, va & 255); + va = (va >> 8); + } + return bytes; +} function make(message) { - return ReCrypt_Sha384_Process.make(ReCrypt_Sha384_Preprocess.pad(message)); + var message$1 = pad(message); + var chunks = message$1.length / 128 | 0; + var a = { + contents: Caml_int64.mk(-1056596264, -876896931) + }; + var b = { + contents: Caml_int64.mk(914150663, 1654270250) + }; + var c = { + contents: Caml_int64.mk(812702999, -1856437926) + }; + var d = { + contents: Caml_int64.mk(-150054599, 355462360) + }; + var e = { + contents: Caml_int64.mk(-4191439, 1731405415) + }; + var f = { + contents: Caml_int64.mk(1750603025, -1900787065) + }; + var g = { + contents: Caml_int64.mk(1694076839, -619958771) + }; + var h = { + contents: Caml_int64.mk(-1090891868, 1203062813) + }; + for(var i = 0; i < chunks; ++i){ + var w = Belt_Array.make(80, Caml_int64.zero); + for(var t = 0; t <= 15; ++t){ + for(var j = 0; j <= 7; ++j){ + var result = Caml_int64.add(Caml_int64.lsl_(Belt_Option.getWithDefault(Belt_Array.get(w, t), Caml_int64.zero), 8), Caml_int64.of_int32(Belt_Option.getWithDefault(Belt_Array.get(message$1, j + ((i << 7) + (t << 3) | 0) | 0), 0) & 255)); + Belt_Array.set(w, t, result); + } + } + for(var t$1 = 16; t$1 <= 79; ++t$1){ + var t2 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 2 | 0), Caml_int64.zero); + var t7 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 7 | 0), Caml_int64.zero); + var t15 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 15 | 0), Caml_int64.zero); + var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), Caml_int64.zero); + var result$1 = Caml_int64.add(Caml_int64.add(Caml_int64.add(sigma1(t2), t7), sigma0(t15)), t16); + Belt_Array.set(w, t$1, result$1); + } + var originalA = a.contents; + var originalB = b.contents; + var originalC = c.contents; + var originalD = d.contents; + var originalE = e.contents; + var originalF = f.contents; + var originalG = g.contents; + var originalH = h.contents; + Belt_Array.forEachWithIndex(k, (function(w){ + return function (t, k) { + var temp1 = Caml_int64.add(Caml_int64.add(Caml_int64.add(Caml_int64.add(h.contents, sum1(e.contents)), change(e.contents, f.contents, g.contents)), k), Belt_Option.getWithDefault(Belt_Array.get(w, t), Caml_int64.zero)); + var temp2 = Caml_int64.add(sum0(a.contents), majority(a.contents, b.contents, c.contents)); + h.contents = g.contents; + g.contents = f.contents; + f.contents = e.contents; + e.contents = Caml_int64.add(d.contents, temp1); + d.contents = c.contents; + c.contents = b.contents; + b.contents = a.contents; + a.contents = Caml_int64.add(temp1, temp2); + + } + }(w))); + a.contents = Caml_int64.add(originalA, a.contents); + b.contents = Caml_int64.add(originalB, b.contents); + c.contents = Caml_int64.add(originalC, c.contents); + d.contents = Caml_int64.add(originalD, d.contents); + e.contents = Caml_int64.add(originalE, e.contents); + f.contents = Caml_int64.add(originalF, f.contents); + g.contents = Caml_int64.add(originalG, g.contents); + h.contents = Caml_int64.add(originalH, h.contents); + } + var input = Belt_Array.reduce(append64(append64(append64(append64(append64(append64(Belt_Array.make(48, 0), a.contents, 0), b.contents, 8), c.contents, 16), d.contents, 24), e.contents, 32), f.contents, 40), "", (function (acc, curr) { + return acc + String.fromCharCode(curr); + })); + var hex = "0123456789abcdef"; + return Belt_Array.reduce(input.split(""), "", (function (acc, curr) { + var charCode = curr.charCodeAt(0) | 0; + return acc + (hex.charAt((charCode >>> 4) & 15) + hex.charAt(charCode & 15)); + })); } exports.make = make; diff --git a/src/ReCrypt/ReCrypt_Sha384.re b/src/ReCrypt/ReCrypt_Sha384.re index fc0991a..f672705 100644 --- a/src/ReCrypt/ReCrypt_Sha384.re +++ b/src/ReCrypt/ReCrypt_Sha384.re @@ -1,5 +1,295 @@ -module Preprocess = ReCrypt_Sha384_Preprocess; -module Process = ReCrypt_Sha384_Process; +module Functions = { + let rotr = (x, n) => { + Int64.logor( + Int64.shift_right_logical(x, n), + Int64.shift_left(x, 64 - n), + ); + }; + + let change = (x, y, z) => { + Int64.logand(x, y)->Int64.logxor(Int64.logand(Int64.lognot(x), z)); + }; + + let majority = (x, y, z) => { + Int64.logand(x, y) + ->Int64.logxor(Int64.logand(x, z)) + ->Int64.logxor(Int64.logand(y, z)); + }; + + let sum0 = x => { + rotr(x, 28)->Int64.logxor(rotr(x, 34))->Int64.logxor(rotr(x, 39)); + }; + + let sum1 = x => { + rotr(x, 14)->Int64.logxor(rotr(x, 18))->Int64.logxor(rotr(x, 41)); + }; + + let sigma0 = x => { + rotr(x, 1) + ->Int64.logxor(rotr(x, 8)) + ->Int64.logxor(Int64.shift_right_logical(x, 7)); + }; + + let sigma1 = x => { + rotr(x, 19) + ->Int64.logxor(rotr(x, 61)) + ->Int64.logxor(Int64.shift_right_logical(x, 6)); + }; +}; + +module Utils = { + let append64 = (hash, value, offset) => { + for (j in 0 to 7) { + hash + ->Belt.Array.set( + j + offset, + Int64.shift_right_logical(value, 56 - j * 8) + ->Int64.logand(0xFFL) + ->Int64.to_int, + ) + ->ignore; + }; + hash; + }; + + let stringToHex = input => { + let hex = "0123456789abcdef"; + input + ->Js.String2.split("") + ->Belt.Array.reduce("", (acc, curr) => { + let charCode = curr->(Js.String2.charCodeAt(0))->Belt.Int.fromFloat; + + acc + ++ hex->Js.String2.charAt(charCode lsr 4 land 0x0F) + ++ hex->Js.String2.charAt(charCode land 0x0F); + }); + }; +}; + +module Constants = { + let k = [| + 0x428A2F98D728AE22L, + 0x7137449123EF65CDL, + (-0x4a3f043013b2c4d1L), + (-0x164a245a7e762444L), + 0x3956C25BF348B538L, + 0x59F111F1B605D019L, + (-0x6dc07d5b50e6b065L), + (-0x54e3a12a25927ee8L), + (-0x27f855675cfcfdbeL), + 0x12835B0145706FBEL, + 0x243185BE4EE4B28CL, + 0x550C7DC3D5FFB4E2L, + 0x72BE5D74F27B896FL, + (-0x7f214e01c4e9694fL), + (-0x6423f958da38edcbL), + (-0x3e640e8b3096d96cL), + (-0x1b64963e610eb52eL), + (-0x1041b879c7b0da1dL), + 0x0FC19DC68B8CD5B5L, + 0x240CA1CC77AC9C65L, + 0x2DE92C6F592B0275L, + 0x4A7484AA6EA6E483L, + 0x5CB0A9DCBD41FBD4L, + 0x76F988DA831153B5L, + (-0x67c1aead11992055L), + (-0x57ce3992d24bcdf0L), + (-0x4ffcd8376704dec1L), + (-0x40a680384110f11cL), + (-0x391ff40cc257703eL), + (-0x2a586eb86cf558dbL), + 0x06CA6351E003826FL, + 0x142929670A0E6E70L, + 0x27B70A8546D22FFCL, + 0x2E1B21385C26C926L, + 0x4D2C6DFC5AC42AEDL, + 0x53380D139D95B3DFL, + 0x650A73548BAF63DEL, + 0x766A0ABB3C77B2A8L, + (-0x7e3d36d1b812511aL), + (-0x6d8dd37aeb7dcac5L), + (-0x5d40175eb30efc9cL), + (-0x57e599b443bdcfffL), + (-0x3db4748f2f07686fL), + (-0x3893ae5cf9ab41d0L), + (-0x2e6d17e62910ade8L), + (-0x2966f9dbaa9a56f0L), + (-0xbf1ca7aa88edfd6L), + 0x106AA07032BBD1B8L, + 0x19A4C116B8D2D0C8L, + 0x1E376C085141AB53L, + 0x2748774CDF8EEB99L, + 0x34B0BCB5E19B48A8L, + 0x391C0CB3C5C95A63L, + 0x4ED8AA4AE3418ACBL, + 0x5B9CCA4F7763E373L, + 0x682E6FF3D6B2B8A3L, + 0x748F82EE5DEFB2FCL, + 0x78A5636F43172F60L, + (-0x7b3787eb5e0f548eL), + (-0x7338fdf7e59bc614L), + (-0x6f410005dc9ce1d8L), + (-0x5baf9314217d4217L), + (-0x41065c084d3986ebL), + (-0x398e870d1c8dacd5L), + (-0x35d8c13115d99e64L), + (-0x2e794738de3f3df9L), + (-0x15258229321f14e2L), + (-0xa82b08011912e88L), + 0x06F067AA72176FBAL, + 0x0A637DC5A2C898A6L, + 0x113F9804BEF90DAEL, + 0x1B710B35131C471BL, + 0x28DB77F523047D84L, + 0x32CAAB7B40C72493L, + 0x3C9EBE0A15C9BEBCL, + 0x431D67C49C100D4CL, + 0x4CC5D4BECB3E42B6L, + 0x597F299CFC657E2AL, + 0x5FCB6FAB3AD6FAECL, + 0x6C44198C4A475817L, + |]; +}; + +module Preprocess = { + let pad = msg => { + let size = ref(Js.String.length(msg) + 16 + 1); + while (size^ mod 128 != 0) { + size := size^ + 1; + }; + + let length = Js.String.length(msg); + + let bytes = + Belt.Array.makeBy(size^, index => + switch (index) { + | i when i < length => + msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat + | i when i == length => 0x80 + | _ => 0x00 + } + ); + + let va = ref(length * 8); + for (i in 1 to 15) { + let _ = + bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); + + va := va^ asr 8; + }; + bytes; + }; +}; + +module Process = { + let make = message => { + let chunks = Belt.Array.length(message) / 128; + + let a = ref(-0x344462a23efa6128L); + let b = ref(0x629a292a367cd507L); + let c = ref(-0x6ea6fea5cf8f22e9L); + let d = ref(0x152fecd8f70e5939L); + let e = ref(0x67332667ffc00b31L); + let f = ref(-0x714bb57897a7eaefL); + let g = ref(-0x24f3d1f29b067059L); + let h = ref(0x47b5481dbefa4fa4L); + + for (i in 0 to chunks - 1) { + let w = Belt.Array.make(80, 0x00L); + + for (t in 0 to 15) { + for (j in 0 to 7) { + let result = + Int64.shift_left( + w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00L), + 8, + ) + ->Int64.add( + ( + message + ->Belt.Array.get(j + (i * 128 + 8 * t)) + ->Belt.Option.getWithDefault(0x00) + land 0xff + ) + ->Int64.of_int, + ); + + w->Belt.Array.set(t, result)->ignore; + }; + }; + + for (t in 16 to 79) { + let t2 = w->Belt.Array.get(t - 2)->Belt.Option.getWithDefault(0x00L); + let t7 = w->Belt.Array.get(t - 7)->Belt.Option.getWithDefault(0x00L); + let t15 = + w->Belt.Array.get(t - 15)->Belt.Option.getWithDefault(0x00L); + let t16 = + w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00L); + + let result = + Functions.sigma1(t2) + ->Int64.add(t7) + ->Int64.add(Functions.sigma0(t15)) + ->Int64.add(t16); + + w->Belt.Array.set(t, result)->ignore; + }; + + let originalA = a^; + let originalB = b^; + let originalC = c^; + let originalD = d^; + let originalE = e^; + let originalF = f^; + let originalG = g^; + let originalH = h^; + + Constants.k->Belt.Array.forEachWithIndex((t, k) => { + let temp1 = + (h^) + ->Int64.add(Functions.sum1(e^)) + ->Int64.add(Functions.change(e^, f^, g^)) + ->Int64.add(k) + ->Int64.add( + w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00L), + ); + + let temp2 = + Int64.add(Functions.sum0(a^), Functions.majority(a^, b^, c^)); + + h := g^; + g := f^; + f := e^; + e := Int64.add(d^, temp1); + d := c^; + c := b^; + b := a^; + a := Int64.add(temp1, temp2); + }); + + a := Int64.add(originalA, a^); + b := Int64.add(originalB, b^); + c := Int64.add(originalC, c^); + d := Int64.add(originalD, d^); + e := Int64.add(originalE, e^); + f := Int64.add(originalF, f^); + g := Int64.add(originalG, g^); + h := Int64.add(originalH, h^); + }; + + Belt.Array.make(48, 0x00) + ->Utils.append64(a^, 0) + ->Utils.append64(b^, 8) + ->Utils.append64(c^, 16) + ->Utils.append64(d^, 24) + ->Utils.append64(e^, 32) + ->Utils.append64(f^, 40) + ->Belt.Array.reduce("", (acc, curr) => + acc ++ Js.String.fromCharCode(curr) + ) + ->Utils.stringToHex; + }; +}; let make = message => { message->Preprocess.pad->Process.make; diff --git a/src/ReCrypt/ReCrypt_Sha512.bs.js b/src/ReCrypt/ReCrypt_Sha512.bs.js index d4d1fb8..de6e00c 100644 --- a/src/ReCrypt/ReCrypt_Sha512.bs.js +++ b/src/ReCrypt/ReCrypt_Sha512.bs.js @@ -1,11 +1,235 @@ // Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE 'use strict'; -var ReCrypt_Sha512_Process = require("./Sha512/ReCrypt_Sha512_Process.bs.js"); -var ReCrypt_Sha512_Preprocess = require("./Sha512/ReCrypt_Sha512_Preprocess.bs.js"); +var Int64 = require("bs-platform/lib/js/int64.js"); +var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); +var Caml_int64 = require("bs-platform/lib/js/caml_int64.js"); +var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); + +function rotr(x, n) { + return Caml_int64.or_(Caml_int64.lsr_(x, n), Caml_int64.lsl_(x, 64 - n | 0)); +} + +function change(x, y, z) { + return Caml_int64.xor(Caml_int64.and_(x, y), Caml_int64.and_(Int64.lognot(x), z)); +} + +function majority(x, y, z) { + return Caml_int64.xor(Caml_int64.xor(Caml_int64.and_(x, y), Caml_int64.and_(x, z)), Caml_int64.and_(y, z)); +} + +function sum0(x) { + return Caml_int64.xor(Caml_int64.xor(rotr(x, 28), rotr(x, 34)), rotr(x, 39)); +} + +function sum1(x) { + return Caml_int64.xor(Caml_int64.xor(rotr(x, 14), rotr(x, 18)), rotr(x, 41)); +} + +function sigma0(x) { + return Caml_int64.xor(Caml_int64.xor(rotr(x, 1), rotr(x, 8)), Caml_int64.lsr_(x, 7)); +} + +function sigma1(x) { + return Caml_int64.xor(Caml_int64.xor(rotr(x, 19), rotr(x, 61)), Caml_int64.lsr_(x, 6)); +} + +function append64(hash, value, offset) { + for(var j = 0; j <= 7; ++j){ + Belt_Array.set(hash, j + offset | 0, Caml_int64.to_int32(Caml_int64.and_(Caml_int64.lsr_(value, 56 - (j << 3) | 0), Caml_int64.mk(255, 0)))); + } + return hash; +} + +var k = [ + Caml_int64.mk(-685199838, 1116352408), + Caml_int64.mk(602891725, 1899447441), + Caml_int64.mk(-330482897, -1245643825), + Caml_int64.mk(-2121671748, -373957723), + Caml_int64.mk(-213338824, 961987163), + Caml_int64.mk(-1241133031, 1508970993), + Caml_int64.mk(-1357295717, -1841331548), + Caml_int64.mk(-630357736, -1424204075), + Caml_int64.mk(-1560083902, -670586216), + Caml_int64.mk(1164996542, 310598401), + Caml_int64.mk(1323610764, 607225278), + Caml_int64.mk(-704662302, 1426881987), + Caml_int64.mk(-226784913, 1925078388), + Caml_int64.mk(991336113, -2132889090), + Caml_int64.mk(633803317, -1680079193), + Caml_int64.mk(-815192428, -1046744716), + Caml_int64.mk(-1628353838, -459576895), + Caml_int64.mk(944711139, -272742522), + Caml_int64.mk(-1953704523, 264347078), + Caml_int64.mk(2007800933, 604807628), + Caml_int64.mk(1495990901, 770255983), + Caml_int64.mk(1856431235, 1249150122), + Caml_int64.mk(-1119749164, 1555081692), + Caml_int64.mk(-2096016459, 1996064986), + Caml_int64.mk(-295247957, -1740746414), + Caml_int64.mk(766784016, -1473132947), + Caml_int64.mk(-1728372417, -1341970488), + Caml_int64.mk(-1091629340, -1084653625), + Caml_int64.mk(1034457026, -958395405), + Caml_int64.mk(-1828018395, -710438585), + Caml_int64.mk(-536640913, 113926993), + Caml_int64.mk(168717936, 338241895), + Caml_int64.mk(1188179964, 666307205), + Caml_int64.mk(1546045734, 773529912), + Caml_int64.mk(1522805485, 1294757372), + Caml_int64.mk(-1651133473, 1396182291), + Caml_int64.mk(-1951439906, 1695183700), + Caml_int64.mk(1014477480, 1986661051), + Caml_int64.mk(1206759142, -2117940946), + Caml_int64.mk(344077627, -1838011259), + Caml_int64.mk(1290863460, -1564481375), + Caml_int64.mk(-1136513023, -1474664885), + Caml_int64.mk(-789014639, -1035236496), + Caml_int64.mk(106217008, -949202525), + Caml_int64.mk(-688958952, -778901479), + Caml_int64.mk(1432725776, -694614492), + Caml_int64.mk(1467031594, -200395387), + Caml_int64.mk(851169720, 275423344), + Caml_int64.mk(-1194143544, 430227734), + Caml_int64.mk(1363258195, 506948616), + Caml_int64.mk(-544281703, 659060556), + Caml_int64.mk(-509917016, 883997877), + Caml_int64.mk(-976659869, 958139571), + Caml_int64.mk(-482243893, 1322822218), + Caml_int64.mk(2003034995, 1537002063), + Caml_int64.mk(-692930397, 1747873779), + Caml_int64.mk(1575990012, 1955562222), + Caml_int64.mk(1125592928, 2024104815), + Caml_int64.mk(-1578062990, -2067236844), + Caml_int64.mk(442776044, -1933114872), + Caml_int64.mk(593698344, -1866530822), + Caml_int64.mk(-561857047, -1538233109), + Caml_int64.mk(-1295615723, -1090935817), + Caml_int64.mk(-479046869, -965641998), + Caml_int64.mk(-366583396, -903397682), + Caml_int64.mk(566280711, -779700025), + Caml_int64.mk(-840897762, -354779690), + Caml_int64.mk(-294727304, -176337025), + Caml_int64.mk(1914138554, 116418474), + Caml_int64.mk(-1563912026, 174292421), + Caml_int64.mk(-1090974290, 289380356), + Caml_int64.mk(320620315, 460393269), + Caml_int64.mk(587496836, 685471733), + Caml_int64.mk(1086792851, 852142971), + Caml_int64.mk(365543100, 1017036298), + Caml_int64.mk(-1676669620, 1126000580), + Caml_int64.mk(-885112138, 1288033470), + Caml_int64.mk(-60457430, 1501505948), + Caml_int64.mk(987167468, 1607167915), + Caml_int64.mk(1246189591, 1816402316) +]; + +function pad(msg) { + var size = (msg.length + 16 | 0) + 1 | 0; + while(size % 128 !== 0) { + size = size + 1 | 0; + }; + var length = msg.length; + var bytes = Belt_Array.makeBy(size, (function (index) { + if (index < length) { + return msg.charCodeAt(index) | 0; + } else if (index === length) { + return 128; + } else { + return 0; + } + })); + var va = (length << 3); + for(var i = 1; i <= 15; ++i){ + Belt_Array.set(bytes, bytes.length - i | 0, va & 255); + va = (va >> 8); + } + return bytes; +} function make(message) { - return ReCrypt_Sha512_Process.make(ReCrypt_Sha512_Preprocess.pad(message)); + var message$1 = pad(message); + var chunks = message$1.length / 128 | 0; + var a = { + contents: Caml_int64.mk(-205731576, 1779033703) + }; + var b = { + contents: Caml_int64.mk(-2067093701, -1150833019) + }; + var c = { + contents: Caml_int64.mk(-23791573, 1013904242) + }; + var d = { + contents: Caml_int64.mk(1595750129, -1521486534) + }; + var e = { + contents: Caml_int64.mk(-1377402159, 1359893119) + }; + var f = { + contents: Caml_int64.mk(725511199, -1694144372) + }; + var g = { + contents: Caml_int64.mk(-79577749, 528734635) + }; + var h = { + contents: Caml_int64.mk(327033209, 1541459225) + }; + for(var i = 0; i < chunks; ++i){ + var w = Belt_Array.make(80, Caml_int64.zero); + for(var t = 0; t <= 15; ++t){ + for(var j = 0; j <= 7; ++j){ + var result = Caml_int64.add(Caml_int64.lsl_(Belt_Option.getWithDefault(Belt_Array.get(w, t), Caml_int64.zero), 8), Caml_int64.of_int32(Belt_Option.getWithDefault(Belt_Array.get(message$1, j + ((i << 7) + (t << 3) | 0) | 0), 0) & 255)); + Belt_Array.set(w, t, result); + } + } + for(var t$1 = 16; t$1 <= 79; ++t$1){ + var t2 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 2 | 0), Caml_int64.zero); + var t7 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 7 | 0), Caml_int64.zero); + var t15 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 15 | 0), Caml_int64.zero); + var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), Caml_int64.zero); + var result$1 = Caml_int64.add(Caml_int64.add(Caml_int64.add(sigma1(t2), t7), sigma0(t15)), t16); + Belt_Array.set(w, t$1, result$1); + } + var originalA = a.contents; + var originalB = b.contents; + var originalC = c.contents; + var originalD = d.contents; + var originalE = e.contents; + var originalF = f.contents; + var originalG = g.contents; + var originalH = h.contents; + Belt_Array.forEachWithIndex(k, (function(w){ + return function (t, k) { + var temp1 = Caml_int64.add(Caml_int64.add(Caml_int64.add(Caml_int64.add(h.contents, sum1(e.contents)), change(e.contents, f.contents, g.contents)), k), Belt_Option.getWithDefault(Belt_Array.get(w, t), Caml_int64.zero)); + var temp2 = Caml_int64.add(sum0(a.contents), majority(a.contents, b.contents, c.contents)); + h.contents = g.contents; + g.contents = f.contents; + f.contents = e.contents; + e.contents = Caml_int64.add(d.contents, temp1); + d.contents = c.contents; + c.contents = b.contents; + b.contents = a.contents; + a.contents = Caml_int64.add(temp1, temp2); + + } + }(w))); + a.contents = Caml_int64.add(originalA, a.contents); + b.contents = Caml_int64.add(originalB, b.contents); + c.contents = Caml_int64.add(originalC, c.contents); + d.contents = Caml_int64.add(originalD, d.contents); + e.contents = Caml_int64.add(originalE, e.contents); + f.contents = Caml_int64.add(originalF, f.contents); + g.contents = Caml_int64.add(originalG, g.contents); + h.contents = Caml_int64.add(originalH, h.contents); + } + var input = Belt_Array.reduce(append64(append64(append64(append64(append64(append64(append64(append64(Belt_Array.make(64, 0), a.contents, 0), b.contents, 8), c.contents, 16), d.contents, 24), e.contents, 32), f.contents, 40), g.contents, 48), h.contents, 56), "", (function (acc, curr) { + return acc + String.fromCharCode(curr); + })); + var hex = "0123456789abcdef"; + return Belt_Array.reduce(input.split(""), "", (function (acc, curr) { + var charCode = curr.charCodeAt(0) | 0; + return acc + (hex.charAt((charCode >>> 4) & 15) + hex.charAt(charCode & 15)); + })); } exports.make = make; diff --git a/src/ReCrypt/ReCrypt_Sha512.re b/src/ReCrypt/ReCrypt_Sha512.re index 7264099..f4af445 100644 --- a/src/ReCrypt/ReCrypt_Sha512.re +++ b/src/ReCrypt/ReCrypt_Sha512.re @@ -1,5 +1,297 @@ -module Preprocess = ReCrypt_Sha512_Preprocess; -module Process = ReCrypt_Sha512_Process; +module Functions = { + let rotr = (x, n) => { + Int64.logor( + Int64.shift_right_logical(x, n), + Int64.shift_left(x, 64 - n), + ); + }; + + let change = (x, y, z) => { + Int64.logand(x, y)->Int64.logxor(Int64.logand(Int64.lognot(x), z)); + }; + + let majority = (x, y, z) => { + Int64.logand(x, y) + ->Int64.logxor(Int64.logand(x, z)) + ->Int64.logxor(Int64.logand(y, z)); + }; + + let sum0 = x => { + rotr(x, 28)->Int64.logxor(rotr(x, 34))->Int64.logxor(rotr(x, 39)); + }; + + let sum1 = x => { + rotr(x, 14)->Int64.logxor(rotr(x, 18))->Int64.logxor(rotr(x, 41)); + }; + + let sigma0 = x => { + rotr(x, 1) + ->Int64.logxor(rotr(x, 8)) + ->Int64.logxor(Int64.shift_right_logical(x, 7)); + }; + + let sigma1 = x => { + rotr(x, 19) + ->Int64.logxor(rotr(x, 61)) + ->Int64.logxor(Int64.shift_right_logical(x, 6)); + }; +}; + +module Utils = { + let append64 = (hash, value, offset) => { + for (j in 0 to 7) { + hash + ->Belt.Array.set( + j + offset, + Int64.shift_right_logical(value, 56 - j * 8) + ->Int64.logand(0xFFL) + ->Int64.to_int, + ) + ->ignore; + }; + hash; + }; + + let stringToHex = input => { + let hex = "0123456789abcdef"; + input + ->Js.String2.split("") + ->Belt.Array.reduce("", (acc, curr) => { + let charCode = curr->(Js.String2.charCodeAt(0))->Belt.Int.fromFloat; + + acc + ++ hex->Js.String2.charAt(charCode lsr 4 land 0x0F) + ++ hex->Js.String2.charAt(charCode land 0x0F); + }); + }; +}; + +module Constants = { + let k = [| + 0x428a2f98d728ae22L, + 0x7137449123ef65cdL, + 0xb5c0fbcfec4d3b2fL, + 0xe9b5dba58189dbbcL, + 0x3956c25bf348b538L, + 0x59f111f1b605d019L, + 0x923f82a4af194f9bL, + 0xab1c5ed5da6d8118L, + 0xd807aa98a3030242L, + 0x12835b0145706fbeL, + 0x243185be4ee4b28cL, + 0x550c7dc3d5ffb4e2L, + 0x72be5d74f27b896fL, + 0x80deb1fe3b1696b1L, + 0x9bdc06a725c71235L, + 0xc19bf174cf692694L, + 0xe49b69c19ef14ad2L, + 0xefbe4786384f25e3L, + 0x0fc19dc68b8cd5b5L, + 0x240ca1cc77ac9c65L, + 0x2de92c6f592b0275L, + 0x4a7484aa6ea6e483L, + 0x5cb0a9dcbd41fbd4L, + 0x76f988da831153b5L, + 0x983e5152ee66dfabL, + 0xa831c66d2db43210L, + 0xb00327c898fb213fL, + 0xbf597fc7beef0ee4L, + 0xc6e00bf33da88fc2L, + 0xd5a79147930aa725L, + 0x06ca6351e003826fL, + 0x142929670a0e6e70L, + 0x27b70a8546d22ffcL, + 0x2e1b21385c26c926L, + 0x4d2c6dfc5ac42aedL, + 0x53380d139d95b3dfL, + 0x650a73548baf63deL, + 0x766a0abb3c77b2a8L, + 0x81c2c92e47edaee6L, + 0x92722c851482353bL, + 0xa2bfe8a14cf10364L, + 0xa81a664bbc423001L, + 0xc24b8b70d0f89791L, + 0xc76c51a30654be30L, + 0xd192e819d6ef5218L, + 0xd69906245565a910L, + 0xf40e35855771202aL, + 0x106aa07032bbd1b8L, + 0x19a4c116b8d2d0c8L, + 0x1e376c085141ab53L, + 0x2748774cdf8eeb99L, + 0x34b0bcb5e19b48a8L, + 0x391c0cb3c5c95a63L, + 0x4ed8aa4ae3418acbL, + 0x5b9cca4f7763e373L, + 0x682e6ff3d6b2b8a3L, + 0x748f82ee5defb2fcL, + 0x78a5636f43172f60L, + 0x84c87814a1f0ab72L, + 0x8cc702081a6439ecL, + 0x90befffa23631e28L, + 0xa4506cebde82bde9L, + 0xbef9a3f7b2c67915L, + 0xc67178f2e372532bL, + 0xca273eceea26619cL, + 0xd186b8c721c0c207L, + 0xeada7dd6cde0eb1eL, + 0xf57d4f7fee6ed178L, + 0x06f067aa72176fbaL, + 0x0a637dc5a2c898a6L, + 0x113f9804bef90daeL, + 0x1b710b35131c471bL, + 0x28db77f523047d84L, + 0x32caab7b40c72493L, + 0x3c9ebe0a15c9bebcL, + 0x431d67c49c100d4cL, + 0x4cc5d4becb3e42b6L, + 0x597f299cfc657e2aL, + 0x5fcb6fab3ad6faecL, + 0x6c44198c4a475817L, + |]; +}; + +module Preprocess = { + let pad = msg => { + let size = ref(Js.String.length(msg) + 16 + 1); + while (size^ mod 128 != 0) { + size := size^ + 1; + }; + + let length = Js.String.length(msg); + + let bytes = + Belt.Array.makeBy(size^, index => + switch (index) { + | i when i < length => + msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat + | i when i == length => 0x80 + | _ => 0x00 + } + ); + + let va = ref(length * 8); + for (i in 1 to 15) { + let _ = + bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); + + va := va^ asr 8; + }; + bytes; + }; +}; + +module Process = { + let make = message => { + let chunks = Belt.Array.length(message) / 128; + + let a = ref(0x6a09e667f3bcc908L); + let b = ref(0xbb67ae8584caa73bL); + let c = ref(0x3c6ef372fe94f82bL); + let d = ref(0xa54ff53a5f1d36f1L); + let e = ref(0x510e527fade682d1L); + let f = ref(0x9b05688c2b3e6c1fL); + let g = ref(0x1f83d9abfb41bd6bL); + let h = ref(0x5be0cd19137e2179L); + + for (i in 0 to chunks - 1) { + let w = Belt.Array.make(80, 0x00L); + + for (t in 0 to 15) { + for (j in 0 to 7) { + let result = + Int64.shift_left( + w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00L), + 8, + ) + ->Int64.add( + ( + message + ->Belt.Array.get(j + (i * 128 + 8 * t)) + ->Belt.Option.getWithDefault(0x00) + land 0xff + ) + ->Int64.of_int, + ); + + w->Belt.Array.set(t, result)->ignore; + }; + }; + + for (t in 16 to 79) { + let t2 = w->Belt.Array.get(t - 2)->Belt.Option.getWithDefault(0x00L); + let t7 = w->Belt.Array.get(t - 7)->Belt.Option.getWithDefault(0x00L); + let t15 = + w->Belt.Array.get(t - 15)->Belt.Option.getWithDefault(0x00L); + let t16 = + w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00L); + + let result = + Functions.sigma1(t2) + ->Int64.add(t7) + ->Int64.add(Functions.sigma0(t15)) + ->Int64.add(t16); + + w->Belt.Array.set(t, result)->ignore; + }; + + let originalA = a^; + let originalB = b^; + let originalC = c^; + let originalD = d^; + let originalE = e^; + let originalF = f^; + let originalG = g^; + let originalH = h^; + + Constants.k->Belt.Array.forEachWithIndex((t, k) => { + let temp1 = + (h^) + ->Int64.add(Functions.sum1(e^)) + ->Int64.add(Functions.change(e^, f^, g^)) + ->Int64.add(k) + ->Int64.add( + w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00L), + ); + + let temp2 = + Int64.add(Functions.sum0(a^), Functions.majority(a^, b^, c^)); + + h := g^; + g := f^; + f := e^; + e := Int64.add(d^, temp1); + d := c^; + c := b^; + b := a^; + a := Int64.add(temp1, temp2); + }); + + a := Int64.add(originalA, a^); + b := Int64.add(originalB, b^); + c := Int64.add(originalC, c^); + d := Int64.add(originalD, d^); + e := Int64.add(originalE, e^); + f := Int64.add(originalF, f^); + g := Int64.add(originalG, g^); + h := Int64.add(originalH, h^); + }; + + Belt.Array.make(64, 0x00) + ->Utils.append64(a^, 0) + ->Utils.append64(b^, 8) + ->Utils.append64(c^, 16) + ->Utils.append64(d^, 24) + ->Utils.append64(e^, 32) + ->Utils.append64(f^, 40) + ->Utils.append64(g^, 48) + ->Utils.append64(h^, 56) + ->Belt.Array.reduce("", (acc, curr) => + acc ++ Js.String.fromCharCode(curr) + ) + ->Utils.stringToHex; + }; +}; let make = message => { message->Preprocess.pad->Process.make; diff --git a/src/ReCrypt/ReCrypt_Utils.bs.js b/src/ReCrypt/ReCrypt_Utils.bs.js deleted file mode 100644 index 5c4a363..0000000 --- a/src/ReCrypt/ReCrypt_Utils.bs.js +++ /dev/null @@ -1,40 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); -var Caml_int64 = require("bs-platform/lib/js/caml_int64.js"); - -function append(hash, value, offset) { - for(var j = 0; j <= 3; ++j){ - Belt_Array.set(hash, j + offset | 0, (value >>> (j << 3)) & 255); - } - return hash; -} - -function append32(hash, value, offset) { - for(var j = 0; j <= 3; ++j){ - Belt_Array.set(hash, j + offset | 0, (value >>> (24 - (j << 3) | 0)) & 255); - } - return hash; -} - -function append64(hash, value, offset) { - for(var j = 0; j <= 7; ++j){ - Belt_Array.set(hash, j + offset | 0, Caml_int64.to_int32(Caml_int64.and_(Caml_int64.lsr_(value, 56 - (j << 3) | 0), Caml_int64.mk(255, 0)))); - } - return hash; -} - -function stringToHex(input) { - var hex = "0123456789abcdef"; - return Belt_Array.reduce(input.split(""), "", (function (acc, curr) { - var charCode = curr.charCodeAt(0) | 0; - return acc + (hex.charAt((charCode >>> 4) & 15) + hex.charAt(charCode & 15)); - })); -} - -exports.append = append; -exports.append32 = append32; -exports.append64 = append64; -exports.stringToHex = stringToHex; -/* No side effect */ diff --git a/src/ReCrypt/ReCrypt_Utils.re b/src/ReCrypt/ReCrypt_Utils.re deleted file mode 100644 index 0e645fc..0000000 --- a/src/ReCrypt/ReCrypt_Utils.re +++ /dev/null @@ -1,47 +0,0 @@ -let append = (hash, value, offset) => { - for (j in 0 to 3) { - hash->Belt.Array.set(j + offset, value lsr (j * 8) land 0xFF)->ignore; - }; - hash; -}; - -let append32 = (hash, value, offset) => { - for (j in 0 to 3) { - hash - ->Belt.Array.set( - j + offset, - Int32.shift_right_logical(value, 24 - j * 8) - ->Int32.logand(0xFFl) - ->Int32.to_int, - ) - ->ignore; - }; - hash; -}; - -let append64 = (hash, value, offset) => { - for (j in 0 to 7) { - hash - ->Belt.Array.set( - j + offset, - Int64.shift_right_logical(value, 56 - j * 8) - ->Int64.logand(0xFFL) - ->Int64.to_int, - ) - ->ignore; - }; - hash; -}; - -let stringToHex = input => { - let hex = "0123456789abcdef"; - input - ->Js.String2.split("") - ->Belt.Array.reduce("", (acc, curr) => { - let charCode = curr->(Js.String2.charCodeAt(0))->Belt.Int.fromFloat; - - acc - ++ hex->Js.String2.charAt(charCode lsr 4 land 0x0F) - ++ hex->Js.String2.charAt(charCode land 0x0F); - }); -}; diff --git a/src/ReCrypt/ReCrypt_Utils.rei b/src/ReCrypt/ReCrypt_Utils.rei deleted file mode 100644 index ce7554a..0000000 --- a/src/ReCrypt/ReCrypt_Utils.rei +++ /dev/null @@ -1,4 +0,0 @@ -let append: (array(int), int, int) => array(int); -let append32: (array(int), int32, int) => array(int); -let append64: (array(int), int64, int) => array(int); -let stringToHex: Js.String2.t => string; diff --git a/src/ReCrypt/Sha1/ReCrypt_Sha1_Constants.bs.js b/src/ReCrypt/Sha1/ReCrypt_Sha1_Constants.bs.js deleted file mode 100644 index 21c9587..0000000 --- a/src/ReCrypt/Sha1/ReCrypt_Sha1_Constants.bs.js +++ /dev/null @@ -1,89 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - - -var k = [ - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1518500249, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - 1859775393, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -1894007588, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514, - -899497514 -]; - -exports.k = k; -/* No side effect */ diff --git a/src/ReCrypt/Sha1/ReCrypt_Sha1_Constants.re b/src/ReCrypt/Sha1/ReCrypt_Sha1_Constants.re deleted file mode 100644 index 4211a4a..0000000 --- a/src/ReCrypt/Sha1/ReCrypt_Sha1_Constants.re +++ /dev/null @@ -1,82 +0,0 @@ -let k = [| - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x5A827999l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x6ED9EBA1l, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0x8F1BBCDCl, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, - 0xCA62C1D6l, -|]; diff --git a/src/ReCrypt/Sha1/ReCrypt_Sha1_Constants.rei b/src/ReCrypt/Sha1/ReCrypt_Sha1_Constants.rei deleted file mode 100644 index 1ba37fe..0000000 --- a/src/ReCrypt/Sha1/ReCrypt_Sha1_Constants.rei +++ /dev/null @@ -1 +0,0 @@ -let k: array(int32); diff --git a/src/ReCrypt/Sha1/ReCrypt_Sha1_Preprocess.bs.js b/src/ReCrypt/Sha1/ReCrypt_Sha1_Preprocess.bs.js deleted file mode 100644 index da388f4..0000000 --- a/src/ReCrypt/Sha1/ReCrypt_Sha1_Preprocess.bs.js +++ /dev/null @@ -1,30 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); - -function pad(msg) { - var size = (msg.length + 8 | 0) + 1 | 0; - while(size % 64 !== 0) { - size = size + 1 | 0; - }; - var length = msg.length; - var bytes = Belt_Array.makeBy(size, (function (index) { - if (index < length) { - return msg.charCodeAt(index) | 0; - } else if (index === length) { - return 128; - } else { - return 0; - } - })); - var va = (length << 3); - for(var i = 1; i <= 15; ++i){ - Belt_Array.set(bytes, bytes.length - i | 0, va & 255); - va = (va >> 8); - } - return bytes; -} - -exports.pad = pad; -/* No side effect */ diff --git a/src/ReCrypt/Sha1/ReCrypt_Sha1_Preprocess.re b/src/ReCrypt/Sha1/ReCrypt_Sha1_Preprocess.re deleted file mode 100644 index a13cd03..0000000 --- a/src/ReCrypt/Sha1/ReCrypt_Sha1_Preprocess.re +++ /dev/null @@ -1,27 +0,0 @@ -let pad = msg => { - let size = ref(Js.String.length(msg) + 8 + 1); - while (size^ mod 64 != 0) { - size := size^ + 1; - }; - - let length = Js.String.length(msg); - - let bytes = - Belt.Array.makeBy(size^, index => - switch (index) { - | i when i < length => - msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat - | i when i == length => 0x80 - | _ => 0x00 - } - ); - - let va = ref(length * 8); - for (i in 1 to 15) { - let _ = - bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); - - va := va^ asr 8; - }; - bytes; -}; diff --git a/src/ReCrypt/Sha1/ReCrypt_Sha1_Preprocess.rei b/src/ReCrypt/Sha1/ReCrypt_Sha1_Preprocess.rei deleted file mode 100644 index 0a00697..0000000 --- a/src/ReCrypt/Sha1/ReCrypt_Sha1_Preprocess.rei +++ /dev/null @@ -1 +0,0 @@ -let pad: Js.String.t => array(int); diff --git a/src/ReCrypt/Sha1/ReCrypt_Sha1_Process.bs.js b/src/ReCrypt/Sha1/ReCrypt_Sha1_Process.bs.js deleted file mode 100644 index 629e006..0000000 --- a/src/ReCrypt/Sha1/ReCrypt_Sha1_Process.bs.js +++ /dev/null @@ -1,69 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); -var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); -var ReCrypt_Utils = require("../ReCrypt_Utils.bs.js"); -var ReCrypt_Functions_SHA1 = require("../Functions/ReCrypt_Functions_SHA1.bs.js"); -var ReCrypt_Sha1_Constants = require("./ReCrypt_Sha1_Constants.bs.js"); - -function make(message) { - var chunks = ((message.length + 8 | 0) >> 6); - var a = { - contents: 1732584193 - }; - var b = { - contents: -271733879 - }; - var c = { - contents: -1732584194 - }; - var d = { - contents: 271733878 - }; - var e = { - contents: -1009589776 - }; - for(var i = 0; i < chunks; ++i){ - var w = Belt_Array.make(80, 0); - for(var t = 0; t <= 15; ++t){ - var result = (Belt_Option.getWithDefault(Belt_Array.get(message, (i << 6) + (t << 2) | 0), 0) << 24) & -16777216 | (Belt_Option.getWithDefault(Belt_Array.get(message, ((i << 6) + (t << 2) | 0) + 1 | 0), 0) << 16) & 16711680 | (Belt_Option.getWithDefault(Belt_Array.get(message, ((i << 6) + (t << 2) | 0) + 2 | 0), 0) << 8) & 65280 | Belt_Option.getWithDefault(Belt_Array.get(message, ((i << 6) + (t << 2) | 0) + 3 | 0), 0) & 255; - Belt_Array.set(w, t, result); - } - for(var t$1 = 16; t$1 <= 79; ++t$1){ - var t3 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 3 | 0), 0); - var t8 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 8 | 0), 0); - var t14 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 14 | 0), 0); - var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), 0); - var result$1 = ReCrypt_Functions_SHA1.rotl(t3 ^ t8 ^ t14 ^ t16, 1); - Belt_Array.set(w, t$1, result$1); - } - var originalA = a.contents; - var originalB = b.contents; - var originalC = c.contents; - var originalD = d.contents; - var originalE = e.contents; - Belt_Array.forEachWithIndex(ReCrypt_Sha1_Constants.k, (function(w){ - return function (t, k) { - var temp = (((ReCrypt_Functions_SHA1.rotl(a.contents, 5) + ReCrypt_Functions_SHA1.f(t, b.contents, c.contents, d.contents) | 0) + e.contents | 0) + k | 0) + Belt_Option.getWithDefault(Belt_Array.get(w, t), 0) | 0; - e.contents = d.contents; - d.contents = c.contents; - c.contents = ReCrypt_Functions_SHA1.rotl(b.contents, 30); - b.contents = a.contents; - a.contents = temp; - - } - }(w))); - a.contents = originalA + a.contents | 0; - b.contents = originalB + b.contents | 0; - c.contents = originalC + c.contents | 0; - d.contents = originalD + d.contents | 0; - e.contents = originalE + e.contents | 0; - } - return ReCrypt_Utils.stringToHex(Belt_Array.reduce(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(Belt_Array.make(20, 0), a.contents, 0), b.contents, 4), c.contents, 8), d.contents, 12), e.contents, 16), "", (function (acc, curr) { - return acc + String.fromCharCode(curr); - }))); -} - -exports.make = make; -/* No side effect */ diff --git a/src/ReCrypt/Sha1/ReCrypt_Sha1_Process.re b/src/ReCrypt/Sha1/ReCrypt_Sha1_Process.re deleted file mode 100644 index 4034894..0000000 --- a/src/ReCrypt/Sha1/ReCrypt_Sha1_Process.re +++ /dev/null @@ -1,96 +0,0 @@ -let make = message => { - let chunks = (Belt.Array.length(message) + 8) asr 6; - - let a = ref(0x67452301l); - let b = ref(0xEFCDAB89l); - let c = ref(0x98BADCFEl); - let d = ref(0x10325476l); - let e = ref(0xC3D2E1F0l); - - for (i in 0 to chunks - 1) { - let w = Belt.Array.make(80, 0x00l); - - for (t in 0 to 15) { - let result = - Belt.Array.get(message, i * 64 + 4 * t) - ->Belt.Option.getWithDefault(0) - ->Int32.of_int - ->Int32.shift_left(24) - ->Int32.logand(-0x1000000l) - ->Int32.logor( - Belt.Array.get(message, i * 64 + 4 * t + 1) - ->Belt.Option.getWithDefault(0) - ->Int32.of_int - ->Int32.shift_left(16) - ->Int32.logand(0x00FF0000l), - ) - ->Int32.logor( - Belt.Array.get(message, i * 64 + 4 * t + 2) - ->Belt.Option.getWithDefault(0) - ->Int32.of_int - ->Int32.shift_left(8) - ->Int32.logand(0xFF00l) - ->Int32.logor( - Belt.Array.get(message, i * 64 + 4 * t + 3) - ->Belt.Option.getWithDefault(0) - ->Int32.of_int - ->Int32.logand(0xFFl), - ), - ); - - w->Belt.Array.set(t, result)->ignore; - }; - - for (t in 16 to 79) { - let t3 = w->Belt.Array.get(t - 3)->Belt.Option.getWithDefault(0x00l); - let t8 = w->Belt.Array.get(t - 8)->Belt.Option.getWithDefault(0x00l); - let t14 = w->Belt.Array.get(t - 14)->Belt.Option.getWithDefault(0x00l); - let t16 = w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00l); - let result = - ReCrypt_Functions.SHA1.rotl( - t3->Int32.logxor(t8)->Int32.logxor(t14)->Int32.logxor(t16), - 1, - ); - - w->Belt.Array.set(t, result)->ignore; - }; - - let originalA = a^; - let originalB = b^; - let originalC = c^; - let originalD = d^; - let originalE = e^; - - ReCrypt_Sha1_Constants.k->Belt.Array.forEachWithIndex((t, k) => { - let temp = - ReCrypt_Functions.SHA1.rotl(a^, 5) - ->Int32.add(ReCrypt_Functions.SHA1.f(t, b^, c^, d^)) - ->Int32.add(e^) - ->Int32.add(k) - ->Int32.add( - w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00l), - ); - - e := d^; - d := c^; - c := ReCrypt_Functions.SHA1.rotl(b^, 30); - b := a^; - a := temp; - }); - - a := Int32.add(originalA, a^); - b := Int32.add(originalB, b^); - c := Int32.add(originalC, c^); - d := Int32.add(originalD, d^); - e := Int32.add(originalE, e^); - }; - - Belt.Array.make(20, 0x00) - ->ReCrypt_Utils.append32(a^, 0) - ->ReCrypt_Utils.append32(b^, 4) - ->ReCrypt_Utils.append32(c^, 8) - ->ReCrypt_Utils.append32(d^, 12) - ->ReCrypt_Utils.append32(e^, 16) - ->Belt.Array.reduce("", (acc, curr) => acc ++ Js.String.fromCharCode(curr)) - ->ReCrypt_Utils.stringToHex; -}; diff --git a/src/ReCrypt/Sha1/ReCrypt_Sha1_Process.rei b/src/ReCrypt/Sha1/ReCrypt_Sha1_Process.rei deleted file mode 100644 index a10b982..0000000 --- a/src/ReCrypt/Sha1/ReCrypt_Sha1_Process.rei +++ /dev/null @@ -1 +0,0 @@ -let make: array(int) => string; diff --git a/src/ReCrypt/Sha224/ReCrypt_Sha224_Constants.bs.js b/src/ReCrypt/Sha224/ReCrypt_Sha224_Constants.bs.js deleted file mode 100644 index b036b94..0000000 --- a/src/ReCrypt/Sha224/ReCrypt_Sha224_Constants.bs.js +++ /dev/null @@ -1,73 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - - -var k = [ - 1116352408, - 1899447441, - -1245643825, - -373957723, - 961987163, - 1508970993, - -1841331548, - -1424204075, - -670586216, - 310598401, - 607225278, - 1426881987, - 1925078388, - -2132889090, - -1680079193, - -1046744716, - -459576895, - -272742522, - 264347078, - 604807628, - 770255983, - 1249150122, - 1555081692, - 1996064986, - -1740746414, - -1473132947, - -1341970488, - -1084653625, - -958395405, - -710438585, - 113926993, - 338241895, - 666307205, - 773529912, - 1294757372, - 1396182291, - 1695183700, - 1986661051, - -2117940946, - -1838011259, - -1564481375, - -1474664885, - -1035236496, - -949202525, - -778901479, - -694614492, - -200395387, - 275423344, - 430227734, - 506948616, - 659060556, - 883997877, - 958139571, - 1322822218, - 1537002063, - 1747873779, - 1955562222, - 2024104815, - -2067236844, - -1933114872, - -1866530822, - -1538233109, - -1090935817, - -965641998 -]; - -exports.k = k; -/* No side effect */ diff --git a/src/ReCrypt/Sha224/ReCrypt_Sha224_Constants.re b/src/ReCrypt/Sha224/ReCrypt_Sha224_Constants.re deleted file mode 100644 index 14687b8..0000000 --- a/src/ReCrypt/Sha224/ReCrypt_Sha224_Constants.re +++ /dev/null @@ -1,66 +0,0 @@ -let k = [| - 0x428a2f98l, - 0x71374491l, - (-0x4a3f0431l), - (-0x164a245bl), - 0x3956c25bl, - 0x59f111f1l, - (-0x6dc07d5cl), - (-0x54e3a12bl), - (-0x27f85568l), - 0x12835b01l, - 0x243185bel, - 0x550c7dc3l, - 0x72be5d74l, - (-0x7f214e02l), - (-0x6423f959l), - (-0x3e640e8cl), - (-0x1b64963fl), - (-0x1041b87al), - 0x0fc19dc6l, - 0x240ca1ccl, - 0x2de92c6fl, - 0x4a7484aal, - 0x5cb0a9dcl, - 0x76f988dal, - (-0x67c1aeael), - (-0x57ce3993l), - (-0x4ffcd838l), - (-0x40a68039l), - (-0x391ff40dl), - (-0x2a586eb9l), - 0x06ca6351l, - 0x14292967l, - 0x27b70a85l, - 0x2e1b2138l, - 0x4d2c6dfcl, - 0x53380d13l, - 0x650a7354l, - 0x766a0abbl, - (-0x7e3d36d2l), - (-0x6d8dd37bl), - (-0x5d40175fl), - (-0x57e599b5l), - (-0x3db47490l), - (-0x3893ae5dl), - (-0x2e6d17e7l), - (-0x2966f9dcl), - (-0xbf1ca7bl), - 0x106aa070l, - 0x19a4c116l, - 0x1e376c08l, - 0x2748774cl, - 0x34b0bcb5l, - 0x391c0cb3l, - 0x4ed8aa4al, - 0x5b9cca4fl, - 0x682e6ff3l, - 0x748f82eel, - 0x78a5636fl, - (-0x7b3787ecl), - (-0x7338fdf8l), - (-0x6f410006l), - (-0x5baf9315l), - (-0x41065c09l), - (-0x398e870el), -|]; diff --git a/src/ReCrypt/Sha224/ReCrypt_Sha224_Constants.rei b/src/ReCrypt/Sha224/ReCrypt_Sha224_Constants.rei deleted file mode 100644 index 1ba37fe..0000000 --- a/src/ReCrypt/Sha224/ReCrypt_Sha224_Constants.rei +++ /dev/null @@ -1 +0,0 @@ -let k: array(int32); diff --git a/src/ReCrypt/Sha224/ReCrypt_Sha224_Preprocess.bs.js b/src/ReCrypt/Sha224/ReCrypt_Sha224_Preprocess.bs.js deleted file mode 100644 index da388f4..0000000 --- a/src/ReCrypt/Sha224/ReCrypt_Sha224_Preprocess.bs.js +++ /dev/null @@ -1,30 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); - -function pad(msg) { - var size = (msg.length + 8 | 0) + 1 | 0; - while(size % 64 !== 0) { - size = size + 1 | 0; - }; - var length = msg.length; - var bytes = Belt_Array.makeBy(size, (function (index) { - if (index < length) { - return msg.charCodeAt(index) | 0; - } else if (index === length) { - return 128; - } else { - return 0; - } - })); - var va = (length << 3); - for(var i = 1; i <= 15; ++i){ - Belt_Array.set(bytes, bytes.length - i | 0, va & 255); - va = (va >> 8); - } - return bytes; -} - -exports.pad = pad; -/* No side effect */ diff --git a/src/ReCrypt/Sha224/ReCrypt_Sha224_Preprocess.re b/src/ReCrypt/Sha224/ReCrypt_Sha224_Preprocess.re deleted file mode 100644 index a13cd03..0000000 --- a/src/ReCrypt/Sha224/ReCrypt_Sha224_Preprocess.re +++ /dev/null @@ -1,27 +0,0 @@ -let pad = msg => { - let size = ref(Js.String.length(msg) + 8 + 1); - while (size^ mod 64 != 0) { - size := size^ + 1; - }; - - let length = Js.String.length(msg); - - let bytes = - Belt.Array.makeBy(size^, index => - switch (index) { - | i when i < length => - msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat - | i when i == length => 0x80 - | _ => 0x00 - } - ); - - let va = ref(length * 8); - for (i in 1 to 15) { - let _ = - bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); - - va := va^ asr 8; - }; - bytes; -}; diff --git a/src/ReCrypt/Sha224/ReCrypt_Sha224_Preprocess.rei b/src/ReCrypt/Sha224/ReCrypt_Sha224_Preprocess.rei deleted file mode 100644 index 0a00697..0000000 --- a/src/ReCrypt/Sha224/ReCrypt_Sha224_Preprocess.rei +++ /dev/null @@ -1 +0,0 @@ -let pad: Js.String.t => array(int); diff --git a/src/ReCrypt/Sha224/ReCrypt_Sha224_Process.bs.js b/src/ReCrypt/Sha224/ReCrypt_Sha224_Process.bs.js deleted file mode 100644 index 80d2130..0000000 --- a/src/ReCrypt/Sha224/ReCrypt_Sha224_Process.bs.js +++ /dev/null @@ -1,88 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); -var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); -var ReCrypt_Utils = require("../ReCrypt_Utils.bs.js"); -var ReCrypt_Functions_SHA2 = require("../Functions/ReCrypt_Functions_SHA2.bs.js"); -var ReCrypt_Sha224_Constants = require("./ReCrypt_Sha224_Constants.bs.js"); - -function make(message) { - var chunks = ((message.length + 8 | 0) >> 6); - var a = { - contents: -1056596264 - }; - var b = { - contents: 914150663 - }; - var c = { - contents: 812702999 - }; - var d = { - contents: -150054599 - }; - var e = { - contents: -4191439 - }; - var f = { - contents: 1750603025 - }; - var g = { - contents: 1694076839 - }; - var h = { - contents: -1090891868 - }; - for(var i = 0; i < chunks; ++i){ - var w = Belt_Array.make(64, 0); - for(var t = 0; t <= 15; ++t){ - var result = (Belt_Option.getWithDefault(Belt_Array.get(message, (i << 6) + (t << 2) | 0), 0) << 24) & -16777216 | (Belt_Option.getWithDefault(Belt_Array.get(message, ((i << 6) + (t << 2) | 0) + 1 | 0), 0) << 16) & 16711680 | (Belt_Option.getWithDefault(Belt_Array.get(message, ((i << 6) + (t << 2) | 0) + 2 | 0), 0) << 8) & 65280 | Belt_Option.getWithDefault(Belt_Array.get(message, ((i << 6) + (t << 2) | 0) + 3 | 0), 0) & 255; - Belt_Array.set(w, t, result); - } - for(var t$1 = 16; t$1 <= 63; ++t$1){ - var t2 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 2 | 0), 0); - var t7 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 7 | 0), 0); - var t15 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 15 | 0), 0); - var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), 0); - var result$1 = ((ReCrypt_Functions_SHA2.Int32.sigma1(t2) + t7 | 0) + ReCrypt_Functions_SHA2.Int32.sigma0(t15) | 0) + t16 | 0; - Belt_Array.set(w, t$1, result$1); - } - var originalA = a.contents; - var originalB = b.contents; - var originalC = c.contents; - var originalD = d.contents; - var originalE = e.contents; - var originalF = f.contents; - var originalG = g.contents; - var originalH = h.contents; - Belt_Array.forEachWithIndex(ReCrypt_Sha224_Constants.k, (function(w){ - return function (t, k) { - var temp1 = (((h.contents + ReCrypt_Functions_SHA2.Int32.sum1(e.contents) | 0) + ReCrypt_Functions_SHA2.Int32.change(e.contents, f.contents, g.contents) | 0) + k | 0) + Belt_Option.getWithDefault(Belt_Array.get(w, t), 0) | 0; - var temp2 = ReCrypt_Functions_SHA2.Int32.sum0(a.contents) + ReCrypt_Functions_SHA2.Int32.majority(a.contents, b.contents, c.contents) | 0; - h.contents = g.contents; - g.contents = f.contents; - f.contents = e.contents; - e.contents = d.contents + temp1 | 0; - d.contents = c.contents; - c.contents = b.contents; - b.contents = a.contents; - a.contents = temp1 + temp2 | 0; - - } - }(w))); - a.contents = originalA + a.contents | 0; - b.contents = originalB + b.contents | 0; - c.contents = originalC + c.contents | 0; - d.contents = originalD + d.contents | 0; - e.contents = originalE + e.contents | 0; - f.contents = originalF + f.contents | 0; - g.contents = originalG + g.contents | 0; - h.contents = originalH + h.contents | 0; - } - return ReCrypt_Utils.stringToHex(Belt_Array.reduce(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(Belt_Array.make(28, 0), a.contents, 0), b.contents, 4), c.contents, 8), d.contents, 12), e.contents, 16), f.contents, 20), g.contents, 24), "", (function (acc, curr) { - return acc + String.fromCharCode(curr); - }))); -} - -exports.make = make; -/* No side effect */ diff --git a/src/ReCrypt/Sha224/ReCrypt_Sha224_Process.re b/src/ReCrypt/Sha224/ReCrypt_Sha224_Process.re deleted file mode 100644 index cc5ca6c..0000000 --- a/src/ReCrypt/Sha224/ReCrypt_Sha224_Process.re +++ /dev/null @@ -1,117 +0,0 @@ -let make = message => { - let chunks = (Belt.Array.length(message) + 8) asr 6; - - let a = ref(-0x3efa6128l); - let b = ref(0x367cd507l); - let c = ref(0x3070dd17l); - let d = ref(-0x8f1a6c7l); - let e = ref(-0x3ff4cfl); - let f = ref(0x68581511l); - let g = ref(0x64f98fa7l); - let h = ref(-0x4105b05cl); - - for (i in 0 to chunks - 1) { - let w = Belt.Array.make(64, 0x00l); - - for (t in 0 to 15) { - let result = - Belt.Array.get(message, i * 64 + 4 * t) - ->Belt.Option.getWithDefault(0) - ->Int32.of_int - ->Int32.shift_left(24) - ->Int32.logand(-0x1000000l) - ->Int32.logor( - Belt.Array.get(message, i * 64 + 4 * t + 1) - ->Belt.Option.getWithDefault(0) - ->Int32.of_int - ->Int32.shift_left(16) - ->Int32.logand(0x00FF0000l), - ) - ->Int32.logor( - Belt.Array.get(message, i * 64 + 4 * t + 2) - ->Belt.Option.getWithDefault(0) - ->Int32.of_int - ->Int32.shift_left(8) - ->Int32.logand(0xFF00l) - ->Int32.logor( - Belt.Array.get(message, i * 64 + 4 * t + 3) - ->Belt.Option.getWithDefault(0) - ->Int32.of_int - ->Int32.logand(0xFFl), - ), - ); - - w->Belt.Array.set(t, result)->ignore; - }; - - for (t in 16 to 63) { - let t2 = w->Belt.Array.get(t - 2)->Belt.Option.getWithDefault(0x00l); - let t7 = w->Belt.Array.get(t - 7)->Belt.Option.getWithDefault(0x00l); - let t15 = w->Belt.Array.get(t - 15)->Belt.Option.getWithDefault(0x00l); - let t16 = w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00l); - - let result = - ReCrypt_Functions.SHA2.Int32.sigma1(t2) - ->Int32.add(t7) - ->Int32.add(ReCrypt_Functions.SHA2.Int32.sigma0(t15)) - ->Int32.add(t16); - - w->Belt.Array.set(t, result)->ignore; - }; - - let originalA = a^; - let originalB = b^; - let originalC = c^; - let originalD = d^; - let originalE = e^; - let originalF = f^; - let originalG = g^; - let originalH = h^; - - ReCrypt_Sha224_Constants.k->Belt.Array.forEachWithIndex((t, k) => { - let temp1 = - (h^) - ->Int32.add(ReCrypt_Functions.SHA2.Int32.sum1(e^)) - ->Int32.add(ReCrypt_Functions.SHA2.Int32.change(e^, f^, g^)) - ->Int32.add(k) - ->Int32.add( - w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00l), - ); - - let temp2 = - Int32.add( - ReCrypt_Functions.SHA2.Int32.sum0(a^), - ReCrypt_Functions.SHA2.Int32.majority(a^, b^, c^), - ); - - h := g^; - g := f^; - f := e^; - e := Int32.add(d^, temp1); - d := c^; - c := b^; - b := a^; - a := Int32.add(temp1, temp2); - }); - - a := Int32.add(originalA, a^); - b := Int32.add(originalB, b^); - c := Int32.add(originalC, c^); - d := Int32.add(originalD, d^); - e := Int32.add(originalE, e^); - f := Int32.add(originalF, f^); - g := Int32.add(originalG, g^); - h := Int32.add(originalH, h^); - }; - - Belt.Array.make(28, 0x00) - ->ReCrypt_Utils.append32(a^, 0) - ->ReCrypt_Utils.append32(b^, 4) - ->ReCrypt_Utils.append32(c^, 8) - ->ReCrypt_Utils.append32(d^, 12) - ->ReCrypt_Utils.append32(e^, 16) - ->ReCrypt_Utils.append32(f^, 20) - ->ReCrypt_Utils.append32(g^, 24) - ->Belt.Array.reduce("", (acc, curr) => acc ++ Js.String.fromCharCode(curr)) - ->ReCrypt_Utils.stringToHex; -}; diff --git a/src/ReCrypt/Sha224/ReCrypt_Sha224_Process.rei b/src/ReCrypt/Sha224/ReCrypt_Sha224_Process.rei deleted file mode 100644 index a10b982..0000000 --- a/src/ReCrypt/Sha224/ReCrypt_Sha224_Process.rei +++ /dev/null @@ -1 +0,0 @@ -let make: array(int) => string; diff --git a/src/ReCrypt/Sha256/ReCrypt_Sha256_Constants.bs.js b/src/ReCrypt/Sha256/ReCrypt_Sha256_Constants.bs.js deleted file mode 100644 index b036b94..0000000 --- a/src/ReCrypt/Sha256/ReCrypt_Sha256_Constants.bs.js +++ /dev/null @@ -1,73 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - - -var k = [ - 1116352408, - 1899447441, - -1245643825, - -373957723, - 961987163, - 1508970993, - -1841331548, - -1424204075, - -670586216, - 310598401, - 607225278, - 1426881987, - 1925078388, - -2132889090, - -1680079193, - -1046744716, - -459576895, - -272742522, - 264347078, - 604807628, - 770255983, - 1249150122, - 1555081692, - 1996064986, - -1740746414, - -1473132947, - -1341970488, - -1084653625, - -958395405, - -710438585, - 113926993, - 338241895, - 666307205, - 773529912, - 1294757372, - 1396182291, - 1695183700, - 1986661051, - -2117940946, - -1838011259, - -1564481375, - -1474664885, - -1035236496, - -949202525, - -778901479, - -694614492, - -200395387, - 275423344, - 430227734, - 506948616, - 659060556, - 883997877, - 958139571, - 1322822218, - 1537002063, - 1747873779, - 1955562222, - 2024104815, - -2067236844, - -1933114872, - -1866530822, - -1538233109, - -1090935817, - -965641998 -]; - -exports.k = k; -/* No side effect */ diff --git a/src/ReCrypt/Sha256/ReCrypt_Sha256_Constants.re b/src/ReCrypt/Sha256/ReCrypt_Sha256_Constants.re deleted file mode 100644 index 14687b8..0000000 --- a/src/ReCrypt/Sha256/ReCrypt_Sha256_Constants.re +++ /dev/null @@ -1,66 +0,0 @@ -let k = [| - 0x428a2f98l, - 0x71374491l, - (-0x4a3f0431l), - (-0x164a245bl), - 0x3956c25bl, - 0x59f111f1l, - (-0x6dc07d5cl), - (-0x54e3a12bl), - (-0x27f85568l), - 0x12835b01l, - 0x243185bel, - 0x550c7dc3l, - 0x72be5d74l, - (-0x7f214e02l), - (-0x6423f959l), - (-0x3e640e8cl), - (-0x1b64963fl), - (-0x1041b87al), - 0x0fc19dc6l, - 0x240ca1ccl, - 0x2de92c6fl, - 0x4a7484aal, - 0x5cb0a9dcl, - 0x76f988dal, - (-0x67c1aeael), - (-0x57ce3993l), - (-0x4ffcd838l), - (-0x40a68039l), - (-0x391ff40dl), - (-0x2a586eb9l), - 0x06ca6351l, - 0x14292967l, - 0x27b70a85l, - 0x2e1b2138l, - 0x4d2c6dfcl, - 0x53380d13l, - 0x650a7354l, - 0x766a0abbl, - (-0x7e3d36d2l), - (-0x6d8dd37bl), - (-0x5d40175fl), - (-0x57e599b5l), - (-0x3db47490l), - (-0x3893ae5dl), - (-0x2e6d17e7l), - (-0x2966f9dcl), - (-0xbf1ca7bl), - 0x106aa070l, - 0x19a4c116l, - 0x1e376c08l, - 0x2748774cl, - 0x34b0bcb5l, - 0x391c0cb3l, - 0x4ed8aa4al, - 0x5b9cca4fl, - 0x682e6ff3l, - 0x748f82eel, - 0x78a5636fl, - (-0x7b3787ecl), - (-0x7338fdf8l), - (-0x6f410006l), - (-0x5baf9315l), - (-0x41065c09l), - (-0x398e870el), -|]; diff --git a/src/ReCrypt/Sha256/ReCrypt_Sha256_Constants.rei b/src/ReCrypt/Sha256/ReCrypt_Sha256_Constants.rei deleted file mode 100644 index 1ba37fe..0000000 --- a/src/ReCrypt/Sha256/ReCrypt_Sha256_Constants.rei +++ /dev/null @@ -1 +0,0 @@ -let k: array(int32); diff --git a/src/ReCrypt/Sha256/ReCrypt_Sha256_Preprocess.bs.js b/src/ReCrypt/Sha256/ReCrypt_Sha256_Preprocess.bs.js deleted file mode 100644 index da388f4..0000000 --- a/src/ReCrypt/Sha256/ReCrypt_Sha256_Preprocess.bs.js +++ /dev/null @@ -1,30 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); - -function pad(msg) { - var size = (msg.length + 8 | 0) + 1 | 0; - while(size % 64 !== 0) { - size = size + 1 | 0; - }; - var length = msg.length; - var bytes = Belt_Array.makeBy(size, (function (index) { - if (index < length) { - return msg.charCodeAt(index) | 0; - } else if (index === length) { - return 128; - } else { - return 0; - } - })); - var va = (length << 3); - for(var i = 1; i <= 15; ++i){ - Belt_Array.set(bytes, bytes.length - i | 0, va & 255); - va = (va >> 8); - } - return bytes; -} - -exports.pad = pad; -/* No side effect */ diff --git a/src/ReCrypt/Sha256/ReCrypt_Sha256_Preprocess.re b/src/ReCrypt/Sha256/ReCrypt_Sha256_Preprocess.re deleted file mode 100644 index a13cd03..0000000 --- a/src/ReCrypt/Sha256/ReCrypt_Sha256_Preprocess.re +++ /dev/null @@ -1,27 +0,0 @@ -let pad = msg => { - let size = ref(Js.String.length(msg) + 8 + 1); - while (size^ mod 64 != 0) { - size := size^ + 1; - }; - - let length = Js.String.length(msg); - - let bytes = - Belt.Array.makeBy(size^, index => - switch (index) { - | i when i < length => - msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat - | i when i == length => 0x80 - | _ => 0x00 - } - ); - - let va = ref(length * 8); - for (i in 1 to 15) { - let _ = - bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); - - va := va^ asr 8; - }; - bytes; -}; diff --git a/src/ReCrypt/Sha256/ReCrypt_Sha256_Preprocess.rei b/src/ReCrypt/Sha256/ReCrypt_Sha256_Preprocess.rei deleted file mode 100644 index 0a00697..0000000 --- a/src/ReCrypt/Sha256/ReCrypt_Sha256_Preprocess.rei +++ /dev/null @@ -1 +0,0 @@ -let pad: Js.String.t => array(int); diff --git a/src/ReCrypt/Sha256/ReCrypt_Sha256_Process.bs.js b/src/ReCrypt/Sha256/ReCrypt_Sha256_Process.bs.js deleted file mode 100644 index e8a5667..0000000 --- a/src/ReCrypt/Sha256/ReCrypt_Sha256_Process.bs.js +++ /dev/null @@ -1,88 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); -var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); -var ReCrypt_Utils = require("../ReCrypt_Utils.bs.js"); -var ReCrypt_Functions_SHA2 = require("../Functions/ReCrypt_Functions_SHA2.bs.js"); -var ReCrypt_Sha256_Constants = require("./ReCrypt_Sha256_Constants.bs.js"); - -function make(message) { - var chunks = ((message.length + 8 | 0) >> 6); - var a = { - contents: 1779033703 - }; - var b = { - contents: -1150833019 - }; - var c = { - contents: 1013904242 - }; - var d = { - contents: -1521486534 - }; - var e = { - contents: 1359893119 - }; - var f = { - contents: -1694144372 - }; - var g = { - contents: 528734635 - }; - var h = { - contents: 1541459225 - }; - for(var i = 0; i < chunks; ++i){ - var w = Belt_Array.make(64, 0); - for(var t = 0; t <= 15; ++t){ - var result = (message[(i << 6) + (t << 2) | 0] << 24) & -16777216 | (message[((i << 6) + (t << 2) | 0) + 1 | 0] << 16) & 16711680 | (message[((i << 6) + (t << 2) | 0) + 2 | 0] << 8) & 65280 | message[((i << 6) + (t << 2) | 0) + 3 | 0] & 255; - Belt_Array.set(w, t, result); - } - for(var t$1 = 16; t$1 <= 63; ++t$1){ - var t2 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 2 | 0), 0); - var t7 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 7 | 0), 0); - var t15 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 15 | 0), 0); - var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), 0); - var result$1 = ((ReCrypt_Functions_SHA2.Int32.sigma1(t2) + t7 | 0) + ReCrypt_Functions_SHA2.Int32.sigma0(t15) | 0) + t16 | 0; - Belt_Array.set(w, t$1, result$1); - } - var originalA = a.contents; - var originalB = b.contents; - var originalC = c.contents; - var originalD = d.contents; - var originalE = e.contents; - var originalF = f.contents; - var originalG = g.contents; - var originalH = h.contents; - Belt_Array.forEachWithIndex(ReCrypt_Sha256_Constants.k, (function(w){ - return function (t, k) { - var temp1 = (((h.contents + ReCrypt_Functions_SHA2.Int32.sum1(e.contents) | 0) + ReCrypt_Functions_SHA2.Int32.change(e.contents, f.contents, g.contents) | 0) + k | 0) + Belt_Option.getWithDefault(Belt_Array.get(w, t), 0) | 0; - var temp2 = ReCrypt_Functions_SHA2.Int32.sum0(a.contents) + ReCrypt_Functions_SHA2.Int32.majority(a.contents, b.contents, c.contents) | 0; - h.contents = g.contents; - g.contents = f.contents; - f.contents = e.contents; - e.contents = d.contents + temp1 | 0; - d.contents = c.contents; - c.contents = b.contents; - b.contents = a.contents; - a.contents = temp1 + temp2 | 0; - - } - }(w))); - a.contents = originalA + a.contents | 0; - b.contents = originalB + b.contents | 0; - c.contents = originalC + c.contents | 0; - d.contents = originalD + d.contents | 0; - e.contents = originalE + e.contents | 0; - f.contents = originalF + f.contents | 0; - g.contents = originalG + g.contents | 0; - h.contents = originalH + h.contents | 0; - } - return ReCrypt_Utils.stringToHex(Belt_Array.reduce(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(ReCrypt_Utils.append32(Belt_Array.make(32, 0), a.contents, 0), b.contents, 4), c.contents, 8), d.contents, 12), e.contents, 16), f.contents, 20), g.contents, 24), h.contents, 28), "", (function (acc, curr) { - return acc + String.fromCharCode(curr); - }))); -} - -exports.make = make; -/* No side effect */ diff --git a/src/ReCrypt/Sha256/ReCrypt_Sha256_Process.re b/src/ReCrypt/Sha256/ReCrypt_Sha256_Process.re deleted file mode 100644 index 6372c35..0000000 --- a/src/ReCrypt/Sha256/ReCrypt_Sha256_Process.re +++ /dev/null @@ -1,113 +0,0 @@ -let make = message => { - let chunks = (Belt.Array.length(message) + 8) asr 6; - - let a = ref(0x6a09e667l); - let b = ref(-0x4498517bl); - let c = ref(0x3c6ef372l); - let d = ref(-0x5ab00ac6l); - let e = ref(0x510e527fl); - let f = ref(-0x64fa9774l); - let g = ref(0x1f83d9abl); - let h = ref(0x5be0cd19l); - - for (i in 0 to chunks - 1) { - let w = Belt.Array.make(64, 0x00l); - - for (t in 0 to 15) { - let result = - Belt.Array.getUnsafe(message, i * 64 + 4 * t) - ->Int32.of_int - ->Int32.shift_left(24) - ->Int32.logand(-0x1000000l) - ->Int32.logor( - Belt.Array.getUnsafe(message, i * 64 + 4 * t + 1) - ->Int32.of_int - ->Int32.shift_left(16) - ->Int32.logand(0x00FF0000l), - ) - ->Int32.logor( - Belt.Array.getUnsafe(message, i * 64 + 4 * t + 2) - ->Int32.of_int - ->Int32.shift_left(8) - ->Int32.logand(0xFF00l) - ->Int32.logor( - Belt.Array.getUnsafe(message, i * 64 + 4 * t + 3) - ->Int32.of_int - ->Int32.logand(0xFFl), - ), - ); - w->Belt.Array.set(t, result)->ignore; - }; - - for (t in 16 to 63) { - let t2 = w->Belt.Array.get(t - 2)->Belt.Option.getWithDefault(0x00l); - let t7 = w->Belt.Array.get(t - 7)->Belt.Option.getWithDefault(0x00l); - let t15 = w->Belt.Array.get(t - 15)->Belt.Option.getWithDefault(0x00l); - let t16 = w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00l); - - let result = - ReCrypt_Functions.SHA2.Int32.sigma1(t2) - ->Int32.add(t7) - ->Int32.add(ReCrypt_Functions.SHA2.Int32.sigma0(t15)) - ->Int32.add(t16); - - w->Belt.Array.set(t, result)->ignore; - }; - - let originalA = a^; - let originalB = b^; - let originalC = c^; - let originalD = d^; - let originalE = e^; - let originalF = f^; - let originalG = g^; - let originalH = h^; - - ReCrypt_Sha256_Constants.k->Belt.Array.forEachWithIndex((t, k) => { - let temp1 = - (h^) - ->Int32.add(ReCrypt_Functions.SHA2.Int32.sum1(e^)) - ->Int32.add(ReCrypt_Functions.SHA2.Int32.change(e^, f^, g^)) - ->Int32.add(k) - ->Int32.add( - w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00l), - ); - - let temp2 = - Int32.add( - ReCrypt_Functions.SHA2.Int32.sum0(a^), - ReCrypt_Functions.SHA2.Int32.majority(a^, b^, c^), - ); - - h := g^; - g := f^; - f := e^; - e := Int32.add(d^, temp1); - d := c^; - c := b^; - b := a^; - a := Int32.add(temp1, temp2); - }); - - a := Int32.add(originalA, a^); - b := Int32.add(originalB, b^); - c := Int32.add(originalC, c^); - d := Int32.add(originalD, d^); - e := Int32.add(originalE, e^); - f := Int32.add(originalF, f^); - g := Int32.add(originalG, g^); - h := Int32.add(originalH, h^); - }; - - Belt.Array.make(32, 0x00) - ->ReCrypt_Utils.append32(a^, 0) - ->ReCrypt_Utils.append32(b^, 4) - ->ReCrypt_Utils.append32(c^, 8) - ->ReCrypt_Utils.append32(d^, 12) - ->ReCrypt_Utils.append32(e^, 16) - ->ReCrypt_Utils.append32(f^, 20) - ->ReCrypt_Utils.append32(g^, 24) - ->ReCrypt_Utils.append32(h^, 28) - ->Belt.Array.reduce("", (acc, curr) => acc ++ Js.String.fromCharCode(curr)) - ->ReCrypt_Utils.stringToHex; -}; diff --git a/src/ReCrypt/Sha256/ReCrypt_Sha256_Process.rei b/src/ReCrypt/Sha256/ReCrypt_Sha256_Process.rei deleted file mode 100644 index a10b982..0000000 --- a/src/ReCrypt/Sha256/ReCrypt_Sha256_Process.rei +++ /dev/null @@ -1 +0,0 @@ -let make: array(int) => string; diff --git a/src/ReCrypt/Sha384/ReCrypt_Sha384_Constants.bs.js b/src/ReCrypt/Sha384/ReCrypt_Sha384_Constants.bs.js deleted file mode 100644 index 9078cd8..0000000 --- a/src/ReCrypt/Sha384/ReCrypt_Sha384_Constants.bs.js +++ /dev/null @@ -1,90 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Caml_int64 = require("bs-platform/lib/js/caml_int64.js"); - -var k = [ - Caml_int64.mk(-685199838, 1116352408), - Caml_int64.mk(602891725, 1899447441), - Caml_int64.mk(-330482897, -1245643825), - Caml_int64.mk(-2121671748, -373957723), - Caml_int64.mk(-213338824, 961987163), - Caml_int64.mk(-1241133031, 1508970993), - Caml_int64.mk(-1357295717, -1841331548), - Caml_int64.mk(-630357736, -1424204075), - Caml_int64.mk(-1560083902, -670586216), - Caml_int64.mk(1164996542, 310598401), - Caml_int64.mk(1323610764, 607225278), - Caml_int64.mk(-704662302, 1426881987), - Caml_int64.mk(-226784913, 1925078388), - Caml_int64.mk(991336113, -2132889090), - Caml_int64.mk(633803317, -1680079193), - Caml_int64.mk(-815192428, -1046744716), - Caml_int64.mk(-1628353838, -459576895), - Caml_int64.mk(944711139, -272742522), - Caml_int64.mk(-1953704523, 264347078), - Caml_int64.mk(2007800933, 604807628), - Caml_int64.mk(1495990901, 770255983), - Caml_int64.mk(1856431235, 1249150122), - Caml_int64.mk(-1119749164, 1555081692), - Caml_int64.mk(-2096016459, 1996064986), - Caml_int64.mk(-295247957, -1740746414), - Caml_int64.mk(766784016, -1473132947), - Caml_int64.mk(-1728372417, -1341970488), - Caml_int64.mk(-1091629340, -1084653625), - Caml_int64.mk(1034457026, -958395405), - Caml_int64.mk(-1828018395, -710438585), - Caml_int64.mk(-536640913, 113926993), - Caml_int64.mk(168717936, 338241895), - Caml_int64.mk(1188179964, 666307205), - Caml_int64.mk(1546045734, 773529912), - Caml_int64.mk(1522805485, 1294757372), - Caml_int64.mk(-1651133473, 1396182291), - Caml_int64.mk(-1951439906, 1695183700), - Caml_int64.mk(1014477480, 1986661051), - Caml_int64.mk(1206759142, -2117940946), - Caml_int64.mk(344077627, -1838011259), - Caml_int64.mk(1290863460, -1564481375), - Caml_int64.mk(-1136513023, -1474664885), - Caml_int64.mk(-789014639, -1035236496), - Caml_int64.mk(106217008, -949202525), - Caml_int64.mk(-688958952, -778901479), - Caml_int64.mk(1432725776, -694614492), - Caml_int64.mk(1467031594, -200395387), - Caml_int64.mk(851169720, 275423344), - Caml_int64.mk(-1194143544, 430227734), - Caml_int64.mk(1363258195, 506948616), - Caml_int64.mk(-544281703, 659060556), - Caml_int64.mk(-509917016, 883997877), - Caml_int64.mk(-976659869, 958139571), - Caml_int64.mk(-482243893, 1322822218), - Caml_int64.mk(2003034995, 1537002063), - Caml_int64.mk(-692930397, 1747873779), - Caml_int64.mk(1575990012, 1955562222), - Caml_int64.mk(1125592928, 2024104815), - Caml_int64.mk(-1578062990, -2067236844), - Caml_int64.mk(442776044, -1933114872), - Caml_int64.mk(593698344, -1866530822), - Caml_int64.mk(-561857047, -1538233109), - Caml_int64.mk(-1295615723, -1090935817), - Caml_int64.mk(-479046869, -965641998), - Caml_int64.mk(-366583396, -903397682), - Caml_int64.mk(566280711, -779700025), - Caml_int64.mk(-840897762, -354779690), - Caml_int64.mk(-294727304, -176337025), - Caml_int64.mk(1914138554, 116418474), - Caml_int64.mk(-1563912026, 174292421), - Caml_int64.mk(-1090974290, 289380356), - Caml_int64.mk(320620315, 460393269), - Caml_int64.mk(587496836, 685471733), - Caml_int64.mk(1086792851, 852142971), - Caml_int64.mk(365543100, 1017036298), - Caml_int64.mk(-1676669620, 1126000580), - Caml_int64.mk(-885112138, 1288033470), - Caml_int64.mk(-60457430, 1501505948), - Caml_int64.mk(987167468, 1607167915), - Caml_int64.mk(1246189591, 1816402316) -]; - -exports.k = k; -/* No side effect */ diff --git a/src/ReCrypt/Sha384/ReCrypt_Sha384_Constants.re b/src/ReCrypt/Sha384/ReCrypt_Sha384_Constants.re deleted file mode 100644 index 071ac72..0000000 --- a/src/ReCrypt/Sha384/ReCrypt_Sha384_Constants.re +++ /dev/null @@ -1,82 +0,0 @@ -let k = [| - 0x428A2F98D728AE22L, - 0x7137449123EF65CDL, - (-0x4a3f043013b2c4d1L), - (-0x164a245a7e762444L), - 0x3956C25BF348B538L, - 0x59F111F1B605D019L, - (-0x6dc07d5b50e6b065L), - (-0x54e3a12a25927ee8L), - (-0x27f855675cfcfdbeL), - 0x12835B0145706FBEL, - 0x243185BE4EE4B28CL, - 0x550C7DC3D5FFB4E2L, - 0x72BE5D74F27B896FL, - (-0x7f214e01c4e9694fL), - (-0x6423f958da38edcbL), - (-0x3e640e8b3096d96cL), - (-0x1b64963e610eb52eL), - (-0x1041b879c7b0da1dL), - 0x0FC19DC68B8CD5B5L, - 0x240CA1CC77AC9C65L, - 0x2DE92C6F592B0275L, - 0x4A7484AA6EA6E483L, - 0x5CB0A9DCBD41FBD4L, - 0x76F988DA831153B5L, - (-0x67c1aead11992055L), - (-0x57ce3992d24bcdf0L), - (-0x4ffcd8376704dec1L), - (-0x40a680384110f11cL), - (-0x391ff40cc257703eL), - (-0x2a586eb86cf558dbL), - 0x06CA6351E003826FL, - 0x142929670A0E6E70L, - 0x27B70A8546D22FFCL, - 0x2E1B21385C26C926L, - 0x4D2C6DFC5AC42AEDL, - 0x53380D139D95B3DFL, - 0x650A73548BAF63DEL, - 0x766A0ABB3C77B2A8L, - (-0x7e3d36d1b812511aL), - (-0x6d8dd37aeb7dcac5L), - (-0x5d40175eb30efc9cL), - (-0x57e599b443bdcfffL), - (-0x3db4748f2f07686fL), - (-0x3893ae5cf9ab41d0L), - (-0x2e6d17e62910ade8L), - (-0x2966f9dbaa9a56f0L), - (-0xbf1ca7aa88edfd6L), - 0x106AA07032BBD1B8L, - 0x19A4C116B8D2D0C8L, - 0x1E376C085141AB53L, - 0x2748774CDF8EEB99L, - 0x34B0BCB5E19B48A8L, - 0x391C0CB3C5C95A63L, - 0x4ED8AA4AE3418ACBL, - 0x5B9CCA4F7763E373L, - 0x682E6FF3D6B2B8A3L, - 0x748F82EE5DEFB2FCL, - 0x78A5636F43172F60L, - (-0x7b3787eb5e0f548eL), - (-0x7338fdf7e59bc614L), - (-0x6f410005dc9ce1d8L), - (-0x5baf9314217d4217L), - (-0x41065c084d3986ebL), - (-0x398e870d1c8dacd5L), - (-0x35d8c13115d99e64L), - (-0x2e794738de3f3df9L), - (-0x15258229321f14e2L), - (-0xa82b08011912e88L), - 0x06F067AA72176FBAL, - 0x0A637DC5A2C898A6L, - 0x113F9804BEF90DAEL, - 0x1B710B35131C471BL, - 0x28DB77F523047D84L, - 0x32CAAB7B40C72493L, - 0x3C9EBE0A15C9BEBCL, - 0x431D67C49C100D4CL, - 0x4CC5D4BECB3E42B6L, - 0x597F299CFC657E2AL, - 0x5FCB6FAB3AD6FAECL, - 0x6C44198C4A475817L, -|]; diff --git a/src/ReCrypt/Sha384/ReCrypt_Sha384_Constants.rei b/src/ReCrypt/Sha384/ReCrypt_Sha384_Constants.rei deleted file mode 100644 index c6ea0da..0000000 --- a/src/ReCrypt/Sha384/ReCrypt_Sha384_Constants.rei +++ /dev/null @@ -1 +0,0 @@ -let k: array(int64); diff --git a/src/ReCrypt/Sha384/ReCrypt_Sha384_Preprocess.bs.js b/src/ReCrypt/Sha384/ReCrypt_Sha384_Preprocess.bs.js deleted file mode 100644 index 83250b8..0000000 --- a/src/ReCrypt/Sha384/ReCrypt_Sha384_Preprocess.bs.js +++ /dev/null @@ -1,30 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); - -function pad(msg) { - var size = (msg.length + 16 | 0) + 1 | 0; - while(size % 128 !== 0) { - size = size + 1 | 0; - }; - var length = msg.length; - var bytes = Belt_Array.makeBy(size, (function (index) { - if (index < length) { - return msg.charCodeAt(index) | 0; - } else if (index === length) { - return 128; - } else { - return 0; - } - })); - var va = (length << 3); - for(var i = 1; i <= 15; ++i){ - Belt_Array.set(bytes, bytes.length - i | 0, va & 255); - va = (va >> 8); - } - return bytes; -} - -exports.pad = pad; -/* No side effect */ diff --git a/src/ReCrypt/Sha384/ReCrypt_Sha384_Preprocess.re b/src/ReCrypt/Sha384/ReCrypt_Sha384_Preprocess.re deleted file mode 100644 index 62b89a9..0000000 --- a/src/ReCrypt/Sha384/ReCrypt_Sha384_Preprocess.re +++ /dev/null @@ -1,27 +0,0 @@ -let pad = msg => { - let size = ref(Js.String.length(msg) + 16 + 1); - while (size^ mod 128 != 0) { - size := size^ + 1; - }; - - let length = Js.String.length(msg); - - let bytes = - Belt.Array.makeBy(size^, index => - switch (index) { - | i when i < length => - msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat - | i when i == length => 0x80 - | _ => 0x00 - } - ); - - let va = ref(length * 8); - for (i in 1 to 15) { - let _ = - bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); - - va := va^ asr 8; - }; - bytes; -}; diff --git a/src/ReCrypt/Sha384/ReCrypt_Sha384_Preprocess.rei b/src/ReCrypt/Sha384/ReCrypt_Sha384_Preprocess.rei deleted file mode 100644 index 0a00697..0000000 --- a/src/ReCrypt/Sha384/ReCrypt_Sha384_Preprocess.rei +++ /dev/null @@ -1 +0,0 @@ -let pad: Js.String.t => array(int); diff --git a/src/ReCrypt/Sha384/ReCrypt_Sha384_Process.bs.js b/src/ReCrypt/Sha384/ReCrypt_Sha384_Process.bs.js deleted file mode 100644 index d7501b5..0000000 --- a/src/ReCrypt/Sha384/ReCrypt_Sha384_Process.bs.js +++ /dev/null @@ -1,91 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); -var Caml_int64 = require("bs-platform/lib/js/caml_int64.js"); -var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); -var ReCrypt_Utils = require("../ReCrypt_Utils.bs.js"); -var ReCrypt_Functions_SHA2 = require("../Functions/ReCrypt_Functions_SHA2.bs.js"); -var ReCrypt_Sha384_Constants = require("./ReCrypt_Sha384_Constants.bs.js"); - -function make(message) { - var chunks = message.length / 128 | 0; - var a = { - contents: Caml_int64.mk(-1056596264, -876896931) - }; - var b = { - contents: Caml_int64.mk(914150663, 1654270250) - }; - var c = { - contents: Caml_int64.mk(812702999, -1856437926) - }; - var d = { - contents: Caml_int64.mk(-150054599, 355462360) - }; - var e = { - contents: Caml_int64.mk(-4191439, 1731405415) - }; - var f = { - contents: Caml_int64.mk(1750603025, -1900787065) - }; - var g = { - contents: Caml_int64.mk(1694076839, -619958771) - }; - var h = { - contents: Caml_int64.mk(-1090891868, 1203062813) - }; - for(var i = 0; i < chunks; ++i){ - var w = Belt_Array.make(80, Caml_int64.zero); - for(var t = 0; t <= 15; ++t){ - for(var j = 0; j <= 7; ++j){ - var result = Caml_int64.add(Caml_int64.lsl_(Belt_Option.getWithDefault(Belt_Array.get(w, t), Caml_int64.zero), 8), Caml_int64.of_int32(Belt_Option.getWithDefault(Belt_Array.get(message, j + ((i << 7) + (t << 3) | 0) | 0), 0) & 255)); - Belt_Array.set(w, t, result); - } - } - for(var t$1 = 16; t$1 <= 79; ++t$1){ - var t2 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 2 | 0), Caml_int64.zero); - var t7 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 7 | 0), Caml_int64.zero); - var t15 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 15 | 0), Caml_int64.zero); - var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), Caml_int64.zero); - var result$1 = Caml_int64.add(Caml_int64.add(Caml_int64.add(ReCrypt_Functions_SHA2.Int64.sigma1(t2), t7), ReCrypt_Functions_SHA2.Int64.sigma0(t15)), t16); - Belt_Array.set(w, t$1, result$1); - } - var originalA = a.contents; - var originalB = b.contents; - var originalC = c.contents; - var originalD = d.contents; - var originalE = e.contents; - var originalF = f.contents; - var originalG = g.contents; - var originalH = h.contents; - Belt_Array.forEachWithIndex(ReCrypt_Sha384_Constants.k, (function(w){ - return function (t, k) { - var temp1 = Caml_int64.add(Caml_int64.add(Caml_int64.add(Caml_int64.add(h.contents, ReCrypt_Functions_SHA2.Int64.sum1(e.contents)), ReCrypt_Functions_SHA2.Int64.change(e.contents, f.contents, g.contents)), k), Belt_Option.getWithDefault(Belt_Array.get(w, t), Caml_int64.zero)); - var temp2 = Caml_int64.add(ReCrypt_Functions_SHA2.Int64.sum0(a.contents), ReCrypt_Functions_SHA2.Int64.majority(a.contents, b.contents, c.contents)); - h.contents = g.contents; - g.contents = f.contents; - f.contents = e.contents; - e.contents = Caml_int64.add(d.contents, temp1); - d.contents = c.contents; - c.contents = b.contents; - b.contents = a.contents; - a.contents = Caml_int64.add(temp1, temp2); - - } - }(w))); - a.contents = Caml_int64.add(originalA, a.contents); - b.contents = Caml_int64.add(originalB, b.contents); - c.contents = Caml_int64.add(originalC, c.contents); - d.contents = Caml_int64.add(originalD, d.contents); - e.contents = Caml_int64.add(originalE, e.contents); - f.contents = Caml_int64.add(originalF, f.contents); - g.contents = Caml_int64.add(originalG, g.contents); - h.contents = Caml_int64.add(originalH, h.contents); - } - return ReCrypt_Utils.stringToHex(Belt_Array.reduce(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(Belt_Array.make(48, 0), a.contents, 0), b.contents, 8), c.contents, 16), d.contents, 24), e.contents, 32), f.contents, 40), "", (function (acc, curr) { - return acc + String.fromCharCode(curr); - }))); -} - -exports.make = make; -/* No side effect */ diff --git a/src/ReCrypt/Sha384/ReCrypt_Sha384_Process.re b/src/ReCrypt/Sha384/ReCrypt_Sha384_Process.re deleted file mode 100644 index f4d2a39..0000000 --- a/src/ReCrypt/Sha384/ReCrypt_Sha384_Process.re +++ /dev/null @@ -1,106 +0,0 @@ -let make = message => { - let chunks = Belt.Array.length(message) / 128; - - let a = ref(-0x344462a23efa6128L); - let b = ref(0x629a292a367cd507L); - let c = ref(-0x6ea6fea5cf8f22e9L); - let d = ref(0x152fecd8f70e5939L); - let e = ref(0x67332667ffc00b31L); - let f = ref(-0x714bb57897a7eaefL); - let g = ref(-0x24f3d1f29b067059L); - let h = ref(0x47b5481dbefa4fa4L); - - for (i in 0 to chunks - 1) { - let w = Belt.Array.make(80, 0x00L); - - for (t in 0 to 15) { - for (j in 0 to 7) { - let result = - Int64.shift_left( - w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00L), - 8, - ) - ->Int64.add( - ( - message - ->Belt.Array.get(j + (i * 128 + 8 * t)) - ->Belt.Option.getWithDefault(0x00) - land 0xff - ) - ->Int64.of_int, - ); - - w->Belt.Array.set(t, result)->ignore; - }; - }; - - for (t in 16 to 79) { - let t2 = w->Belt.Array.get(t - 2)->Belt.Option.getWithDefault(0x00L); - let t7 = w->Belt.Array.get(t - 7)->Belt.Option.getWithDefault(0x00L); - let t15 = w->Belt.Array.get(t - 15)->Belt.Option.getWithDefault(0x00L); - let t16 = w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00L); - - let result = - ReCrypt_Functions.SHA2.Int64.sigma1(t2) - ->Int64.add(t7) - ->Int64.add(ReCrypt_Functions.SHA2.Int64.sigma0(t15)) - ->Int64.add(t16); - - w->Belt.Array.set(t, result)->ignore; - }; - - let originalA = a^; - let originalB = b^; - let originalC = c^; - let originalD = d^; - let originalE = e^; - let originalF = f^; - let originalG = g^; - let originalH = h^; - - ReCrypt_Sha384_Constants.k->Belt.Array.forEachWithIndex((t, k) => { - let temp1 = - (h^) - ->Int64.add(ReCrypt_Functions.SHA2.Int64.sum1(e^)) - ->Int64.add(ReCrypt_Functions.SHA2.Int64.change(e^, f^, g^)) - ->Int64.add(k) - ->Int64.add( - w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00L), - ); - - let temp2 = - Int64.add( - ReCrypt_Functions.SHA2.Int64.sum0(a^), - ReCrypt_Functions.SHA2.Int64.majority(a^, b^, c^), - ); - - h := g^; - g := f^; - f := e^; - e := Int64.add(d^, temp1); - d := c^; - c := b^; - b := a^; - a := Int64.add(temp1, temp2); - }); - - a := Int64.add(originalA, a^); - b := Int64.add(originalB, b^); - c := Int64.add(originalC, c^); - d := Int64.add(originalD, d^); - e := Int64.add(originalE, e^); - f := Int64.add(originalF, f^); - g := Int64.add(originalG, g^); - h := Int64.add(originalH, h^); - }; - - Belt.Array.make(48, 0x00) - ->ReCrypt_Utils.append64(a^, 0) - ->ReCrypt_Utils.append64(b^, 8) - ->ReCrypt_Utils.append64(c^, 16) - ->ReCrypt_Utils.append64(d^, 24) - ->ReCrypt_Utils.append64(e^, 32) - ->ReCrypt_Utils.append64(f^, 40) - ->Belt.Array.reduce("", (acc, curr) => acc ++ Js.String.fromCharCode(curr)) - ->ReCrypt_Utils.stringToHex; -}; diff --git a/src/ReCrypt/Sha384/ReCrypt_Sha384_Process.rei b/src/ReCrypt/Sha384/ReCrypt_Sha384_Process.rei deleted file mode 100644 index a10b982..0000000 --- a/src/ReCrypt/Sha384/ReCrypt_Sha384_Process.rei +++ /dev/null @@ -1 +0,0 @@ -let make: array(int) => string; diff --git a/src/ReCrypt/Sha512/ReCrypt_Sha512_Constants.bs.js b/src/ReCrypt/Sha512/ReCrypt_Sha512_Constants.bs.js deleted file mode 100644 index 9078cd8..0000000 --- a/src/ReCrypt/Sha512/ReCrypt_Sha512_Constants.bs.js +++ /dev/null @@ -1,90 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Caml_int64 = require("bs-platform/lib/js/caml_int64.js"); - -var k = [ - Caml_int64.mk(-685199838, 1116352408), - Caml_int64.mk(602891725, 1899447441), - Caml_int64.mk(-330482897, -1245643825), - Caml_int64.mk(-2121671748, -373957723), - Caml_int64.mk(-213338824, 961987163), - Caml_int64.mk(-1241133031, 1508970993), - Caml_int64.mk(-1357295717, -1841331548), - Caml_int64.mk(-630357736, -1424204075), - Caml_int64.mk(-1560083902, -670586216), - Caml_int64.mk(1164996542, 310598401), - Caml_int64.mk(1323610764, 607225278), - Caml_int64.mk(-704662302, 1426881987), - Caml_int64.mk(-226784913, 1925078388), - Caml_int64.mk(991336113, -2132889090), - Caml_int64.mk(633803317, -1680079193), - Caml_int64.mk(-815192428, -1046744716), - Caml_int64.mk(-1628353838, -459576895), - Caml_int64.mk(944711139, -272742522), - Caml_int64.mk(-1953704523, 264347078), - Caml_int64.mk(2007800933, 604807628), - Caml_int64.mk(1495990901, 770255983), - Caml_int64.mk(1856431235, 1249150122), - Caml_int64.mk(-1119749164, 1555081692), - Caml_int64.mk(-2096016459, 1996064986), - Caml_int64.mk(-295247957, -1740746414), - Caml_int64.mk(766784016, -1473132947), - Caml_int64.mk(-1728372417, -1341970488), - Caml_int64.mk(-1091629340, -1084653625), - Caml_int64.mk(1034457026, -958395405), - Caml_int64.mk(-1828018395, -710438585), - Caml_int64.mk(-536640913, 113926993), - Caml_int64.mk(168717936, 338241895), - Caml_int64.mk(1188179964, 666307205), - Caml_int64.mk(1546045734, 773529912), - Caml_int64.mk(1522805485, 1294757372), - Caml_int64.mk(-1651133473, 1396182291), - Caml_int64.mk(-1951439906, 1695183700), - Caml_int64.mk(1014477480, 1986661051), - Caml_int64.mk(1206759142, -2117940946), - Caml_int64.mk(344077627, -1838011259), - Caml_int64.mk(1290863460, -1564481375), - Caml_int64.mk(-1136513023, -1474664885), - Caml_int64.mk(-789014639, -1035236496), - Caml_int64.mk(106217008, -949202525), - Caml_int64.mk(-688958952, -778901479), - Caml_int64.mk(1432725776, -694614492), - Caml_int64.mk(1467031594, -200395387), - Caml_int64.mk(851169720, 275423344), - Caml_int64.mk(-1194143544, 430227734), - Caml_int64.mk(1363258195, 506948616), - Caml_int64.mk(-544281703, 659060556), - Caml_int64.mk(-509917016, 883997877), - Caml_int64.mk(-976659869, 958139571), - Caml_int64.mk(-482243893, 1322822218), - Caml_int64.mk(2003034995, 1537002063), - Caml_int64.mk(-692930397, 1747873779), - Caml_int64.mk(1575990012, 1955562222), - Caml_int64.mk(1125592928, 2024104815), - Caml_int64.mk(-1578062990, -2067236844), - Caml_int64.mk(442776044, -1933114872), - Caml_int64.mk(593698344, -1866530822), - Caml_int64.mk(-561857047, -1538233109), - Caml_int64.mk(-1295615723, -1090935817), - Caml_int64.mk(-479046869, -965641998), - Caml_int64.mk(-366583396, -903397682), - Caml_int64.mk(566280711, -779700025), - Caml_int64.mk(-840897762, -354779690), - Caml_int64.mk(-294727304, -176337025), - Caml_int64.mk(1914138554, 116418474), - Caml_int64.mk(-1563912026, 174292421), - Caml_int64.mk(-1090974290, 289380356), - Caml_int64.mk(320620315, 460393269), - Caml_int64.mk(587496836, 685471733), - Caml_int64.mk(1086792851, 852142971), - Caml_int64.mk(365543100, 1017036298), - Caml_int64.mk(-1676669620, 1126000580), - Caml_int64.mk(-885112138, 1288033470), - Caml_int64.mk(-60457430, 1501505948), - Caml_int64.mk(987167468, 1607167915), - Caml_int64.mk(1246189591, 1816402316) -]; - -exports.k = k; -/* No side effect */ diff --git a/src/ReCrypt/Sha512/ReCrypt_Sha512_Constants.re b/src/ReCrypt/Sha512/ReCrypt_Sha512_Constants.re deleted file mode 100644 index afbf230..0000000 --- a/src/ReCrypt/Sha512/ReCrypt_Sha512_Constants.re +++ /dev/null @@ -1,82 +0,0 @@ -let k = [| - 0x428a2f98d728ae22L, - 0x7137449123ef65cdL, - 0xb5c0fbcfec4d3b2fL, - 0xe9b5dba58189dbbcL, - 0x3956c25bf348b538L, - 0x59f111f1b605d019L, - 0x923f82a4af194f9bL, - 0xab1c5ed5da6d8118L, - 0xd807aa98a3030242L, - 0x12835b0145706fbeL, - 0x243185be4ee4b28cL, - 0x550c7dc3d5ffb4e2L, - 0x72be5d74f27b896fL, - 0x80deb1fe3b1696b1L, - 0x9bdc06a725c71235L, - 0xc19bf174cf692694L, - 0xe49b69c19ef14ad2L, - 0xefbe4786384f25e3L, - 0x0fc19dc68b8cd5b5L, - 0x240ca1cc77ac9c65L, - 0x2de92c6f592b0275L, - 0x4a7484aa6ea6e483L, - 0x5cb0a9dcbd41fbd4L, - 0x76f988da831153b5L, - 0x983e5152ee66dfabL, - 0xa831c66d2db43210L, - 0xb00327c898fb213fL, - 0xbf597fc7beef0ee4L, - 0xc6e00bf33da88fc2L, - 0xd5a79147930aa725L, - 0x06ca6351e003826fL, - 0x142929670a0e6e70L, - 0x27b70a8546d22ffcL, - 0x2e1b21385c26c926L, - 0x4d2c6dfc5ac42aedL, - 0x53380d139d95b3dfL, - 0x650a73548baf63deL, - 0x766a0abb3c77b2a8L, - 0x81c2c92e47edaee6L, - 0x92722c851482353bL, - 0xa2bfe8a14cf10364L, - 0xa81a664bbc423001L, - 0xc24b8b70d0f89791L, - 0xc76c51a30654be30L, - 0xd192e819d6ef5218L, - 0xd69906245565a910L, - 0xf40e35855771202aL, - 0x106aa07032bbd1b8L, - 0x19a4c116b8d2d0c8L, - 0x1e376c085141ab53L, - 0x2748774cdf8eeb99L, - 0x34b0bcb5e19b48a8L, - 0x391c0cb3c5c95a63L, - 0x4ed8aa4ae3418acbL, - 0x5b9cca4f7763e373L, - 0x682e6ff3d6b2b8a3L, - 0x748f82ee5defb2fcL, - 0x78a5636f43172f60L, - 0x84c87814a1f0ab72L, - 0x8cc702081a6439ecL, - 0x90befffa23631e28L, - 0xa4506cebde82bde9L, - 0xbef9a3f7b2c67915L, - 0xc67178f2e372532bL, - 0xca273eceea26619cL, - 0xd186b8c721c0c207L, - 0xeada7dd6cde0eb1eL, - 0xf57d4f7fee6ed178L, - 0x06f067aa72176fbaL, - 0x0a637dc5a2c898a6L, - 0x113f9804bef90daeL, - 0x1b710b35131c471bL, - 0x28db77f523047d84L, - 0x32caab7b40c72493L, - 0x3c9ebe0a15c9bebcL, - 0x431d67c49c100d4cL, - 0x4cc5d4becb3e42b6L, - 0x597f299cfc657e2aL, - 0x5fcb6fab3ad6faecL, - 0x6c44198c4a475817L, -|]; diff --git a/src/ReCrypt/Sha512/ReCrypt_Sha512_Constants.rei b/src/ReCrypt/Sha512/ReCrypt_Sha512_Constants.rei deleted file mode 100644 index c6ea0da..0000000 --- a/src/ReCrypt/Sha512/ReCrypt_Sha512_Constants.rei +++ /dev/null @@ -1 +0,0 @@ -let k: array(int64); diff --git a/src/ReCrypt/Sha512/ReCrypt_Sha512_Preprocess.bs.js b/src/ReCrypt/Sha512/ReCrypt_Sha512_Preprocess.bs.js deleted file mode 100644 index 83250b8..0000000 --- a/src/ReCrypt/Sha512/ReCrypt_Sha512_Preprocess.bs.js +++ /dev/null @@ -1,30 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); - -function pad(msg) { - var size = (msg.length + 16 | 0) + 1 | 0; - while(size % 128 !== 0) { - size = size + 1 | 0; - }; - var length = msg.length; - var bytes = Belt_Array.makeBy(size, (function (index) { - if (index < length) { - return msg.charCodeAt(index) | 0; - } else if (index === length) { - return 128; - } else { - return 0; - } - })); - var va = (length << 3); - for(var i = 1; i <= 15; ++i){ - Belt_Array.set(bytes, bytes.length - i | 0, va & 255); - va = (va >> 8); - } - return bytes; -} - -exports.pad = pad; -/* No side effect */ diff --git a/src/ReCrypt/Sha512/ReCrypt_Sha512_Preprocess.re b/src/ReCrypt/Sha512/ReCrypt_Sha512_Preprocess.re deleted file mode 100644 index 62b89a9..0000000 --- a/src/ReCrypt/Sha512/ReCrypt_Sha512_Preprocess.re +++ /dev/null @@ -1,27 +0,0 @@ -let pad = msg => { - let size = ref(Js.String.length(msg) + 16 + 1); - while (size^ mod 128 != 0) { - size := size^ + 1; - }; - - let length = Js.String.length(msg); - - let bytes = - Belt.Array.makeBy(size^, index => - switch (index) { - | i when i < length => - msg->(Js.String2.charCodeAt(i))->Belt.Int.fromFloat - | i when i == length => 0x80 - | _ => 0x00 - } - ); - - let va = ref(length * 8); - for (i in 1 to 15) { - let _ = - bytes->Belt.Array.set(Belt.Array.length(bytes) - i, va^ land 255); - - va := va^ asr 8; - }; - bytes; -}; diff --git a/src/ReCrypt/Sha512/ReCrypt_Sha512_Preprocess.rei b/src/ReCrypt/Sha512/ReCrypt_Sha512_Preprocess.rei deleted file mode 100644 index 0a00697..0000000 --- a/src/ReCrypt/Sha512/ReCrypt_Sha512_Preprocess.rei +++ /dev/null @@ -1 +0,0 @@ -let pad: Js.String.t => array(int); diff --git a/src/ReCrypt/Sha512/ReCrypt_Sha512_Process.bs.js b/src/ReCrypt/Sha512/ReCrypt_Sha512_Process.bs.js deleted file mode 100644 index 65aa874..0000000 --- a/src/ReCrypt/Sha512/ReCrypt_Sha512_Process.bs.js +++ /dev/null @@ -1,91 +0,0 @@ -// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE -'use strict'; - -var Belt_Array = require("bs-platform/lib/js/belt_Array.js"); -var Caml_int64 = require("bs-platform/lib/js/caml_int64.js"); -var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); -var ReCrypt_Utils = require("../ReCrypt_Utils.bs.js"); -var ReCrypt_Functions_SHA2 = require("../Functions/ReCrypt_Functions_SHA2.bs.js"); -var ReCrypt_Sha512_Constants = require("./ReCrypt_Sha512_Constants.bs.js"); - -function make(message) { - var chunks = message.length / 128 | 0; - var a = { - contents: Caml_int64.mk(-205731576, 1779033703) - }; - var b = { - contents: Caml_int64.mk(-2067093701, -1150833019) - }; - var c = { - contents: Caml_int64.mk(-23791573, 1013904242) - }; - var d = { - contents: Caml_int64.mk(1595750129, -1521486534) - }; - var e = { - contents: Caml_int64.mk(-1377402159, 1359893119) - }; - var f = { - contents: Caml_int64.mk(725511199, -1694144372) - }; - var g = { - contents: Caml_int64.mk(-79577749, 528734635) - }; - var h = { - contents: Caml_int64.mk(327033209, 1541459225) - }; - for(var i = 0; i < chunks; ++i){ - var w = Belt_Array.make(80, Caml_int64.zero); - for(var t = 0; t <= 15; ++t){ - for(var j = 0; j <= 7; ++j){ - var result = Caml_int64.add(Caml_int64.lsl_(Belt_Option.getWithDefault(Belt_Array.get(w, t), Caml_int64.zero), 8), Caml_int64.of_int32(Belt_Option.getWithDefault(Belt_Array.get(message, j + ((i << 7) + (t << 3) | 0) | 0), 0) & 255)); - Belt_Array.set(w, t, result); - } - } - for(var t$1 = 16; t$1 <= 79; ++t$1){ - var t2 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 2 | 0), Caml_int64.zero); - var t7 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 7 | 0), Caml_int64.zero); - var t15 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 15 | 0), Caml_int64.zero); - var t16 = Belt_Option.getWithDefault(Belt_Array.get(w, t$1 - 16 | 0), Caml_int64.zero); - var result$1 = Caml_int64.add(Caml_int64.add(Caml_int64.add(ReCrypt_Functions_SHA2.Int64.sigma1(t2), t7), ReCrypt_Functions_SHA2.Int64.sigma0(t15)), t16); - Belt_Array.set(w, t$1, result$1); - } - var originalA = a.contents; - var originalB = b.contents; - var originalC = c.contents; - var originalD = d.contents; - var originalE = e.contents; - var originalF = f.contents; - var originalG = g.contents; - var originalH = h.contents; - Belt_Array.forEachWithIndex(ReCrypt_Sha512_Constants.k, (function(w){ - return function (t, k) { - var temp1 = Caml_int64.add(Caml_int64.add(Caml_int64.add(Caml_int64.add(h.contents, ReCrypt_Functions_SHA2.Int64.sum1(e.contents)), ReCrypt_Functions_SHA2.Int64.change(e.contents, f.contents, g.contents)), k), Belt_Option.getWithDefault(Belt_Array.get(w, t), Caml_int64.zero)); - var temp2 = Caml_int64.add(ReCrypt_Functions_SHA2.Int64.sum0(a.contents), ReCrypt_Functions_SHA2.Int64.majority(a.contents, b.contents, c.contents)); - h.contents = g.contents; - g.contents = f.contents; - f.contents = e.contents; - e.contents = Caml_int64.add(d.contents, temp1); - d.contents = c.contents; - c.contents = b.contents; - b.contents = a.contents; - a.contents = Caml_int64.add(temp1, temp2); - - } - }(w))); - a.contents = Caml_int64.add(originalA, a.contents); - b.contents = Caml_int64.add(originalB, b.contents); - c.contents = Caml_int64.add(originalC, c.contents); - d.contents = Caml_int64.add(originalD, d.contents); - e.contents = Caml_int64.add(originalE, e.contents); - f.contents = Caml_int64.add(originalF, f.contents); - g.contents = Caml_int64.add(originalG, g.contents); - h.contents = Caml_int64.add(originalH, h.contents); - } - return ReCrypt_Utils.stringToHex(Belt_Array.reduce(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(ReCrypt_Utils.append64(Belt_Array.make(64, 0), a.contents, 0), b.contents, 8), c.contents, 16), d.contents, 24), e.contents, 32), f.contents, 40), g.contents, 48), h.contents, 56), "", (function (acc, curr) { - return acc + String.fromCharCode(curr); - }))); -} - -exports.make = make; -/* No side effect */ diff --git a/src/ReCrypt/Sha512/ReCrypt_Sha512_Process.re b/src/ReCrypt/Sha512/ReCrypt_Sha512_Process.re deleted file mode 100644 index 755fc45..0000000 --- a/src/ReCrypt/Sha512/ReCrypt_Sha512_Process.re +++ /dev/null @@ -1,108 +0,0 @@ -let make = message => { - let chunks = Belt.Array.length(message) / 128; - - let a = ref(0x6a09e667f3bcc908L); - let b = ref(0xbb67ae8584caa73bL); - let c = ref(0x3c6ef372fe94f82bL); - let d = ref(0xa54ff53a5f1d36f1L); - let e = ref(0x510e527fade682d1L); - let f = ref(0x9b05688c2b3e6c1fL); - let g = ref(0x1f83d9abfb41bd6bL); - let h = ref(0x5be0cd19137e2179L); - - for (i in 0 to chunks - 1) { - let w = Belt.Array.make(80, 0x00L); - - for (t in 0 to 15) { - for (j in 0 to 7) { - let result = - Int64.shift_left( - w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00L), - 8, - ) - ->Int64.add( - ( - message - ->Belt.Array.get(j + (i * 128 + 8 * t)) - ->Belt.Option.getWithDefault(0x00) - land 0xff - ) - ->Int64.of_int, - ); - - w->Belt.Array.set(t, result)->ignore; - }; - }; - - for (t in 16 to 79) { - let t2 = w->Belt.Array.get(t - 2)->Belt.Option.getWithDefault(0x00L); - let t7 = w->Belt.Array.get(t - 7)->Belt.Option.getWithDefault(0x00L); - let t15 = w->Belt.Array.get(t - 15)->Belt.Option.getWithDefault(0x00L); - let t16 = w->Belt.Array.get(t - 16)->Belt.Option.getWithDefault(0x00L); - - let result = - ReCrypt_Functions.SHA2.Int64.sigma1(t2) - ->Int64.add(t7) - ->Int64.add(ReCrypt_Functions.SHA2.Int64.sigma0(t15)) - ->Int64.add(t16); - - w->Belt.Array.set(t, result)->ignore; - }; - - let originalA = a^; - let originalB = b^; - let originalC = c^; - let originalD = d^; - let originalE = e^; - let originalF = f^; - let originalG = g^; - let originalH = h^; - - ReCrypt_Sha512_Constants.k->Belt.Array.forEachWithIndex((t, k) => { - let temp1 = - (h^) - ->Int64.add(ReCrypt_Functions.SHA2.Int64.sum1(e^)) - ->Int64.add(ReCrypt_Functions.SHA2.Int64.change(e^, f^, g^)) - ->Int64.add(k) - ->Int64.add( - w->Belt.Array.get(t)->Belt.Option.getWithDefault(0x00L), - ); - - let temp2 = - Int64.add( - ReCrypt_Functions.SHA2.Int64.sum0(a^), - ReCrypt_Functions.SHA2.Int64.majority(a^, b^, c^), - ); - - h := g^; - g := f^; - f := e^; - e := Int64.add(d^, temp1); - d := c^; - c := b^; - b := a^; - a := Int64.add(temp1, temp2); - }); - - a := Int64.add(originalA, a^); - b := Int64.add(originalB, b^); - c := Int64.add(originalC, c^); - d := Int64.add(originalD, d^); - e := Int64.add(originalE, e^); - f := Int64.add(originalF, f^); - g := Int64.add(originalG, g^); - h := Int64.add(originalH, h^); - }; - - Belt.Array.make(64, 0x00) - ->ReCrypt_Utils.append64(a^, 0) - ->ReCrypt_Utils.append64(b^, 8) - ->ReCrypt_Utils.append64(c^, 16) - ->ReCrypt_Utils.append64(d^, 24) - ->ReCrypt_Utils.append64(e^, 32) - ->ReCrypt_Utils.append64(f^, 40) - ->ReCrypt_Utils.append64(g^, 48) - ->ReCrypt_Utils.append64(h^, 56) - ->Belt.Array.reduce("", (acc, curr) => acc ++ Js.String.fromCharCode(curr)) - ->ReCrypt_Utils.stringToHex; -}; diff --git a/src/ReCrypt/Sha512/ReCrypt_Sha512_Process.rei b/src/ReCrypt/Sha512/ReCrypt_Sha512_Process.rei deleted file mode 100644 index a10b982..0000000 --- a/src/ReCrypt/Sha512/ReCrypt_Sha512_Process.rei +++ /dev/null @@ -1 +0,0 @@ -let make: array(int) => string;