Pure Javascript implementation of the cipher used in rclone (crypt-mount).
Installation
Node
npm install rclone
Browser
You can find a browser bundle here:
https://unpkg.com/rclone/dist/rclone.umd.min.js
Use window.rclone.Rclone
to access the constructor function.
Getting Started
Examples
Encrypt/Decrypt Paths
import { Rclone } from 'rclone';
// Create Rclone instance
Rclone({
password: 'UmyLSdRHfew6aual28-ggx78qHqSfQ',
salt: 'Cj3gLa5PVwc2aot0QpKiOZ3YEzs3Sw'
})
.then(rclone => {
// Decryption
console.log(
rclone.Path.decrypt("dk7voi2247uqbgbuh439j13eo0/p0q5lhi767fsplsdjla7j7uv60") // Hello World
);
// Encryption
console.log(
rclone.Path.encrypt("Hello/World") // dk7voi2247uqbgbuh439j13eo0/p0q5lhi767fsplsdjla7j7uv60
);
})
.catch(error => {
// Catch error creating rclone instance
})
Decrypt Files
Concept
To decrypt files in the browser rclone-js is using a node concept called Streams in the browser using readable-stream. You can create a decrypting ReadableStream by using the function rclone.File.createReadStream
which will take a function that needs to return a ReadableStream representing the decrypted file. To provide random access rclone will pass an options object to the function like used by the node fs
module. An important additon to these options is the chunkSize
propertie, it is needed because rclone uses a block cipher and can only operate on a integer multiple of this size. These options need to be taken into account for the creation of the underyling ReadableStream returned from the function.
Example
Fetch Stream
Using fetch and range headers to decrypt files from amazon s3