Skip to main content

An open format for describing riddles and encrypted resources

Project description

ch35t

Ch35t (pronounced “chest”) is, well, a chest with a little bit of 3564020356 in it :-)

More precisely, it is an open format you can use to describe riddles or, more generally, different kinds of encrypted resources, together with hints on how to decrypt them.

Following the “treasure chest” metaphor, in the ch35t format:

  • chests can only be opened with the right key (or set of)
  • one can provide, together with a chest, some hints to find its key
  • chests may have something hidden inside them, ie they come with some content (payload) that you can access only after you open them

All of this is described in a JSON file that can be shared however you see fit (if you want, you can even hide it into another chest!). And you don’t have to worry about making your chest accessible to everyone, as you can use encryption to hide a key or lock contents inside a chest.

Q: Why a format?

Because this way the riddle is completely decoupled from who created it and where you found it, moving the focus on its actual content. Here are some other advantages:

  • easy sharing: you can just provide a link to a JSON file for hours of potential fun (or frustration ;-))
  • playing offline: once you have downloaded a chest its contents reside on your computer, so you don’t have to worry about being online to unlock it
  • compositionality: you can build your own “treasure hunt” by collecting riddles created by other people and chaining them into your own custom game
  • flexibility: ch35t allows you to provide hints and payloads in different formats, lock with different encryption algorithms, and react differently to different file types
  • extensibility: while here you can find examples for handling a few data types and encryption methods, everyone can implement their own extension or even a new client. You can have a TUI or a Web-based one, you can build a custom leaderboard, and so on.

Q: How/where is this format defined?

To define the Ch35t format I decided to rely on JSON Schema. This way you can easily test the validity of your chest file, and I can easily generate documentation starting from a properly commented schema file.

You can find the JSON definition here, and a human-readable, markdown version here.

Q: Sounds great! How can I play with it?

Ehm... Development is still in an early phase. Very early :-) But hey, this is at least 50% of the “release early, release often” paradigm! Also, this does not mean there is nothing to play with yet:

What is currently available

  • a v1.0.0 of the format schema
  • a notebook explaining the basics of Ch35t (and showing you how to start playing with very simple examples)
  • a few ready-to-play chests in the examples folder, replicating the first two riddles on 3564020356: Deserve, Riddle02

Planned features

Here is a list of features that I would like to see in my ideal v1.0 of Ch35t:

  • an actual format definition (v1.0.0 is a good start, but there is definitely space for improvement)
  • an improved notebook that should act as a tutorial, explaining the format with more detail and allowing people to play with examples (currently WIP)
  • adding signatures, so we can have proper attribution and guarantee riddle authenticity
  • improving modularity (I’d like to see chests with many keys and give the possibility to open them with different combinations of them, e.g. just one, at least N, all in a given order, etc.)
  • a simple client with all the basic features (TUI or simple containerized web-based implementation, so people can just play with it without requiring any installation
  • more handlers (e.g. I would love to use Tomb for a “russian dolls” kind of riddle)
  • a few more riddles (I would like to convert some from 356s so they become accessible to everyone
  • a set of tools to help people build their own chests

How can I create/share my own chests?

The whole purpose of Ch35t is allowing anyone to build and openly share their own riddles. To make a riddle, create a JSON file that is compliant with the Ch35t format and can be parsed by the Ch35t client (which -yes I know- in this moment boils down to few lines of code in a notebook...). Sharing the riddle is easier: just upload it somewhere and share its URL on your favorite channels! I have just started posting Ch35t-related updates on the Fediverse using the #Ch35t tag, you are very welcome to do the same!

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

ch35t-0.1.9.tar.gz (26.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ch35t-0.1.9-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

Details for the file ch35t-0.1.9.tar.gz.

File metadata

  • Download URL: ch35t-0.1.9.tar.gz
  • Upload date:
  • Size: 26.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.10

File hashes

Hashes for ch35t-0.1.9.tar.gz
Algorithm Hash digest
SHA256 12f5f43d612bc79d8c29745f64a6a8047b7a4c319c396452c8d1e9b2f3a1795c
MD5 7db07c7be7888573919c861d93a881af
BLAKE2b-256 22fea8046c6591189fcf9d88debdc9070035e0690fe98795db89e1c75afacf2e

See more details on using hashes here.

File details

Details for the file ch35t-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: ch35t-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 27.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.10

File hashes

Hashes for ch35t-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 ca1c384aa48b9ce62511af4a35e3bece0de9d2254e79771a2beab23f3f1d794c
MD5 ebc32bc353c4ef3e9b7e0f0730817ce4
BLAKE2b-256 c51b41738b91ca52a8f74bde88d62b2f106327494ce3a73aa73c30dfbfa23df3

See more details on using hashes here.

Supported by

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