ordo 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e890f80f24a48de13e03ddb187dddfc55f43b72e
4
- data.tar.gz: cc31473804b28bd97c56322e10c38601b77fb68b
3
+ metadata.gz: 859241b0c0396d87392134cbcd910097b386c300
4
+ data.tar.gz: 767bbecacd458fbd61d8b1faa61c529a83396cb6
5
5
  SHA512:
6
- metadata.gz: b52f17efb54461bdf5b3ff16f7e7f8915e8c3609d2501869862324a19f0712f3e9e2e2505c1a7502aa7bff25ff6c21f5527f55b38d7e6fc8a2833484e28387f6
7
- data.tar.gz: 47eb0af405a792ffe5858f82086995845dfc5e40171181df477ac715110210b136d90fb7119ca31ea3b4b624668d99b75a99cb773c446c1c07f6a610f4df14ac
6
+ metadata.gz: 2f10f47305efd9b0cc9b0598b28cc4f555239147f9dec543a6cb18dc7cc45e33457f739739d972f227a22007efdf7aaccac03f15c25b98d05d08772a6a9f28ad
7
+ data.tar.gz: 5c3045c41570bdcbe9e93c42dc3227c79ecb77c6bc165260fce485d9900a8824c8ea61d9a0ebc7755e657b90bbda937d1dd725669219f03ff29e7cf804c23678
data/.rspec ADDED
@@ -0,0 +1,5 @@
1
+ --color
2
+ --format documentation
3
+ --backtrace
4
+ --order random
5
+ --warnings
data/.rubocop.yml ADDED
@@ -0,0 +1,5 @@
1
+ LineLength:
2
+ Max: 99
3
+
4
+ Encoding:
5
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ rvm:
2
+ - 1.9.3
3
+ - 2.0.0
4
+ - 2.1.2
5
+ - ruby-head
6
+ - jruby
7
+ - jruby-head
8
+ - rbx-2
9
+
10
+ matrix:
11
+ allow_failures:
12
+ - rvm: ruby-head
13
+ - rvm: jruby-head
14
+ - rvm: rbx-2
15
+
16
+ notifications:
17
+ irc: "irc.freenode.org#cryptosphere"
data/Gemfile CHANGED
@@ -1,4 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ group :test do
4
+ gem 'coveralls', require: false
5
+ end
6
+
3
7
  # Specify your gem's dependencies in ordo.gemspec
4
8
  gemspec
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ guard :rspec do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Tony Arcieri
1
+ Copyright (c) 2014 Tony Arcieri
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,27 +1,48 @@
1
- # Ordo (Ordered Representation for Disinguished Objects)
1
+ ![ORDO: Ordered Representation for Distinguished Objects](https://raw.githubusercontent.com/cryptosphere/ordo/master/logo.png)
2
+ =========================================================
2
3
 
3
- Ordo is a data interchange format with the main intended use case of
4
- representing certificates and cryptographic keys.
4
+ [![Build Status](https://travis-ci.org/cryptosphere/ordo.png?branch=master)](https://travis-ci.org/cryptosphere/ordo)
5
+ [![Code Climate](https://codeclimate.com/github/cryptosphere/ordo.png)](https://codeclimate.com/github/cryptosphere/ordo)
6
+ [![Coverage
7
+ Status](https://coveralls.io/repos/cryptosphere/ordo/badge.png?branch=master)](https://coveralls.io/r/cryptosphere/ordo?branch=master)
5
8
 
6
- ## Why?
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. Ordo seeks to address these.
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
- Ordo has been designed with the following goals in mind:
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**: Ordo seeks to actively identify any possible ambiguities in
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 Ordo document is exactingly described
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]. Ordo solves these concerns by describing
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
- Ordo is inspired by a number of sources:
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: 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
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
- 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:
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+blake2b:lwxgjvaph2mode3zhrogwdhobuuaej4buc5nl6kbqiubshozocda
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
@@ -1 +1,5 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+
3
+ Dir['tasks/**/*.rake'].each { |task| load task }
4
+
5
+ task default: %w(spec rubocop)
data/lib/ordo.rb CHANGED
@@ -1,5 +1,10 @@
1
- require "ordo/version"
1
+ # encoding: utf-8
2
2
 
3
- module Ordo
4
- # Your code goes here...
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
@@ -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
@@ -1,3 +1,6 @@
1
- module Ordo
2
- VERSION = "0.0.0"
1
+ # encoding: utf-8
2
+
3
+ # Ordered Representation of Distinguished Objects
4
+ module ORDO
5
+ VERSION = '0.0.1'
3
6
  end
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 = "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"
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(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
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.add_runtime_dependency "kpeg"
22
-
23
- spec.add_development_dependency "bundler", "~> 1.3"
24
- spec.add_development_dependency "rake"
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
@@ -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
@@ -0,0 +1,6 @@
1
+ ---ORDO MSG v0---
2
+ Cipher: ordo.symmetric-encryption:///xsalsa20poly1305
3
+ Content-Length: 34
4
+ Content-Transfer-Encoding: binary
5
+
6
+ Some things are better left unread
data/tasks/rspec.rake ADDED
@@ -0,0 +1,7 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new
4
+
5
+ RSpec::Core::RakeTask.new(:rcov) do |task|
6
+ task.rcov = true
7
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubocop/rake_task'
2
+
3
+ Rubocop::RakeTask.new
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.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: 2013-10-10 00:00:00.000000000 Z
11
+ date: 2014-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: kpeg
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: :runtime
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: bundler
28
+ name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
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: '1.3'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
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
- - tony.arcieri@gmail.com
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.0.3
117
+ rubygems_version: 2.2.2
91
118
  signing_key:
92
119
  specification_version: 4
93
- summary: Ordo is a data interchange format for cryptographic identities, keys, and
94
- signatures
95
- test_files: []
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