ordo 0.0.0 → 0.0.1
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 +4 -4
- data/.rspec +5 -0
- data/.rubocop.yml +5 -0
- data/.travis.yml +17 -0
- data/Gemfile +4 -0
- data/Guardfile +5 -0
- data/LICENSE.txt +1 -1
- data/README.md +45 -23
- data/Rakefile +5 -1
- data/lib/ordo.rb +8 -3
- data/lib/ordo/message.rb +37 -0
- data/lib/ordo/message/parser.rb +88 -0
- data/lib/ordo/version.rb +5 -2
- data/logo.png +0 -0
- data/ordo.gemspec +16 -16
- data/spec/ordo/message/parser_spec.rb +62 -0
- data/spec/ordo/message_spec.rb +27 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/test_vectors/example_message.txt +6 -0
- data/tasks/rspec.rake +7 -0
- data/tasks/rubocop.rake +3 -0
- metadata +52 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 859241b0c0396d87392134cbcd910097b386c300
|
4
|
+
data.tar.gz: 767bbecacd458fbd61d8b1faa61c529a83396cb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f10f47305efd9b0cc9b0598b28cc4f555239147f9dec543a6cb18dc7cc45e33457f739739d972f227a22007efdf7aaccac03f15c25b98d05d08772a6a9f28ad
|
7
|
+
data.tar.gz: 5c3045c41570bdcbe9e93c42dc3227c79ecb77c6bc165260fce485d9900a8824c8ea61d9a0ebc7755e657b90bbda937d1dd725669219f03ff29e7cf804c23678
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/Guardfile
ADDED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,27 +1,48 @@
|
|
1
|
-
|
1
|
+

