Skip to main content

Encode and decode binary data to English sentences

Project description

BatteryHorse

Encode and decode text as English sentences. The name is inspired by this xkcd comic.

API

The batteryhorse module exposes three functions:

encode_data(data: bytes) -> str

Encode the given data into one or more English phrases/sentences. Uses Wordnet from the NLTK library to create sentences in the following format: VERB NOUN ADJECTIVE CONJUNCTION ADJECTIVE. If the bytes can be encoded into fewer parts of speech then the rest will be truncated.

decode_data(data: str, length: int) -> bytes

Decode a string of sentences or phrases back into the original bytes. Also requires the size of the output bytes

create_secret(size=3: int) -> bytes

Creates a random passphrase by using random words from the Wordnet. Size specifies the number of words to use

Examples

A basic example that encodes some data

>>> import batteryhorse
>>> batteryhorse.encode_data(b'TEST')
'Unitise annum abasic'

An example showing encoding and decoding data

>>> from hashlib import sha1
>>> import batteryhorse
>>> 
>>> digest = sha1('test'.encode('utf-8')).digest()
>>> 
>>> batteryhorse.encode_data(digest)
'Birdnest vara lobed or orthoptic. Wow fencing orthogonal yet anthropomorphic. Scranch rifadin anosmatic'
>>> 
>>> batteryhorse.decode_data('Birdnest vara lobed or orthoptic. Wow fencing orthogonal yet anthropomorphic. Scranch rifadin anosmatic', len(digest))
b'\xa9J\x8f\xe5\xcc\xb1\x9b\xa6\x1cL\x08s\xd3\x91\xe9\x87\x98/\xbb\xd3'
>>> print(digest)
b'\xa9J\x8f\xe5\xcc\xb1\x9b\xa6\x1cL\x08s\xd3\x91\xe9\x87\x98/\xbb\xd3'

Command Line

BatteryHorse is also available on the command line.

  --encode         Accept data to be encoded from STDIN
  --decode         Accept data to be decoded from STDIN
  --generate       Generate a random secret
  --length LENGTH  Specify the length of secret or data to be decoded

And as an example

$ echo "TEST" | python -m batteryhorse --encode
Bare gyrostabilizer amygdaloidal

Uses

The original intention of this library was to create a new way of sharing fingerprints of public keys.

Limitations

Although Batteryhorse can encode data of arbitary lengths it does no padding of the data beforehand resulting in some sentences that may not be complete.

Additionally, since the length of the original data is not encoded the decode function must take the length as a parameter.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

BatteryHorse-1.0.0.tar.gz (10.7 MB view details)

Uploaded Source

Built Distribution

BatteryHorse-1.0.0-py3-none-any.whl (10.8 MB view details)

Uploaded Python 3

File details

Details for the file BatteryHorse-1.0.0.tar.gz.

File metadata

  • Download URL: BatteryHorse-1.0.0.tar.gz
  • Upload date:
  • Size: 10.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for BatteryHorse-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ae39bc68785acf7ba1b7dd91ec0a7449ee6db7dd24dbb2ee2007ed2d3cff0c47
MD5 b8b99c5f1b950b3b1c4291817a5a3039
BLAKE2b-256 a2d2676747c2c535a1c732fcb99e3789b794c88d2e634a3abf2bc55832ab7218

See more details on using hashes here.

File details

Details for the file BatteryHorse-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: BatteryHorse-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 10.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for BatteryHorse-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fd6e1af601b399973a085355f0202ee1e7453c141549ded7edd0a357e7e77f29
MD5 a64ba4e0b594b0dcacbf4d6ca54fd7ca
BLAKE2b-256 df1859d326d88c30e8505edd0dec8102ae6a742077c35fab655115717cca2dc8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page