Hash every validated server copy and register it as verified content
This commit is contained in:
26
server/hash.js
Normal file
26
server/hash.js
Normal file
@@ -0,0 +1,26 @@
|
||||
/* hash.js — streaming SHA-256 of files on disk (never loads a whole video).
|
||||
* The hex digest of a validated file is its P2P content id (cid). */
|
||||
import { createHash } from 'node:crypto';
|
||||
import { createReadStream } from 'node:fs';
|
||||
|
||||
export function sha256File(path) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const h = createHash('sha256');
|
||||
createReadStream(path, { highWaterMark: 1024 * 1024 })
|
||||
.on('data', (d) => h.update(d))
|
||||
.on('error', reject)
|
||||
.on('end', () => resolve(h.digest('hex')));
|
||||
});
|
||||
}
|
||||
|
||||
// Hash of bytes [offset, offset+length) — used for holder range challenges.
|
||||
export function sha256Range(path, offset, length) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!(length > 0)) { resolve(createHash('sha256').digest('hex')); return; }
|
||||
const h = createHash('sha256');
|
||||
createReadStream(path, { start: offset, end: offset + length - 1 })
|
||||
.on('data', (d) => h.update(d))
|
||||
.on('error', reject)
|
||||
.on('end', () => resolve(h.digest('hex')));
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user