hash improvement
This commit is contained in:
Vendored
+94
@@ -0,0 +1,94 @@
|
||||
'use strict';
|
||||
|
||||
var chunkS7BSPELE_cjs = require('./chunk-S7BSPELE.cjs');
|
||||
var stream = require('stream');
|
||||
var digest = require('multiformats/hashes/digest');
|
||||
var cid = require('multiformats/cid');
|
||||
var crypto = require('crypto');
|
||||
var crc32 = require('crc-32');
|
||||
|
||||
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
||||
|
||||
var crc32__default = /*#__PURE__*/_interopDefault(crc32);
|
||||
|
||||
var Crc32Hash = class {
|
||||
_crc = void 0;
|
||||
update(data) {
|
||||
this._crc = crc32__default.default.buf(data, this._crc);
|
||||
return this;
|
||||
}
|
||||
digest() {
|
||||
const buffer = Buffer.alloc(4);
|
||||
buffer.writeInt32BE(this._crc, 0);
|
||||
return buffer;
|
||||
}
|
||||
};
|
||||
|
||||
// src/lib/file-id/CreateHasher.ts
|
||||
var codeTable = {
|
||||
["cid_crc32" /* crc32 */]: 306 /* crc32 */,
|
||||
["cid_md5" /* md5 */]: 213 /* md5 */,
|
||||
["cid_sha1" /* sha1 */]: 17 /* sha1 */,
|
||||
["cid_sha2-256" /* sha256 */]: 18 /* sha256 */,
|
||||
["cid_sha3-256" /* sha3_256 */]: 22 /* sha3_256 */,
|
||||
["cid_sha3-384" /* sha3_384 */]: 21 /* sha3_384 */
|
||||
};
|
||||
async function createHasher(algo) {
|
||||
switch (algo) {
|
||||
case "cid_sha2-256" /* sha256 */:
|
||||
return crypto.createHash("sha256");
|
||||
case "cid_sha1" /* sha1 */:
|
||||
return crypto.createHash("sha1");
|
||||
case "cid_md5" /* md5 */:
|
||||
return crypto.createHash("md5");
|
||||
case "cid_sha3-256" /* sha3_256 */:
|
||||
return crypto.createHash("sha3-256");
|
||||
case "cid_sha3-384" /* sha3_384 */:
|
||||
return crypto.createHash("sha3-384");
|
||||
case "cid_crc32" /* crc32 */:
|
||||
return new Crc32Hash();
|
||||
default:
|
||||
throw new Error(`Unsupported algorithm: ${algo}`);
|
||||
}
|
||||
}
|
||||
|
||||
// src/lib/file-id/ComputeHash.ts
|
||||
async function computeCIDs({ stream: stream$1, algorithms }) {
|
||||
const hashers = await hasherDefiner(algorithms);
|
||||
if (stream$1 instanceof stream.Readable) {
|
||||
for await (const chunk of stream$1) {
|
||||
for (const item of hashers) {
|
||||
await item.hasher.update(chunk);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const reader = stream$1.getReader();
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
if (done)
|
||||
break;
|
||||
for (const item of hashers) {
|
||||
await item.hasher.update(Buffer.from(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
return cidFinalize(hashers);
|
||||
}
|
||||
async function hasherDefiner(algorithms) {
|
||||
const hashers = algorithms.filter((algo) => Object.values(chunkS7BSPELE_cjs.CID_ALGORITHM_NAMES).includes(algo)).map(async (algo) => ({
|
||||
hasher: await createHasher(algo),
|
||||
code: codeTable[algo]
|
||||
}));
|
||||
return await Promise.all(hashers);
|
||||
}
|
||||
async function cidFinalize(hashers) {
|
||||
return await Promise.all(hashers.map(async ({ code, hasher }) => {
|
||||
const hashBuffer = await hasher.digest();
|
||||
const digest$1 = digest.create(code, hashBuffer);
|
||||
return cid.CID.createV1(code, digest$1).toString();
|
||||
}));
|
||||
}
|
||||
|
||||
exports.computeCIDs = computeCIDs;
|
||||
//# sourceMappingURL=out.js.map
|
||||
//# sourceMappingURL=chunk-OHUFSPVO.cjs.map
|
||||
Reference in New Issue
Block a user