#json #config-format #serde-json #top #built #encryption #password

encon

an optionally-encrypted config format, built on top of JSON

3 releases

0.0.3 Nov 7, 2020
0.0.2 Nov 4, 2020
0.0.1 Nov 4, 2020

#1280 in Encoding

MIT license

62KB
1K SLoC

encon

Encon is an optionally-encrypted config format, built on top of JSON. A mix of encrypted and plain fields, and support for encrypting arbitrary JSON values make it very flexible.

Example

use serde_json::json;
use encon::{Password, Map, Encryptable};

let pass = Password::new("strongpassword");

let mut map = Map::new();
map.insert("foo", Encryptable::Plain("Foo".into()));
map.insert("bar", Encryptable::Plain("Bar".into()));
map.get_mut(&"foo".to_owned()).unwrap().intend_encrypted();

assert_eq!(map.get(&"foo".to_owned()).unwrap().is_encrypted(), false);
assert_eq!(map.get(&"bar".to_owned()).unwrap().is_encrypted(), false);

map.apply_all_intents(&pass).unwrap();
assert_eq!(map.get(&"foo".to_owned()).unwrap().is_encrypted(), true);
assert_eq!(map.get(&"bar".to_owned()).unwrap().is_encrypted(), false);

let json = map.to_json_pretty().unwrap();
let mut map2: Map = serde_json::from_str(&json).unwrap();
assert_eq!(map2.get(&"foo".to_owned()).unwrap().is_encrypted(), true);
assert_eq!(map2.get(&"bar".to_owned()).unwrap().is_encrypted(), false);

let value = map2.get_mut(&"foo".to_owned()).unwrap()
    .to_decrypted(&pass).unwrap()
    .as_plain().unwrap().clone();
assert_eq!(value, json!("Foo"));

Current version: 0.0.1

Other Crates

  • encon-cli: a command line tool for interacting with encon JSON files
  • encon-js: an npm package (npm install encon)

All crates licensed as MIT

Dependencies

~20MB
~111K SLoC