Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A lightweight library for decrypting MP4 files, directly in the browser

License

Notifications You must be signed in to change notification settings

azot-labs/shifro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

96 Commits

Repository files navigation

shifro

A lightweight library for decrypting MP4 files, directly in the browser

Installation

Install library as dependency for your project:

npm install shifro

Install globally to use as command-line tool:

npm install -g shifro

Usage

Library

Decrypting file using browser's Web Streams API

import { Input, StreamSource, Output, StreamTarget, Decryption } from 'shifro';
const selectFile = async () =>
 new Promise<File>((resolve) => {
 const input = document.querySelector<HTMLInputElement>('#input')!;
 input.addEventListener('change', () => resolve(input.files![0]));
 });
async function main() {
 const inputFile = await selectFile();
 const inputStream = inputFile.stream();
 const outputFileHandle = window.showSaveFilePicker({ suggestedName: 'output.mp4', startIn: 'downloads' });
 const outputStream = await outputFileHandle.createWritable();
 const input = new Input({ source: new StreamSource(inputStream) });
 const output = new Output({ target: new StreamTarget(outputStream) });
 const decryption = await Decryption.init({
 input,
 output,
 keys: [
 {
 kid: 'eb676abbcb345e96bbcf616630f1a3da',
 key: '100b6c20940f779a4589152b57d2dacb',
 },
 ],
 onProgress: (progress) => console.log(`Decrypting... ${progress}`),
 });
 await decryption.execute();
}

Decrypting file using Node.js streams

import { Input, FilePathSource, Output, FilePathTarget, Decryption } from 'shifro';
async function main() {
 const input = new Input({ source: new FilePathSource('./input.mp4') });
 const output = new Output({ target: new FilePathTarget('./output.mp4') });
 const decryption = await Decryption.init({
 input,
 output,
 keys: [
 {
 kid: 'eb676abbcb345e96bbcf616630f1a3da',
 key: '100b6c20940f779a4589152b57d2dacb',
 },
 ],
 onProgress: (progress) => process.stdout.write(`\rDecrypting... [${progress}]`),
 });
 await decryption.execute();
}

CLI

shifro --key eb676abbcb345e96bbcf616630f1a3da:100b6c20940f779a4589152b57d2dacb ./input.mp4 ./output.mp4

Credits

About

A lightweight library for decrypting MP4 files, directly in the browser

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

AltStyle によって変換されたページ (->オリジナル) /