diff --git a/imageknife/src/main/ets/components/cache/Base64.ets b/imageknife/src/main/ets/components/cache/Base64.ets index e219975..b71b6fe 100644 --- a/imageknife/src/main/ets/components/cache/Base64.ets +++ b/imageknife/src/main/ets/components/cache/Base64.ets @@ -18,24 +18,24 @@ export class Base64 { private static sInstance: Base64; public static getInstance(): Base64{ - if (!this.sInstance) { - this.sInstance = new Base64(); + if (!Base64.sInstance) { + Base64.sInstance = new Base64(); } - return this.sInstance; + return Base64.sInstance; } private constructor() { console.log("Base64 - constructor init!") - for (var index = 0; index < this.chars.length; index++) { + for (let index = 0; index < this.chars.length; index++) { this.lookup[this.chars.charCodeAt(index)] = index; } } encode(arraybuffer: ArrayBuffer): string { let bytes = new Uint8Array(arraybuffer), - i, len = bytes.length, base64 = ''; + let i:number = 0 for (i = 0; i < len; i += 3) { base64 += this.chars[bytes[i] >> 2]; base64 += this.chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; @@ -53,12 +53,12 @@ export class Base64 { decode(base64: string): ArrayBuffer{ let bufferLength = base64.length * 0.75, len = base64.length, - i, - p = 0, - encoded1, - encoded2, - encoded3, - encoded4; + p = 0; + let i:number = 0; + let encoded1:number = 0; + let encoded2:number = 0; + let encoded3:number = 0; + let encoded4:number = 0; if (base64[base64.length - 1] === '=') { bufferLength--; diff --git a/imageknife/src/main/ets/components/cache/CustomMap.ets b/imageknife/src/main/ets/components/cache/CustomMap.ets index 7190d6b..0baca69 100644 --- a/imageknife/src/main/ets/components/cache/CustomMap.ets +++ b/imageknife/src/main/ets/components/cache/CustomMap.ets @@ -38,7 +38,7 @@ export class CustomMap { if (key == null || value == null) { throw new Error('key or value is invalid,checking the parameter'); } - var pre = this.map.get(key) + let pre = this.map.get(key) if (this.hasKey(key)) { this.map.delete(key) } @@ -70,7 +70,7 @@ export class CustomMap { return this.map.size; } // 遍历Map,执行处理函数. 回调函数 function(key,value,index){..} - each(fn) { + each(fn: (value: V, key: K, map: Map) => void) { this.map.forEach(fn) } // 清除键值对 diff --git a/imageknife/src/main/ets/components/cache/FileReader.ets b/imageknife/src/main/ets/components/cache/FileReader.ets deleted file mode 100644 index 854971d..0000000 --- a/imageknife/src/main/ets/components/cache/FileReader.ets +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import fs from '@ohos.file.fs'; - -export class FileReader { - - // 文件大小 - fileLength: number = 0 - - // 读取的长度 - length: number = 0 - - // 读写stream - stream: any = null - // 缓存buf - buf: ArrayBuffer = new ArrayBuffer(1) - - constructor(path: string) { - if (!path || Object.keys(path).length == 0) { - return - } - try { - this.stream = fs.createStreamSync(path, 'r+'); - var stat = fs.statSync(path) - this.fileLength = stat.size - } catch (e) { - } - } - - /** - * 循环读取文件数据 - */ - readLine(): string{ - var line = '' - while (this.length <= this.fileLength) { - this.stream.readSync(this.buf, { position: this.length }) - this.length++ - var temp = String.fromCharCode.apply(null, new Uint8Array(this.buf)); - line = line + temp - if (temp == '\n' || temp == '\r') { - return line - } - } - return line - } - - /** - * 判断文件是否结束 - */ - isEnd() { - return this.fileLength <= 0 || this.length == this.fileLength - } - - /** - * 关闭stream - */ - close() { - this.stream.closeSync() - } -} \ No newline at end of file diff --git a/imageknife/src/main/ets/components/cache/FileUtils.ets b/imageknife/src/main/ets/components/cache/FileUtils.ets index 49c1a49..d2cd270 100644 --- a/imageknife/src/main/ets/components/cache/FileUtils.ets +++ b/imageknife/src/main/ets/components/cache/FileUtils.ets @@ -14,20 +14,20 @@ */ import fs from '@ohos.file.fs'; - +import { BusinessError } from '@ohos.base' export class FileUtils { base64Str: string = '' private static sInstance: FileUtils; public static getInstance(): FileUtils { - if (!this.sInstance) { - this.sInstance = new FileUtils(); + if (!FileUtils.sInstance) { + FileUtils.sInstance = new FileUtils(); } - return this.sInstance; + return FileUtils.sInstance; } private constructor() { - console.error("FileUtils - FileUtils constructor") + console.log("FileUtils - FileUtils constructor") } /** @@ -50,7 +50,7 @@ export class FileUtils { fs.unlinkSync(path); } } catch (err) { - console.log("FileUtils deleteFile Method has error, err msg=" + err.message + " err code=" + err.code); + console.log("FileUtils deleteFile Method has error, err msg=" + (err as BusinessError).message + " err code=" + (err as BusinessError).code); } } /** @@ -63,11 +63,11 @@ export class FileUtils { if (fileExist) { fs.unlink(path).then(()=>{ resolve(); - }).catch(err=>{ + }).catch( (err:BusinessError)=>{ reject(err) }) } - }).catch(err=>{ + }).catch((err:BusinessError)=>{ reject(err); }) }) @@ -89,7 +89,7 @@ export class FileUtils { * 异步删除文件目录 必须保证文件夹里面没有文件 * @param path 待删除目录的绝对路径 */ - deleteFolderAsync(path: string, deleteComplete, deleteError) { + deleteFolderAsync(path: string, deleteComplete:(value: void) => void | PromiseLike, deleteError:(reason: Object) => PromiseLike) { if (this.existFolder(path)) { fs.rmdir(path) .then(deleteComplete).catch(deleteError); @@ -209,10 +209,10 @@ export class FileUtils { // 关闭文件 fs.closeSync(file); resolve(buf); - }).catch(err=>{ + }).catch((err:BusinessError)=>{ reject(err); }) - }).catch(err=>{ + }).catch((err:BusinessError)=>{ reject(err); }) @@ -235,7 +235,9 @@ export class FileUtils { let ss = fs.createStreamSync(path, "r+"); ss.readSync(buf) ss.closeSync(); - return String.fromCharCode.apply(null, new Uint8Array(buf)) + let u8:Uint8Array = new Uint8Array(buf); + let array:Array = Array.from(u8) + return String.fromCharCode(...array) } catch (e) { console.log("FileUtils - readFilePic " + e) return "" @@ -307,33 +309,18 @@ export class FileUtils { * string 转 Uint8Array * @param str 输入String */ - stringToUint8Array(str): Uint8Array { - var arr = []; - for (var i = 0, j = str.length; i < j; ++i) { + stringToUint8Array(str:string): Uint8Array { + let arr:Array = new Array(); + for (let i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } - var tmpUint8Array = new Uint8Array(arr); + let tmpUint8Array = new Uint8Array(arr); return tmpUint8Array } - /** - * int 转 byte[] - * @param n 输入int - */ - intTobytes2(n) { - var bytes = []; - for (var i = 0; i < 2; i++) { - bytes[i] = n >> (8 - i * 8); - } - return bytes; - } uint8ArrayToBuffer(array: Uint8Array): ArrayBuffer { return array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset) } } - -export interface AsyncCallback { - (err: string, data: T): void; -} \ No newline at end of file diff --git a/imageknife/src/main/ets/components/cache/LruCache.ets b/imageknife/src/main/ets/components/cache/LruCache.ets index 3e8d14d..f873924 100644 --- a/imageknife/src/main/ets/components/cache/LruCache.ets +++ b/imageknife/src/main/ets/components/cache/LruCache.ets @@ -30,7 +30,7 @@ export class LruCache { if (key == null || value == null) { throw new Error('key or value is invalid '); } - var pre = this.map.get(key) + let pre = this.map.get(key) if (pre == null) { this.size++ } @@ -43,7 +43,7 @@ export class LruCache { if (key == null) { throw new Error('key is null,checking the parameter'); } - var preValue = this.map.get(key) + let preValue = this.map.get(key) if (this.map.remove(key)) { this.size-- } @@ -51,11 +51,11 @@ export class LruCache { } // 获取键为key的value - get(key: K): V { + get(key: K): V|undefined { if (key == null) { throw new Error('key is null,checking the parameter'); } - var preValue = this.map.get(key) + let preValue = this.map.get(key) if (preValue != null) { this.entryRemoved(key, preValue, preValue) } @@ -69,7 +69,7 @@ export class LruCache { * preValue 对应key键的旧value值 * value 对应key键的新value值 */ - entryRemoved(key: K, preValue: V, value: V) { + entryRemoved(key: K, preValue: V | undefined, value: V | undefined) { if (preValue != null) { this.map.remove(key) } @@ -89,7 +89,7 @@ export class LruCache { if (this.size <= tempsize || this.map.isEmpty()) { break } - var delkey = this.map.getFirstKey() + let delkey = this.map.getFirstKey() this.map.remove(delkey) this.size-- } @@ -126,13 +126,13 @@ export class LruCache { } - this.map.each(function (value, key, index) { + this.map.each( (value, key, index) => { printResult +='LruCache:key=' + key + 'value= ' + value; }) return printResult; } - foreachLruCache(fn){ + foreachLruCache(fn:(value: V, key: K, map: Map) => void){ this.map.each(fn); } diff --git a/imageknife/src/main/ets/components/cache/Md5.ets b/imageknife/src/main/ets/components/cache/Md5.ets deleted file mode 100644 index bbfb601..0000000 --- a/imageknife/src/main/ets/components/cache/Md5.ets +++ /dev/null @@ -1,392 +0,0 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export class Md5 { - - // One time hashing functions - public static hashStr(str: string, raw?: false): string - - public static hashStr(str: string, raw: true): Int32Array - - public static hashStr(str: string, raw: boolean = false) { - return this.onePassHasher - .start() - .appendStr(str) - .end(raw); - } - - public static hashAsciiStr(str: string, raw?: false): string - - public static hashAsciiStr(str: string, raw: true): Int32Array - - public static hashAsciiStr(str: string, raw: boolean = false) { - return this.onePassHasher - .start() - .appendAsciiStr(str) - .end(raw); - } - - // Private Static Variables - private static stateIdentity = new Int32Array([1732584193, -271733879, -1732584194, 271733878]); - private static buffer32Identity = new Int32Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - private static hexChars = '0123456789abcdef'; - private static hexOut: string[] = []; - - // Permanent instance is to use for one-call hashing - private static onePassHasher = new Md5(); - - private static _hex(x: any): string { - const hc = Md5.hexChars; - const ho = Md5.hexOut; - let n; - let offset; - let j; - let i; - - for (i = 0; i < 4; i += 1) { - offset = i * 8; - n = x[i]; - for (j = 0; j < 8; j += 2) { - ho[offset + 1 + j] = hc.charAt(n & 0x0F); - n >>>= 4; - ho[offset + 0 + j] = hc.charAt(n & 0x0F); - n >>>= 4; - } - } - return ho.join(''); - } - - private static _md5cycle(x: Int32Array | Uint32Array, k: Int32Array | Uint32Array) { - let a = x[0]; - let b = x[1]; - let c = x[2]; - let d = x[3]; - // ff() - a += (b & c | ~b & d) + k[0] - 680876936 | 0; - a = (a << 7 | a >>> 25) + b | 0; - d += (a & b | ~a & c) + k[1] - 389564586 | 0; - d = (d << 12 | d >>> 20) + a | 0; - c += (d & a | ~d & b) + k[2] + 606105819 | 0; - c = (c << 17 | c >>> 15) + d | 0; - b += (c & d | ~c & a) + k[3] - 1044525330 | 0; - b = (b << 22 | b >>> 10) + c | 0; - a += (b & c | ~b & d) + k[4] - 176418897 | 0; - a = (a << 7 | a >>> 25) + b | 0; - d += (a & b | ~a & c) + k[5] + 1200080426 | 0; - d = (d << 12 | d >>> 20) + a | 0; - c += (d & a | ~d & b) + k[6] - 1473231341 | 0; - c = (c << 17 | c >>> 15) + d | 0; - b += (c & d | ~c & a) + k[7] - 45705983 | 0; - b = (b << 22 | b >>> 10) + c | 0; - a += (b & c | ~b & d) + k[8] + 1770035416 | 0; - a = (a << 7 | a >>> 25) + b | 0; - d += (a & b | ~a & c) + k[9] - 1958414417 | 0; - d = (d << 12 | d >>> 20) + a | 0; - c += (d & a | ~d & b) + k[10] - 42063 | 0; - c = (c << 17 | c >>> 15) + d | 0; - b += (c & d | ~c & a) + k[11] - 1990404162 | 0; - b = (b << 22 | b >>> 10) + c | 0; - a += (b & c | ~b & d) + k[12] + 1804603682 | 0; - a = (a << 7 | a >>> 25) + b | 0; - d += (a & b | ~a & c) + k[13] - 40341101 | 0; - d = (d << 12 | d >>> 20) + a | 0; - c += (d & a | ~d & b) + k[14] - 1502002290 | 0; - c = (c << 17 | c >>> 15) + d | 0; - b += (c & d | ~c & a) + k[15] + 1236535329 | 0; - b = (b << 22 | b >>> 10) + c | 0; - // gg() - a += (b & d | c & ~d) + k[1] - 165796510 | 0; - a = (a << 5 | a >>> 27) + b | 0; - d += (a & c | b & ~c) + k[6] - 1069501632 | 0; - d = (d << 9 | d >>> 23) + a | 0; - c += (d & b | a & ~b) + k[11] + 643717713 | 0; - c = (c << 14 | c >>> 18) + d | 0; - b += (c & a | d & ~a) + k[0] - 373897302 | 0; - b = (b << 20 | b >>> 12) + c | 0; - a += (b & d | c & ~d) + k[5] - 701558691 | 0; - a = (a << 5 | a >>> 27) + b | 0; - d += (a & c | b & ~c) + k[10] + 38016083 | 0; - d = (d << 9 | d >>> 23) + a | 0; - c += (d & b | a & ~b) + k[15] - 660478335 | 0; - c = (c << 14 | c >>> 18) + d | 0; - b += (c & a | d & ~a) + k[4] - 405537848 | 0; - b = (b << 20 | b >>> 12) + c | 0; - a += (b & d | c & ~d) + k[9] + 568446438 | 0; - a = (a << 5 | a >>> 27) + b | 0; - d += (a & c | b & ~c) + k[14] - 1019803690 | 0; - d = (d << 9 | d >>> 23) + a | 0; - c += (d & b | a & ~b) + k[3] - 187363961 | 0; - c = (c << 14 | c >>> 18) + d | 0; - b += (c & a | d & ~a) + k[8] + 1163531501 | 0; - b = (b << 20 | b >>> 12) + c | 0; - a += (b & d | c & ~d) + k[13] - 1444681467 | 0; - a = (a << 5 | a >>> 27) + b | 0; - d += (a & c | b & ~c) + k[2] - 51403784 | 0; - d = (d << 9 | d >>> 23) + a | 0; - c += (d & b | a & ~b) + k[7] + 1735328473 | 0; - c = (c << 14 | c >>> 18) + d | 0; - b += (c & a | d & ~a) + k[12] - 1926607734 | 0; - b = (b << 20 | b >>> 12) + c | 0; - // hh() - a += (b ^ c ^ d) + k[5] - 378558 | 0; - a = (a << 4 | a >>> 28) + b | 0; - d += (a ^ b ^ c) + k[8] - 2022574463 | 0; - d = (d << 11 | d >>> 21) + a | 0; - c += (d ^ a ^ b) + k[11] + 1839030562 | 0; - c = (c << 16 | c >>> 16) + d | 0; - b += (c ^ d ^ a) + k[14] - 35309556 | 0; - b = (b << 23 | b >>> 9) + c | 0; - a += (b ^ c ^ d) + k[1] - 1530992060 | 0; - a = (a << 4 | a >>> 28) + b | 0; - d += (a ^ b ^ c) + k[4] + 1272893353 | 0; - d = (d << 11 | d >>> 21) + a | 0; - c += (d ^ a ^ b) + k[7] - 155497632 | 0; - c = (c << 16 | c >>> 16) + d | 0; - b += (c ^ d ^ a) + k[10] - 1094730640 | 0; - b = (b << 23 | b >>> 9) + c | 0; - a += (b ^ c ^ d) + k[13] + 681279174 | 0; - a = (a << 4 | a >>> 28) + b | 0; - d += (a ^ b ^ c) + k[0] - 358537222 | 0; - d = (d << 11 | d >>> 21) + a | 0; - c += (d ^ a ^ b) + k[3] - 722521979 | 0; - c = (c << 16 | c >>> 16) + d | 0; - b += (c ^ d ^ a) + k[6] + 76029189 | 0; - b = (b << 23 | b >>> 9) + c | 0; - a += (b ^ c ^ d) + k[9] - 640364487 | 0; - a = (a << 4 | a >>> 28) + b | 0; - d += (a ^ b ^ c) + k[12] - 421815835 | 0; - d = (d << 11 | d >>> 21) + a | 0; - c += (d ^ a ^ b) + k[15] + 530742520 | 0; - c = (c << 16 | c >>> 16) + d | 0; - b += (c ^ d ^ a) + k[2] - 995338651 | 0; - b = (b << 23 | b >>> 9) + c | 0; - // ii() - a += (c ^ (b | ~d)) + k[0] - 198630844 | 0; - a = (a << 6 | a >>> 26) + b | 0; - d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0; - d = (d << 10 | d >>> 22) + a | 0; - c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0; - c = (c << 15 | c >>> 17) + d | 0; - b += (d ^ (c | ~a)) + k[5] - 57434055 | 0; - b = (b << 21 | b >>> 11) + c | 0; - a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0; - a = (a << 6 | a >>> 26) + b | 0; - d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0; - d = (d << 10 | d >>> 22) + a | 0; - c += (a ^ (d | ~b)) + k[10] - 1051523 | 0; - c = (c << 15 | c >>> 17) + d | 0; - b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0; - b = (b << 21 | b >>> 11) + c | 0; - a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0; - a = (a << 6 | a >>> 26) + b | 0; - d += (b ^ (a | ~c)) + k[15] - 30611744 | 0; - d = (d << 10 | d >>> 22) + a | 0; - c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0; - c = (c << 15 | c >>> 17) + d | 0; - b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0; - b = (b << 21 | b >>> 11) + c | 0; - a += (c ^ (b | ~d)) + k[4] - 145523070 | 0; - a = (a << 6 | a >>> 26) + b | 0; - d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0; - d = (d << 10 | d >>> 22) + a | 0; - c += (a ^ (d | ~b)) + k[2] + 718787259 | 0; - c = (c << 15 | c >>> 17) + d | 0; - b += (d ^ (c | ~a)) + k[9] - 343485551 | 0; - b = (b << 21 | b >>> 11) + c | 0; - - x[0] = a + x[0] | 0; - x[1] = b + x[1] | 0; - x[2] = c + x[2] | 0; - x[3] = d + x[3] | 0; - } - - private _dataLength: number; - private _bufferLength: number; - private _state: Int32Array = new Int32Array(4); - private _buffer: ArrayBuffer = new ArrayBuffer(68); - private _buffer8: Uint8Array; - private _buffer32: Uint32Array; - - constructor() { - this._buffer8 = new Uint8Array(this._buffer, 0, 68); - this._buffer32 = new Uint32Array(this._buffer, 0, 17); - this.start(); - } - - public start() { - this._dataLength = 0; - this._bufferLength = 0; - this._state.set(Md5.stateIdentity); - return this; - } - - // Char to code point to to array conversion: - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt - // #Example.3A_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown - public appendStr(str: string) { - const buf8 = this._buffer8; - const buf32 = this._buffer32; - let bufLen = this._bufferLength; - let code; - let i; - - for (i = 0; i < str.length; i += 1) { - code = str.charCodeAt(i); - if (code < 128) { - buf8[bufLen++] = code; - } else if (code < 0x800) { - buf8[bufLen++] = (code >>> 6) + 0xC0; - buf8[bufLen++] = code & 0x3F | 0x80; - } else if (code < 0xD800 || code > 0xDBFF) { - buf8[bufLen++] = (code >>> 12) + 0xE0; - buf8[bufLen++] = (code >>> 6 & 0x3F) | 0x80; - buf8[bufLen++] = (code & 0x3F) | 0x80; - } else { - code = ((code - 0xD800) * 0x400) + (str.charCodeAt(++i) - 0xDC00) + 0x10000; - if (code > 0x10FFFF) { - throw new Error('Unicode standard supports code points up to U+10FFFF'); - } - buf8[bufLen++] = (code >>> 18) + 0xF0; - buf8[bufLen++] = (code >>> 12 & 0x3F) | 0x80; - buf8[bufLen++] = (code >>> 6 & 0x3F) | 0x80; - buf8[bufLen++] = (code & 0x3F) | 0x80; - } - if (bufLen >= 64) { - this._dataLength += 64; - Md5._md5cycle(this._state, buf32); - bufLen -= 64; - buf32[0] = buf32[16]; - } - } - this._bufferLength = bufLen; - return this; - } - - public appendAsciiStr(str: string) { - const buf8 = this._buffer8; - const buf32 = this._buffer32; - let bufLen = this._bufferLength; - let i; - let j = 0; - - for (;; ) { - i = Math.min(str.length - j, 64 - bufLen); - while (i--) { - buf8[bufLen++] = str.charCodeAt(j++); - } - if (bufLen < 64) { - break; - } - this._dataLength += 64; - Md5._md5cycle(this._state, buf32); - bufLen = 0; - } - this._bufferLength = bufLen; - return this; - } - - public appendByteArray(input: Uint8Array) { - const buf8 = this._buffer8; - const buf32 = this._buffer32; - let bufLen = this._bufferLength; - let i; - let j = 0; - - for (;; ) { - i = Math.min(input.length - j, 64 - bufLen); - while (i--) { - buf8[bufLen++] = input[j++]; - } - if (bufLen < 64) { - break; - } - this._dataLength += 64; - Md5._md5cycle(this._state, buf32); - bufLen = 0; - } - this._bufferLength = bufLen; - return this; - } - - public getState() { - const self = this; - const s = self._state; - - return { - buffer: String.fromCharCode.apply(null, self._buffer8), - buflen: self._bufferLength, - length: self._dataLength, - state: [s[0], s[1], s[2], s[3]] - }; - } - - public setState(state: any) { - const buf = state.buffer; - const x = state.state; - const s = this._state; - let i; - - this._dataLength = state.length; - this._bufferLength = state.buflen; - s[0] = x[0]; - s[1] = x[1]; - s[2] = x[2]; - s[3] = x[3]; - - for (i = 0; i < buf.length; i += 1) { - this._buffer8[i] = buf.charCodeAt(i); - } - } - - public end(raw: boolean = false) { - const bufLen = this._bufferLength; - const buf8 = this._buffer8; - const buf32 = this._buffer32; - const i = (bufLen >> 2) + 1; - let dataBitsLen; - - this._dataLength += bufLen; - - buf8[bufLen] = 0x80; - buf8[bufLen + 1] = buf8[bufLen + 2] = buf8[bufLen + 3] = 0; - buf32.set(Md5.buffer32Identity.subarray(i), i); - - if (bufLen > 55) { - Md5._md5cycle(this._state, buf32); - buf32.set(Md5.buffer32Identity); - } - - // Do the final computation based on the tail and length - // Beware that the final length may not fit in 32 bits so we take care of that - dataBitsLen = this._dataLength * 8; - if (dataBitsLen <= 0xFFFFFFFF) { - buf32[14] = dataBitsLen; - } else { - const matches = dataBitsLen.toString(16).match(/(.*?)(.{0,8})$/); - if (matches === null) { - return; - } - - const lo = parseInt(matches[2], 16); - const hi = parseInt(matches[1], 16) || 0; - - buf32[14] = lo; - buf32[15] = hi; - } - - Md5._md5cycle(this._state, buf32); - - return raw ? this._state : Md5._hex(this._state); - } -} \ No newline at end of file