1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-01 09:24:20 -04:00
denoland-deno/cli/bench/testdata/npm/hono/dist/utils/crypto.js

54 lines
1.7 KiB
JavaScript
Raw Normal View History

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createHash = exports.md5 = exports.sha1 = exports.sha256 = void 0;
const sha256 = async (data) => {
const algorithm = { name: 'SHA-256', alias: 'sha256' };
const hash = await (0, exports.createHash)(data, algorithm);
return hash;
};
exports.sha256 = sha256;
const sha1 = async (data) => {
const algorithm = { name: 'SHA-1', alias: 'sha1' };
const hash = await (0, exports.createHash)(data, algorithm);
return hash;
};
exports.sha1 = sha1;
const md5 = async (data) => {
const algorithm = { name: 'MD5', alias: 'md5' };
const hash = await (0, exports.createHash)(data, algorithm);
return hash;
};
exports.md5 = md5;
const createHash = async (data, algorithm) => {
let sourceBuffer;
if (data instanceof ReadableStream) {
let body = '';
const reader = data.getReader();
await reader?.read().then(async (chuck) => {
const value = await (0, exports.createHash)(chuck.value || '', algorithm);
body += value;
});
return body;
}
if (ArrayBuffer.isView(data) || data instanceof ArrayBuffer) {
sourceBuffer = data;
}
else {
if (typeof data === 'object') {
data = JSON.stringify(data);
}
sourceBuffer = new TextEncoder().encode(String(data));
}
if (crypto && crypto.subtle) {
const buffer = await crypto.subtle.digest({
name: algorithm.name,
}, sourceBuffer);
const hash = Array.prototype.map
.call(new Uint8Array(buffer), (x) => ('00' + x.toString(16)).slice(-2))
.join('');
return hash;
}
return null;
};
exports.createHash = createHash;