MCPcopy
hub / github.com/dcodeIO/bcrypt.js / _encipher

Function _encipher

index.js:738–855  ·  view source on GitHub ↗

* @param {Array. } lr * @param {number} off * @param {Array. } P * @param {Array. } S * @returns {Array. } * @inner

(lr, off, P, S)

Source from the content-addressed store, hash-verified

736 * @inner
737 */
738function _encipher(lr, off, P, S) {
739 // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt
740 var n,
741 l = lr[off],
742 r = lr[off + 1];
743
744 l ^= P[0];
745
746 /*
747 for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)
748 // Feistel substitution on left word
749 n = S[l >>> 24],
750 n += S[0x100 | ((l >> 16) & 0xff)],
751 n ^= S[0x200 | ((l >> 8) & 0xff)],
752 n += S[0x300 | (l & 0xff)],
753 r ^= n ^ P[++i],
754 // Feistel substitution on right word
755 n = S[r >>> 24],
756 n += S[0x100 | ((r >> 16) & 0xff)],
757 n ^= S[0x200 | ((r >> 8) & 0xff)],
758 n += S[0x300 | (r & 0xff)],
759 l ^= n ^ P[++i];
760 */
761
762 //The following is an unrolled version of the above loop.
763 //Iteration 0
764 n = S[l >>> 24];
765 n += S[0x100 | ((l >> 16) & 0xff)];
766 n ^= S[0x200 | ((l >> 8) & 0xff)];
767 n += S[0x300 | (l & 0xff)];
768 r ^= n ^ P[1];
769 n = S[r >>> 24];
770 n += S[0x100 | ((r >> 16) & 0xff)];
771 n ^= S[0x200 | ((r >> 8) & 0xff)];
772 n += S[0x300 | (r & 0xff)];
773 l ^= n ^ P[2];
774 //Iteration 1
775 n = S[l >>> 24];
776 n += S[0x100 | ((l >> 16) & 0xff)];
777 n ^= S[0x200 | ((l >> 8) & 0xff)];
778 n += S[0x300 | (l & 0xff)];
779 r ^= n ^ P[3];
780 n = S[r >>> 24];
781 n += S[0x100 | ((r >> 16) & 0xff)];
782 n ^= S[0x200 | ((r >> 8) & 0xff)];
783 n += S[0x300 | (r & 0xff)];
784 l ^= n ^ P[4];
785 //Iteration 2
786 n = S[l >>> 24];
787 n += S[0x100 | ((l >> 16) & 0xff)];
788 n ^= S[0x200 | ((l >> 8) & 0xff)];
789 n += S[0x300 | (l & 0xff)];
790 r ^= n ^ P[5];
791 n = S[r >>> 24];
792 n += S[0x100 | ((r >> 16) & 0xff)];
793 n ^= S[0x200 | ((r >> 8) & 0xff)];
794 n += S[0x300 | (r & 0xff)];
795 l ^= n ^ P[6];

Callers 3

_keyFunction · 0.85
_ekskeyFunction · 0.85
nextFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected