ordo 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +100 -0
- data/Rakefile +1 -0
- data/lib/ordo.rb +5 -0
- data/lib/ordo/version.rb +3 -0
- data/ordo.gemspec +25 -0
- metadata +95 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e890f80f24a48de13e03ddb187dddfc55f43b72e
|
4
|
+
data.tar.gz: cc31473804b28bd97c56322e10c38601b77fb68b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b52f17efb54461bdf5b3ff16f7e7f8915e8c3609d2501869862324a19f0712f3e9e2e2505c1a7502aa7bff25ff6c21f5527f55b38d7e6fc8a2833484e28387f6
|
7
|
+
data.tar.gz: 47eb0af405a792ffe5858f82086995845dfc5e40171181df477ac715110210b136d90fb7119ca31ea3b4b624668d99b75a99cb773c446c1c07f6a610f4df14ac
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Tony Arcieri
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
# Ordo (Ordered Representation for Disinguished Objects)
|
2
|
+
|
3
|
+
Ordo is a data interchange format with the main intended use case of
|
4
|
+
representing certificates and cryptographic keys.
|
5
|
+
|
6
|
+
## Why?
|
7
|
+
|
8
|
+
X.509 has a number of shortcomings, both in terms of usability and formal
|
9
|
+
language theory. Ordo seeks to address these.
|
10
|
+
|
11
|
+
We realize that reinventing the wheel can be unhelpful (cue [obligatory XKCD
|
12
|
+
comic][standards-comic]) but we also feel like the wheels we're rolling on now
|
13
|
+
may be somewhat misshapen.
|
14
|
+
|
15
|
+
Ordo has been designed with the following goals in mind:
|
16
|
+
|
17
|
+
* **Human-readable**: Documents can be read and written by humans without
|
18
|
+
the need for special tools, so long as the grammar is adhered to. They should
|
19
|
+
also be pleasant to read!
|
20
|
+
* **Unambiguous**: Ordo seeks to actively identify any possible ambiguities in
|
21
|
+
the format and aggressively specify answers for what must and should be done
|
22
|
+
depending on the context. The goal is a format which is strict and rigorous
|
23
|
+
where all conforming implementations agree on all details of the format.
|
24
|
+
* **Distinguished**: The structure of an Ordo document is exactingly described
|
25
|
+
in such a way that there is one and only one possible representation of
|
26
|
+
a given set of data, such that tools given the same inputs to generate a
|
27
|
+
certificate will always produce the same document every time in a fully
|
28
|
+
deterministic manner.
|
29
|
+
* **User friendly**: As much as possible, special tools should not be needed
|
30
|
+
(but might be appreciated) to accomplish most work involving certificates.
|
31
|
+
This includes assembling certificate chains, signing certificates, and
|
32
|
+
combining certificates with private keys.
|
33
|
+
* **LANGSEC friendly**: the most popular existing certificate format, X.509,
|
34
|
+
was designed without a proper understanding of the [security applications
|
35
|
+
of formal language theory][langsec]. Ordo solves these concerns by describing
|
36
|
+
the format in terms of a [context free grammar][cfg] which is unambiguous and
|
37
|
+
should be possible to implement consistently everywhere from the description.
|
38
|
+
This project implements the Ordo format using a [Parsing Expression
|
39
|
+
Grammar][peg], specifically [kpeg][kpeg] by Evan Phoenix.
|
40
|
+
|
41
|
+
For more information on LANGSEC, please check out [Occupy Babel][occupy]:
|
42
|
+
|
43
|
+