|
2
|
+
=========================================================
|
2
3
|
|
3
|
-
|
4
|
-
|
4
|
+
[](https://travis-ci.org/cryptosphere/ordo)
|
5
|
+
[](https://codeclimate.com/github/cryptosphere/ordo)
|
6
|
+
[](https://coveralls.io/r/cryptosphere/ordo?branch=master)
|
5
8
|
|
6
|
-
|
9
|
+
ORDO is a data interchange format intended for representing certificates and
|
10
|
+
cryptographic keys. We seek to achieve the following:
|
11
|
+
|
12
|
+
* Security
|
13
|
+
* Human Readability
|
14
|
+
* Ease of Use
|
15
|
+
* Simplicity
|
16
|
+
|
17
|
+
ORDO is being used in the following projects:
|
18
|
+
|
19
|
+
* [Cryptor](https://github.com/cryptosphere/cryptor/)
|
20
|
+
* [Confusion](https://github.com/cryptosphere/confusion/)
|
21
|
+
* [Cryptosphere](https://github.com/cryptosphere/cryptosphere/)
|
22
|
+
|
23
|
+
## The Case for a New Certificate Format
|
24
|
+
|
25
|
+
Creating a new certificate format is not a task we undertake lightly. It's
|
26
|
+
something we do as day-to-day users of X.509 certificates who strive to
|
27
|
+
understand X.509's motivations and why the system exists as it is today.
|
7
28
|
|
8
29
|
X.509 has a number of shortcomings, both in terms of usability and formal
|
9
|
-
language theory.
|
30
|
+
language theory. ORDO seeks to address these.
|
10
31
|
|
11
32
|
We realize that reinventing the wheel can be unhelpful (cue [obligatory XKCD
|
12
33
|
comic][standards-comic]) but we also feel like the wheels we're rolling on now
|
13
34
|
may be somewhat misshapen.
|
14
35
|
|
15
|
-
|
36
|
+
ORDO has been designed with the following goals in mind:
|
16
37
|
|
17
38
|
* **Human-readable**: Documents can be read and written by humans without
|
18
39
|
the need for special tools, so long as the grammar is adhered to. They should
|
19
40
|
also be pleasant to read!
|
20
|
-
* **Unambiguous**:
|
41
|
+
* **Unambiguous**: ORDO seeks to actively identify any possible ambiguities in
|
21
42
|
the format and aggressively specify answers for what must and should be done
|
22
43
|
depending on the context. The goal is a format which is strict and rigorous
|
23
44
|
where all conforming implementations agree on all details of the format.
|
24
|
-
* **Distinguished**: The structure of an
|
45
|
+
* **Distinguished**: The structure of an ORDO document is exactingly described
|
25
46
|
in such a way that there is one and only one possible representation of
|
26
47
|
a given set of data, such that tools given the same inputs to generate a
|
27
48
|
certificate will always produce the same document every time in a fully
|
@@ -32,11 +53,9 @@ Ordo has been designed with the following goals in mind:
|
|
32
53
|
combining certificates with private keys.
|
33
54
|
* **LANGSEC friendly**: the most popular existing certificate format, X.509,
|
34
55
|
was designed without a proper understanding of the [security applications
|
35
|
-
of formal language theory][langsec].
|
56
|
+
of formal language theory][langsec]. ORDO solves these concerns by describing
|
36
57
|
the format in terms of a [context free grammar][cfg] which is unambiguous and
|
37
58
|
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
59
|
|
41
60
|
For more information on LANGSEC, please check out [Occupy Babel][occupy]:
|
42
61
|
|
@@ -51,7 +70,7 @@ For more information on LANGSEC, please check out [Occupy Babel][occupy]:
|
|
51
70
|
|
52
71
|
## Inspirations
|
53
72
|
|
54
|
-
|
73
|
+
ORDO is inspired by a number of sources:
|
55
74
|
|
56
75
|
* X.509
|
57
76
|
* HTTP
|
@@ -66,12 +85,16 @@ The following certificate represents a user with a Curve25519 public key:
|
|
66
85
|
|
67
86
|
```
|
68
87
|
-----BEGIN ORDO CERTIFICATE BLOCK-----
|
69
|
-
email:
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
88
|
+
email:
|
89
|
+
root@eruditorum.org
|
90
|
+
expires:
|
91
|
+
2025-01-01T00:00:00Z
|
92
|
+
public-key:
|
93
|
+
ordo.public-key+curve25519:4uj6lwvvsx3bfl6novr36wdzlr6uuovkkf
|
94
|
+
rovmckd5uakwdlwiva
|
95
|
+
subject:
|
96
|
+
ordo.dn:///C=US/ST=California/L=San+Francisco/O=Cryptosphere+
|
97
|
+
Foundation/OU=Certificate+Department/CN=ORDO
|
75
98
|
-----END ORDO CERTIFICATE BLOCK-----
|
76
99
|
```
|
77
100
|
|
@@ -86,13 +109,12 @@ Some quick things to note:
|
|
86
109
|
* Binary data is encoded using Base32
|
87
110
|
* Spaces, not tabs. Trailing whitespace is not allowed.
|
88
111
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
following URI:
|
112
|
+
We identify individual certificates using a content hashing scheme inspired
|
113
|
+
by RFC6920 "Naming Things with Hashes". The following URI uniquely identifies
|
114
|
+
this particular certificate:
|
93
115
|
|
94
116
|
```
|
95
|
-
ordo.id
|
117
|
+
ordo.id:///blake2b;lwxgjvaph2mode3zhrogwdhobuuaej4buc5nl6kbqiubshozocda
|
96
118
|
```
|
97
119
|
|
98
120
|
This URI acts as a sort of universally unique identifier, and also
|
data/Rakefile
CHANGED
data/lib/ordo.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
-
|
1
|
+
# encoding: utf-8
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require 'ordo/version'
|
4
|
+
require 'ordo/message'
|
5
|
+
|
6
|
+
# Ordered Representation of Distinguished Objects
|
7
|
+
module ORDO
|
8
|
+
# Couldn't parse the given message
|
9
|
+
ParseError = Class.new(StandardError)
|
5
10
|
end
|
data/lib/ordo/message.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
require 'ordo/message/parser'
|
5
|
+
|
6
|
+
module ORDO
|
7
|
+
# Parse and generate valid ORDO messages
|
8
|
+
class Message
|
9
|
+
# Current version number of the message format
|
10
|
+
MESSAGE_VERSION = 0
|
11
|
+
|
12
|
+
extend Forwardable
|
13
|
+
|
14
|
+
attr_reader :fields, :body
|
15
|
+
def_delegator :@fields, :[]
|
16
|
+
|
17
|
+
def self.parse(message_bytes)
|
18
|
+
Parser.new.parse(message_bytes).to_ordo_message
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(body, fields = {})
|
22
|
+
@body = body
|
23
|
+
|
24
|
+
# TODO: validate fields
|
25
|
+
@fields = fields
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_string
|
29
|
+
result = "---ORDO MSG v#{MESSAGE_VERSION}---\r\n"
|
30
|
+
fields.each do |key, value|
|
31
|
+
result << "#{key}: #{value}\r\n"
|
32
|
+
end
|
33
|
+
result << "\r\n"
|
34
|
+
result << body
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'strscan'
|
4
|
+
|
5
|
+
module ORDO
|
6
|
+
class Message
|
7
|
+
# Parses valid ORDO messages
|
8
|
+
class Parser
|
9
|
+
attr_reader :version, :fields, :body
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@scanner = nil
|
13
|
+
@line = nil
|
14
|
+
@version = nil
|
15
|
+
@fields = nil
|
16
|
+
@body = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse(message_bytes)
|
20
|
+
@line = 1
|
21
|
+
@scanner = StringScanner.new(message_bytes)
|
22
|
+
parse_prefix
|
23
|
+
|
24
|
+
@fields = {}
|
25
|
+
parse_field until body
|
26
|
+
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_ordo_message
|
31
|
+
Message.new(body, fields)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def parse_prefix
|
37
|
+
header = @scanner.scan(/---ORDO MSG v/)
|
38
|
+
parse_error!('no ORDO MSG header') unless header
|
39
|
+
|
40
|
+
version = @scanner.scan(/[0-9]/)
|
41
|
+
parse_error!('invalid version number') unless version
|
42
|
+
@version = Integer(version, 10)
|
43
|
+
|
44
|
+
header_rest = @scanner.scan(/---\r\n/)
|
45
|
+
parse_error!('invalid ORDO MSG header') unless header_rest
|
46
|
+
|
47
|
+
@line += 1
|
48
|
+
end
|
49
|
+
|
50
|
+
# From RFC 3986
|
51
|
+
RESERVED_CHARACTERS = /[!*'();:@&=+$,\/?#\[\]]/
|
52
|
+
UNRESERVED_CHARACTERS = /[A-Za-z0-9\-_.~]/
|
53
|
+
|
54
|
+
HEADER_VALUE = /(#{RESERVED_CHARACTERS}|#{UNRESERVED_CHARACTERS})*\r\n/
|
55
|
+
|
56
|
+
def parse_field
|
57
|
+
return parse_body if @scanner.scan(/\r\n/)
|
58
|
+
|
59
|
+
name = @scanner.scan(/([A-Z][a-z]*)(-[A-Z][a-z]*)*/)
|
60
|
+
parse_error!('invalid header field name') unless name
|
61
|
+
|
62
|
+
colon = @scanner.scan(/: /)
|
63
|
+
parse_error!('expecting ": " but none found') unless colon
|
64
|
+
|
65
|
+
value = @scanner.scan(HEADER_VALUE)
|
66
|
+
parse_error!('invalid characters in header value') unless value
|
67
|
+
|
68
|
+
@fields[name] = value.chomp
|
69
|
+
@line += 1
|
70
|
+
end
|
71
|
+
|
72
|
+
def parse_body
|
73
|
+
@body = @scanner.rest
|
74
|
+
end
|
75
|
+
|
76
|
+
def parse_error(message)
|
77
|
+
buffer = @scanner.rest.split(/\r|\n/).first
|
78
|
+
buffer = "#{buffer[0, 20]}..." if buffer.length > 20
|
79
|
+
|
80
|
+
ParseError.new("#{message} (line: #{@line}): #{buffer}")
|
81
|
+
end
|
82
|
+
|
83
|
+
def parse_error!(message)
|
84
|
+
fail parse_error(message)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/lib/ordo/version.rb
CHANGED
data/logo.png
ADDED
Binary file
|
data/ordo.gemspec
CHANGED
@@ -4,22 +4,22 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'ordo/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
-
spec.version =
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.description =
|
12
|
-
spec.summary =
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
7
|
+
spec.name = 'ordo'
|
8
|
+
spec.version = ORDO::VERSION
|
9
|
+
spec.authors = ['Tony Arcieri']
|
10
|
+
spec.email = ['bascule@gmail.com']
|
11
|
+
spec.description = 'Tools for working with the Ordo certificate format'
|
12
|
+
spec.summary = 'Interchange format for cryptographic identities, keys, and signatures'
|
13
|
+
spec.homepage = 'https://github.com/cryptosphere/ordo'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split(
|
17
|
-
spec.executables = spec.files.grep(
|
18
|
-
spec.test_files = spec.files.grep(
|
19
|
-
spec.require_paths = [
|
16
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
|
+
spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(/^(test|spec|features)/)
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.
|
22
|
-
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
21
|
+
spec.add_development_dependency 'rake'
|
22
|
+
spec.add_development_dependency 'rspec'
|
23
|
+
spec.add_development_dependency 'guard-rspec'
|
24
|
+
spec.add_development_dependency 'rubocop'
|
25
25
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ORDO::Message::Parser do
|
6
|
+
let(:example_version) { 0 }
|
7
|
+
let(:example_cipher) { 'ordo.symmetric-encryption:///xsalsa20poly1305' }
|
8
|
+
let(:example_encoding) { 'binary' }
|
9
|
+
let(:example_header) do
|
10
|
+
[
|
11
|
+
'---ORDO MSG v' + example_version.to_s + '---',
|
12
|
+
'Cipher: ' + example_cipher,
|
13
|
+
'Content-Length: ' + example_body.length.to_s,
|
14
|
+
'Content-Transfer-Encoding: ' + example_encoding
|
15
|
+
].join("\r\n") + "\r\n\r\n"
|
16
|
+
end
|
17
|
+
let(:example_body) { 'Some things are better left unread' }
|
18
|
+
let(:example_message) { example_header + example_body }
|
19
|
+
|
20
|
+
it 'parses messages' do
|
21
|
+
parser = subject.parse(example_message)
|
22
|
+
|
23
|
+
expect(parser.version).to eq example_version
|
24
|
+
expect(parser.fields).to eq(
|
25
|
+
'Cipher' => example_cipher,
|
26
|
+
'Content-Length' => example_body.length.to_s,
|
27
|
+
'Content-Transfer-Encoding' => example_encoding
|
28
|
+
)
|
29
|
+
|
30
|
+
expect(parser.body).to eq example_body
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'raises ParseError if no ORDO MSG header found' do
|
34
|
+
begin
|
35
|
+
subject.parse('garbage')
|
36
|
+
rescue ORDO::ParseError => ex # rubocop:disable all
|
37
|
+
end
|
38
|
+
|
39
|
+
expect(ex).to be_a ORDO::ParseError
|
40
|
+
expect(ex.to_s).to match(/no.*header/)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'raises ParseError if version is invalid' do
|
44
|
+
begin
|
45
|
+
subject.parse('---ORDO MSG vX---')
|
46
|
+
rescue ORDO::ParseError => ex # rubocop:disable all
|
47
|
+
end
|
48
|
+
|
49
|
+
expect(ex).to be_a ORDO::ParseError
|
50
|
+
expect(ex.to_s).to match(/invalid version/)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'raises ParseError if invalid fields are encountered' do
|
54
|
+
begin
|
55
|
+
subject.parse("---ORDO MSG v0---\r\nfoo: bar\r\n\r\n")
|
56
|
+
rescue ORDO::ParseError => ex # rubocop:disable all
|
57
|
+
end
|
58
|
+
|
59
|
+
expect(ex).to be_a ORDO::ParseError
|
60
|
+
expect(ex.to_s).to match(/invalid.*field name/)
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe ORDO::Message do
|
6
|
+
let(:example_cipher) { 'ordo.symmetric-encryption:///xsalsa20poly1305' }
|
7
|
+
let(:example_encoding) { 'binary' }
|
8
|
+
let(:example_body) { 'Some things are better left unread' }
|
9
|
+
|
10
|
+
it 'parses messages' do
|
11
|
+
message = described_class.parse test_vector('example_message.txt')
|
12
|
+
expect(message['Cipher']).to eq example_cipher
|
13
|
+
expect(message['Content-Transfer-Encoding']).to eq example_encoding
|
14
|
+
expect(message.body).to eq example_body
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'emits messages' do
|
18
|
+
message = described_class.new(
|
19
|
+
example_body,
|
20
|
+
'Cipher' => example_cipher,
|
21
|
+
'Content-Length' => example_body.bytesize,
|
22
|
+
'Content-Transfer-Encoding' => 'binary'
|
23
|
+
)
|
24
|
+
|
25
|
+
expect(message.to_string).to eq test_vector('example_message.txt')
|
26
|
+
end
|
27
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'coveralls'
|
5
|
+
Coveralls.wear!
|
6
|
+
|
7
|
+
require 'bundler/setup'
|
8
|
+
require 'ordo'
|
9
|
+
|
10
|
+
def test_vector(name)
|
11
|
+
test_vectors_dir = File.expand_path('../test_vectors', __FILE__)
|
12
|
+
File.read File.join(test_vectors_dir, name)
|
13
|
+
end
|
data/tasks/rspec.rake
ADDED
data/tasks/rubocop.rake
ADDED
metadata
CHANGED
@@ -1,72 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ordo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Arcieri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
|
-
type: :
|
20
|
+
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: guard-rspec
|
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
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - ">="
|
46
60
|
- !ruby/object:Gem::Version
|
47
61
|
version: '0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
description: Tools for working with the Ordo certificate format
|
56
70
|
email:
|
57
|
-
-
|
71
|
+
- bascule@gmail.com
|
58
72
|
executables: []
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
|
-
- .gitignore
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
|
+
- ".rubocop.yml"
|
79
|
+
- ".travis.yml"
|
63
80
|
- Gemfile
|
81
|
+
- Guardfile
|
64
82
|
- LICENSE.txt
|
65
83
|
- README.md
|
66
84
|
- Rakefile
|
67
85
|
- lib/ordo.rb
|
86
|
+
- lib/ordo/message.rb
|
87
|
+
- lib/ordo/message/parser.rb
|
68
88
|
- lib/ordo/version.rb
|
89
|
+
- logo.png
|
69
90
|
- ordo.gemspec
|
91
|
+
- spec/ordo/message/parser_spec.rb
|
92
|
+
- spec/ordo/message_spec.rb
|
93
|
+
- spec/spec_helper.rb
|
94
|
+
- spec/test_vectors/example_message.txt
|
95
|
+
- tasks/rspec.rake
|
96
|
+
- tasks/rubocop.rake
|
70
97
|
homepage: https://github.com/cryptosphere/ordo
|
71
98
|
licenses:
|
72
99
|
- MIT
|
@@ -77,19 +104,22 @@ require_paths:
|
|
77
104
|
- lib
|
78
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
79
106
|
requirements:
|
80
|
-
- -
|
107
|
+
- - ">="
|
81
108
|
- !ruby/object:Gem::Version
|
82
109
|
version: '0'
|
83
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
111
|
requirements:
|
85
|
-
- -
|
112
|
+
- - ">="
|
86
113
|
- !ruby/object:Gem::Version
|
87
114
|
version: '0'
|
88
115
|
requirements: []
|
89
116
|
rubyforge_project:
|
90
|
-
rubygems_version: 2.
|
117
|
+
rubygems_version: 2.2.2
|
91
118
|
signing_key:
|
92
119
|
specification_version: 4
|
93
|
-
summary:
|
94
|
-
|
95
|
-
|
120
|
+
summary: Interchange format for cryptographic identities, keys, and signatures
|
121
|
+
test_files:
|
122
|
+
- spec/ordo/message/parser_spec.rb
|
123
|
+
- spec/ordo/message_spec.rb
|
124
|
+
- spec/spec_helper.rb
|
125
|
+
- spec/test_vectors/example_message.txt
|