|
73 | 73 | // Shortcuts
|
74 | 74 | var base64StrLength = base64Str.length;
|
75 | 75 | var map = this._map;
|
| 76 | + var reverseMap = this._reverseMap; |
| 77 | + |
| 78 | + if (!reverseMap) { |
| 79 | + reverseMap = this._reverseMap = []; |
| 80 | + for (var j = 0; j < map.length; j++) { |
| 81 | + reverseMap[map.charCodeAt(j)] = j; |
| 82 | + } |
| 83 | + } |
76 | 84 |
|
77 | 85 | // Ignore padding
|
78 | 86 | var paddingChar = map.charAt(64);
|
79 | 87 | if (paddingChar) {
|
80 | 88 | var paddingIndex = base64Str.indexOf(paddingChar);
|
81 |
| - if (paddingIndex != -1) { |
| 89 | + if (paddingIndex !== -1) { |
82 | 90 | base64StrLength = paddingIndex;
|
83 | 91 | }
|
84 | 92 | }
|
85 | 93 |
|
86 | 94 | // Convert
|
87 |
| - var words = []; |
88 |
| - var nBytes = 0; |
89 |
| - for (var i = 0; i < base64StrLength; i++) { |
90 |
| - if (i % 4) { |
91 |
| - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); |
92 |
| - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); |
93 |
| - var bitsCombined = bits1 | bits2; |
94 |
| - words[nBytes >>> 2] |= (bitsCombined) << (24 - (nBytes % 4) * 8); |
95 |
| - nBytes++; |
96 |
| - } |
97 |
| - } |
| 95 | + return parseLoop(base64Str, base64StrLength, reverseMap); |
98 | 96 |
|
99 |
| - return WordArray.create(words, nBytes); |
100 | 97 | },
|
101 | 98 |
|
102 | 99 | _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
|
103 | 100 | };
|
| 101 | + |
| 102 | + function parseLoop(base64Str, base64StrLength, reverseMap) { |
| 103 | + var words = []; |
| 104 | + var nBytes = 0; |
| 105 | + for (var i = 0; i < base64StrLength; i++) { |
| 106 | + if (i % 4) { |
| 107 | + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); |
| 108 | + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); |
| 109 | + words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); |
| 110 | + nBytes++; |
| 111 | + } |
| 112 | + } |
| 113 | + return WordArray.create(words, nBytes); |
| 114 | + } |
104 | 115 | }());
|
0 commit comments