/* Rom Patcher JS - CRC32/MD5/SHA-1/checksums calculators v20210815 - Marc Robledo 2016-2021 - http://www.marcrobledo.com/license */ function padZeroes(intVal, nBytes){ var hexString=intVal.toString(16); while(hexString.length>2]=d[i]+(d[i+1]<<8)+(d[i+2]<<16)+(d[i+3]<<24);return md5blks} function _cmn(q,a,b,x,s,t){a=_add32(_add32(a,q),_add32(x,t));return _add32((a<>>(32-s)),b)} function ff(a,b,c,d,x,s,t){return _cmn((b&c)|((~b)&d),a,b,x,s,t)} function gg(a,b,c,d,x,s,t){return _cmn((b&d)|(c&(~d)),a,b,x,s,t)} function hh(a,b,c,d,x,s,t){return _cmn(b^c^d,a,b,x,s,t)} function ii(a,b,c,d,x,s,t){return _cmn(c^(b|(~d)),a,b,x,s,t)} function md5(marcFile, headerSize){ var data=headerSize? new Uint8Array(marcFile._u8array.buffer, headerSize):marcFile._u8array; var n=data.length,state=[1732584193,-271733879,-1732584194,271733878],i; for(i=64;i<=data.length;i+=64) _md5cycle(state,_md5blk(data.slice(i-64,i))); data=data.slice(i-64); var tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; for(i=0;i>2]|=data[i]<<((i%4)<<3); tail[i>>2]|=0x80<<((i%4)<<3); if(i>55){ _md5cycle(state,tail); for(i=0;i<16;i++)tail[i]=0; } tail[14]=n*8; tail[15]=Math.floor(n/536870912) >>> 0; //if file is bigger than 512Mb*8, value is bigger than 32 bits, so it needs two words to store its length _md5cycle(state,tail); for(var i=0;i>(j*8+4))&0x0f]+HEX_CHR[(state[i]>>(j*8))&0x0f]; state[i]=s; } return state.join('') } /* CRC32 - from Alex - https://stackoverflow.com/a/18639999 */ const CRC32_TABLE=(function(){ var c,crcTable=[]; for(var n=0;n<256;n++){ c=n; for(var k=0;k<8;k++) c=((c&1)?(0xedb88320^(c>>>1)):(c>>>1)); crcTable[n]=c; } return crcTable; }()); function crc32(marcFile, headerSize, ignoreLast4Bytes){ var data=headerSize? new Uint8Array(marcFile._u8array.buffer, headerSize):marcFile._u8array; var crc=0^(-1); var len=ignoreLast4Bytes?data.length-4:data.length; for(var i=0;i>>8)^CRC32_TABLE[(crc^data[i])&0xff]; return ((crc^(-1))>>>0); } /* Adler-32 - https://en.wikipedia.org/wiki/Adler-32#Example_implementation */ const ADLER32_MOD=0xfff1; function adler32(marcFile, offset, len){ var a=1, b=0; for(var i=0; i>>0; } /* CRC16/CCITT-FALSE */ function crc16(marcFile, offset, len){ var crc=0xffff; offset=offset? offset : 0; len=len && len>0? len : marcFile.fileSize; for(var i=0; i>> 0 ? (crc << 1) ^ 0x1021 : crc << 1; } } return crc & 0xffff; }