|
44
|
+
|
45
|
+
[standards-comic]: http://xkcd.com/927/
|
46
|
+
[langsec]: http://www.cs.dartmouth.edu/~sergey/langsec/
|
47
|
+
[cfg]: https://en.wikipedia.org/wiki/Context-free_grammar
|
48
|
+
[peg]: https://en.wikipedia.org/wiki/Parsing_expression_grammar
|
49
|
+
[kpeg]: https://github.com/evanphx/kpeg
|
50
|
+
[occupy]: http://www.cs.dartmouth.edu/~sergey/langsec/occupy/
|
51
|
+
|
52
|
+
## Inspirations
|
53
|
+
|
54
|
+
Ordo is inspired by a number of sources:
|
55
|
+
|
56
|
+
* X.509
|
57
|
+
* HTTP
|
58
|
+
* JSON
|
59
|
+
* YAML
|
60
|
+
* TOML/"INI"
|
61
|
+
* Cryptonomicon
|
62
|
+
|
63
|
+
## Example
|
64
|
+
|
65
|
+
The following certificate represents a user with a Curve25519 public key:
|
66
|
+
|
67
|
+
```
|
68
|
+
-----BEGIN ORDO CERTIFICATE BLOCK-----
|
69
|
+
email: bascule@gmail.com
|
70
|
+
id-scheme: ordo.id+blake2b
|
71
|
+
public-key: ordo.public-key+curve25519:4uj6lwvvsx3bfl6novr36wdzl
|
72
|
+
r6uuovkkfrovmckd5uakwdlwiva
|
73
|
+
subject: ordo.dn://c=US/ST=California/L=San+Francisco/O=Cryptosp
|
74
|
+
here+Foundation/OU=Certificate+Department/cn=Ordo
|
75
|
+
-----END ORDO CERTIFICATE BLOCK-----
|
76
|
+
```
|
77
|
+
|
78
|
+
Some quick things to note:
|
79
|
+
* We continue to use the familiar block delimiters for the beginning
|
80
|
+
and end of the certificate
|
81
|
+
* We linewrap at 64 characters, and indent to the column matching
|
82
|
+
the length of the key name plus 2 characters (the ': ' delimiter)
|
83
|
+
* Key names are lower case, may contain the "-" character, and are
|
84
|
+
sorted in alphabetical order
|
85
|
+
* Public keys and subjects are provided as URIs
|
86
|
+
* Binary data is encoded using Base32
|
87
|
+
* Spaces, not tabs. Trailing whitespace is not allowed.
|
88
|
+
|
89
|
+
The `id-scheme` field allows us to compute a content hash which
|
90
|
+
uniquely identifies this certificate. This particular cert has chosen
|
91
|
+
to identify itself by its Blake2b hash. So its public ID is the
|
92
|
+
following URI:
|
93
|
+
|
94
|
+
```
|
95
|
+
ordo.id+blake2b:lwxgjvaph2mode3zhrogwdhobuuaej4buc5nl6kbqiubshozocda
|
96
|
+
```
|
97
|
+
|
98
|
+
This URI acts as a sort of universally unique identifier, and also
|
99
|
+
specifies a content hash that can be used to digitally sign this
|
100
|
+
particular certificate.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/ordo.rb
ADDED
data/lib/ordo/version.rb
ADDED
data/ordo.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ordo/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ordo"
|
8
|
+
spec.version = Ordo::VERSION
|
9
|
+
spec.authors = ["Tony Arcieri"]
|
10
|
+
spec.email = ["tony.arcieri@gmail.com"]
|
11
|
+
spec.description = "Tools for working with the Ordo certificate format"
|
12
|
+
spec.summary = "Ordo is a data interchange format for cryptographic identities, keys, and signatures"
|
13
|
+
spec.homepage = "https://github.com/cryptosphere/ordo"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_runtime_dependency "kpeg"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ordo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tony Arcieri
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: kpeg
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Tools for working with the Ordo certificate format
|
56
|
+
email:
|
57
|
+
- tony.arcieri@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- Gemfile
|
64
|
+
- LICENSE.txt
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- lib/ordo.rb
|
68
|
+
- lib/ordo/version.rb
|
69
|
+
- ordo.gemspec
|
70
|
+
homepage: https://github.com/cryptosphere/ordo
|
71
|
+
licenses:
|
72
|
+
- MIT
|
73
|
+
metadata: {}
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.0.3
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Ordo is a data interchange format for cryptographic identities, keys, and
|
94
|
+
signatures
|
95
|
+
test_files: []
|