redacted-ts
Version:
Redacting classified documents
94 lines (66 loc) • 3.91 kB
Markdown
# redacted-ts
_Redacting classified documents_





This repository holds the code base for my `redacted-ts` library in TypeScript as well as its companion CLI: [`redacted-cli`](cli/README.md). \
It is mainly based off my [Feistel cipher for Format-Preserving Encryption](https://github.com/cyrildever/feistel-cipher) to which I added a few tools to handle document, database and file manipulation to ease out the operation.
### Motivation
In some fields (like healthcare for instance), protecting the privacy of data whilst being able to conduct in-depth studies is both vital and mandatory. Redacting documents and databases is therefore the obligatory passage.
With `redacted-ts`, I provide a simple yet secure tool to help redacting documents based on either a dictionary, a record layout or a tag to decide which parts should actually be redacted.
### Usage
You can use either a dictionary or a tag (or both) to identify the words you want to redact in a document.
The tag should be placed before any word that should be redacted. The default tag is the tilde character (`~`).
For example, the following sentence will only see the word `tagged` redacted: `"This is a ~tagged sentence"`.
```console
$ npm install redacted-ts
```
```typescript
import { DefaultRedactor, Dictionary } from 'redacted-ts'
import { FPECipher, SHA_256 } from 'feistel-cipher'
const source = 'Some text ~tagged or using words in a dictionary'
const cipher = new FPECipher(SHA_256, key, 10)
const redactor = DefaultRedactor(cipher)
const redacted = redactor.redact(source)
const expanded = redactor.expand(redacted)
assert(expanded === source)
const cleansed = redactor.clean(expanded)
assert(cleansed === 'Some text tagged or using words in a dictionary')
```
### CLI
You can also install it globally and use it as a CLI for handling files:
```console
$ npm i -g redacted-cli
$ redacted -V
```
```console
$ redacted --help
____ _ _ _
| _ \ ___ __| | __ _ ___| |_ ___ __| |
| |_) / _ \/ _` |/ _` |/ __| __/ _ \/ _` |
| _ < __/ (_| | (_| | (__| || __/ (_| |
|_| \_\___|\__,_|\__,_|\___|\__\___|\__,_|
Usage: redacted [options]
A TypeScript-based CLI to redacting classified documents
Options:
-V, --version output the version number
-b, --both add to use both dictionary and tag
-d, --dictionary <value> the optional path to the dictionary of words to redact
-H, --hash <value> the hash engine for the round function (default "sha-256")
-i, --input <value> the path to the document to be redacted
-k, --key <value> the optional key for the FPE scheme (leave it empty to use default)
-o, --output <value> the name of the output file
-r, --rounds <value> the number of rounds for the Feistel cipher (default 10)
-t, --tag <value> the optional tag that prefixes words to redact (default "~")
-x, --expand add to expand a redacted document
-h, --help display help for command
```
_NB: The dictionary file must consist of space-separated words._
### License
The use of the `redacted` libraries and executables are subject to fees for commercial purpose and to the respect of the [BSD-2-Clause-Patent license](LICENSE). \
Please [contact me](mailto:cdever@pep-s.com) to get further information.
_NB: It is still under development so use in production at your own risk for now._
<hr />
© 2021-2026 Cyril Dever. All rights reserved.