codtls 0.0.1.alpha

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.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +12 -0
  3. data/.yardopts +4 -0
  4. data/Gemfile +12 -0
  5. data/LICENSE +21 -0
  6. data/README.md +78 -0
  7. data/Rakefile +29 -0
  8. data/lib/codtls.rb +186 -0
  9. data/lib/codtls/abstract_session.rb +179 -0
  10. data/lib/codtls/alert.rb +64 -0
  11. data/lib/codtls/decrypt.rb +72 -0
  12. data/lib/codtls/ecc.rb +26 -0
  13. data/lib/codtls/encrypt.rb +29 -0
  14. data/lib/codtls/h_changecipherspec.rb +25 -0
  15. data/lib/codtls/h_chello.rb +79 -0
  16. data/lib/codtls/h_content.rb +57 -0
  17. data/lib/codtls/h_finished.rb +30 -0
  18. data/lib/codtls/h_keyexchange.rb +131 -0
  19. data/lib/codtls/h_shello.rb +51 -0
  20. data/lib/codtls/h_shellodone.rb +22 -0
  21. data/lib/codtls/h_type.rb +22 -0
  22. data/lib/codtls/h_verify.rb +30 -0
  23. data/lib/codtls/handshake.rb +173 -0
  24. data/lib/codtls/models/codtls_connection.rb +3 -0
  25. data/lib/codtls/models/codtls_device.rb +3 -0
  26. data/lib/codtls/prf.rb +40 -0
  27. data/lib/codtls/pskdb.rb +104 -0
  28. data/lib/codtls/ram_session.rb +214 -0
  29. data/lib/codtls/rampskdb.rb +87 -0
  30. data/lib/codtls/record.rb +202 -0
  31. data/lib/codtls/session.rb +284 -0
  32. data/lib/codtls/version.rb +3 -0
  33. data/lib/generators/codtls/codtls_generator.rb +56 -0
  34. data/lib/generators/codtls/templates/create_codtls_connections.rb +15 -0
  35. data/lib/generators/codtls/templates/create_codtls_devices.rb +11 -0
  36. data/test/test_codtls.rb +75 -0
  37. data/test/test_ecc.rb +44 -0
  38. data/test/test_h_chello.rb +40 -0
  39. data/test/test_h_content.rb +59 -0
  40. data/test/test_h_keyexchange.rb +36 -0
  41. data/test/test_helper.rb +3 -0
  42. data/test/test_pskdb.rb +37 -0
  43. data/test/test_ram_session.rb +131 -0
  44. data/test/test_rampskdb.rb +26 -0
  45. data/test/test_record.rb +128 -0
  46. data/test/test_send_recv.rb +178 -0
  47. data/test/test_session.rb +164 -0
  48. metadata +303 -0
@@ -0,0 +1,178 @@
1
+ require 'test_helper'
2
+ require 'codtls'
3
+
4
+ # Testclass
5
+ class CoDTLSSendRecvTest < Minitest::Test
6
+ DB_FILE = 'sendrecvtest.sqlite'
7
+ KEY = 'ABCDEFGHIJKLMNOP'
8
+ IV = 'ABCD'
9
+
10
+ def setup
11
+ create_sqlite_db(DB_FILE)
12
+ SQLite3::Database.new(DB_FILE)
13
+ ActiveRecord::Base.establish_connection(
14
+ adapter: 'sqlite3',
15
+ database: DB_FILE)
16
+ ActiveRecord::Base.connection
17
+ ActiveRecord::Migration.verbose = false
18
+ ActiveRecord::Migrator.migrate('db/migrate')
19
+ end
20
+
21
+ def teardown
22
+ #CoDTLS::Session.clear_all
23
+ ActiveRecord::Base.remove_connection
24
+ FileUtils.rm(DB_FILE)
25
+ end
26
+
27
+ def test_send
28
+ # Setup - begin
29
+ session = CoDTLS::Session.new('127.0.0.1')
30
+
31
+ r = UDPSocket.new
32
+ r.bind('127.0.0.1', 5684)
33
+
34
+ s = CoDTLS::SecureSocket.new
35
+ s.connect('127.0.0.1', 5684)
36
+ # Setup - end
37
+
38
+ # assert_raises(CoDTLS::SecureSocketError) { s.send('Hallo Welt!', 0) }
39
+
40
+ session.enable_handshake
41
+
42
+ s.send('Hallo Welt!', 0)
43
+ h, d = CoDTLS::Record.parse(r.recvfrom(50)[0])
44
+ check_header('Send 1', h, :handshake, 0, 1)
45
+ assert_equal('Hallo Welt!', d)
46
+
47
+ session.disable_handshake
48
+
49
+ # assert_raises(CoDTLS::SecureSocketError) { s.send('Hallo Welt!', 0) }
50
+
51
+ session.enable_handshake
52
+
53
+ s.send('Hallo Welt!', 0)
54
+ h, d = CoDTLS::Record.parse(r.recvfrom(50)[0])
55
+ check_header('Send 2', h, :handshake, 0, 2)
56
+ assert_equal('Hallo Welt!', d)
57
+
58
+ s.send('Hallo Welt!', 0)
59
+ h, d = CoDTLS::Record.parse(r.recvfrom(50)[0])
60
+ check_header('Send 3', h, :handshake, 0, 3)
61
+ assert_equal('Hallo Welt!', d)
62
+
63
+ session.key_block = KEY * 2 + IV * 2
64
+
65
+ s.send('Hallo Welt!', 0)
66
+ h, d = CoDTLS::Record.parse(r.recvfrom(50)[0])
67
+ check_header('Send 4', h, :handshake, 0, 4)
68
+ assert_equal('Hallo Welt!', d)
69
+
70
+ ccm = OpenSSL::CCM.new('AES', KEY, 8)
71
+ session.increase_epoch
72
+
73
+ session.disable_handshake
74
+
75
+ s.send('Hallo Welt!', 0)
76
+ h, d = CoDTLS::Record.parse(r.recvfrom(50)[0])
77
+ check_header('Send 5', h, :appdata, 1, 1)
78
+ c = ccm.encrypt('Hallo Welt!', IV + "\x00\x01\x00\x00\x00\x00\x00\x01")
79
+ assert_equal(c.unpack('H*')[0], d.unpack('H*')[0])
80
+
81
+ s.send('Hallo Welt!', 0)
82
+ h, d = CoDTLS::Record.parse(r.recvfrom(50)[0])
83
+ check_header('Send 6', h, :appdata, 1, 2)
84
+ c = ccm.encrypt('Hallo Welt!', IV + "\x00\x01\x00\x00\x00\x00\x00\x02")
85
+ assert_equal(c.unpack('H*')[0], d.unpack('H*')[0])
86
+
87
+ session.enable_handshake
88
+
89
+ s.send('Hallo Welt!', 0)
90
+ h, d = CoDTLS::Record.parse(r.recvfrom(50)[0])
91
+ check_header('Send 7', h, :handshake, 1, 3)
92
+ c = ccm.encrypt('Hallo Welt!', IV + "\x00\x01\x00\x00\x00\x00\x00\x03")
93
+ assert_equal(c.unpack('H*')[0], d.unpack('H*')[0])
94
+
95
+ s.send('Hallo Welt!', 0)
96
+ h, d = CoDTLS::Record.parse(r.recvfrom(50)[0])
97
+ check_header('Send 8', h, :handshake, 1, 4)
98
+ c = ccm.encrypt('Hallo Welt!', IV + "\x00\x01\x00\x00\x00\x00\x00\x04")
99
+ assert_equal(c.unpack('H*')[0], d.unpack('H*')[0])
100
+
101
+ session.disable_handshake
102
+
103
+ s.send('Hallo Welt!', 0)
104
+ h, d = CoDTLS::Record.parse(r.recvfrom(50)[0])
105
+ check_header('Send 9', h, :appdata, 1, 5)
106
+ c = ccm.encrypt('Hallo Welt!', IV + "\x00\x01\x00\x00\x00\x00\x00\x05")
107
+ assert_equal(c.unpack('H*')[0], d.unpack('H*')[0])
108
+
109
+ s.close
110
+ r.close
111
+ end
112
+
113
+ =begin
114
+ def test_receive
115
+ # Setup - begin
116
+ session = CoDTLS::Session.new('127.0.0.1')
117
+ session.enable_handshake
118
+
119
+ r = CoDTLS::SecureSocket.new
120
+ r.bind('127.0.0.1', 0)
121
+ r.connect('127.0.0.1', 5684)
122
+
123
+ s = UDPSocket.new
124
+ s.bind('127.0.0.1', 5684)
125
+
126
+ r.send('find Port', 0)
127
+ port = s.recvfrom(12)[1][1]
128
+ # s.connect('127.0.0.1', s.recvfrom(12)[1][1])
129
+
130
+ session.disable_handshake
131
+ # Setup - end
132
+
133
+ h = CoDTLS::Record.new(:appdata, 0, 1)
134
+ s.send(h.to_wire + 'Hallo Welt!', 0, '127.0.0.1', port)
135
+ # ---
136
+ d, = r.recvfrom(5)
137
+ assert_equal('', d)
138
+ # ---
139
+ h, d = CoDTLS::Record.parse(s.recvfrom(20)[0])
140
+ check_header('Receive 1', h, :alert, 0, 2)
141
+ assert_equal("\x02\x0a", d) # fatal (2), unexpected_message (10)
142
+
143
+ h = CoDTLS::Record.new(:handshake, 0, 1)
144
+ s.send(h.to_wire + 'Hallo Welt!', 0, '127.0.0.1', port)
145
+ d, = r.recvfrom(5)
146
+ assert_equal('Hallo', d)
147
+
148
+ h = CoDTLS::Record.new(:handshake, 0, 2)
149
+ s.send(h.to_wire + 'Hallo Welt!', 0, '127.0.0.1', port)
150
+ d, = r.recvfrom(20)
151
+ assert_equal('Hallo Welt!', d)
152
+
153
+ h = CoDTLS::Record.new(:handshake, 0, 104)
154
+ s.send(h.to_wire + 'Hallo Welt!', 0, '127.0.0.1', port)
155
+ # ---
156
+ d, = r.recvfrom(5)
157
+ assert_equal('', d)
158
+ # ---
159
+ h, d = CoDTLS::Record.parse(s.recvfrom(20)[0])
160
+ check_header('Receive 2', h, :alert, 0, 3)
161
+ assert_equal("\x02\x32", d) # fatal (2), decode_error (50)
162
+
163
+ h = CoDTLS::Record.new(:handshake, 0, 103)
164
+ s.send(h.to_wire + 'Hallo Welt!', 0, '127.0.0.1', port)
165
+ d, = r.recvfrom(11)
166
+ assert_equal('Hallo Welt!', d)
167
+
168
+ s.close
169
+ r.close
170
+ end
171
+ =end
172
+
173
+ def check_header(fail_msg, header, type, epoch, seq_num = nil)
174
+ assert_equal(type, header.type, fail_msg)
175
+ assert_equal(epoch, header.epoch, fail_msg)
176
+ assert_equal(seq_num, header.seq_num, fail_msg) unless seq_num.nil?
177
+ end
178
+ end
@@ -0,0 +1,164 @@
1
+ require 'test_helper'
2
+ require 'codtls/abstract_session'
3
+ require 'codtls/session'
4
+
5
+ # Testclass
6
+ class CoDTLSSessionTest < Minitest::Test
7
+ def setup
8
+ fail CoDTLS::SessionError 'testdatabase already exists' if File.exist?(
9
+ 'testdatabase.sqlite')
10
+ SQLite3::Database.new('testdatabase.sqlite')
11
+ ActiveRecord::Base.establish_connection(
12
+ adapter: 'sqlite3',
13
+ database: 'testdatabase.sqlite')
14
+ ActiveRecord::Base.connection
15
+ ActiveRecord::Migration.verbose = false # debug messages
16
+ ActiveRecord::Migrator.migrate 'db/migrate'
17
+ CoDTLS::Session.clear_all # only needed here, it is not normal that the
18
+ # database gets changed while the program is
19
+ # still running
20
+ @session = CoDTLS::Session.new('127.0.0.1')
21
+ end
22
+
23
+ def teardown
24
+ @session.clear
25
+ ActiveRecord::Base.remove_connection
26
+ FileUtils.rm('testdatabase.sqlite') if File.exist?('testdatabase.sqlite')
27
+ end
28
+
29
+ # check values, set everything, check values, clear, check values,
30
+ # create new session, check values
31
+ def test_clear
32
+ assert_equal(nil, @session.id)
33
+ assert_equal(0, @session.epoch)
34
+ assert_equal(true, @session.check_seq(1))
35
+ assert_equal(1, @session.seq)
36
+ assert_equal(nil, @session.key_block)
37
+ assert_equal(false, @session.handshake?)
38
+
39
+ @session.id = 'ABCDEFGH'
40
+ @session.key_block = 'ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDABCD'
41
+ @session.increase_epoch
42
+ @session.seq = 5
43
+ @session.enable_handshake
44
+
45
+ assert_equal('ABCDEFGH', @session.id)
46
+ assert_equal(1, @session.epoch)
47
+ assert_equal(true, @session.check_seq(6))
48
+ assert_equal(1, @session.seq)
49
+ assert_equal('ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDABCD',
50
+ @session.key_block)
51
+ assert_equal(true, @session.handshake?)
52
+
53
+ @session.clear
54
+ entry = nil
55
+ ActiveRecord::Base.connection_pool.with_connection do
56
+ entry = CODTLSConnection.find_by_ip('127.0.0.1')
57
+ end
58
+ assert_equal(nil, entry)
59
+ assert_equal([], CoDTLS::Session.ip_list)
60
+
61
+ assert_equal(nil, @session.id)
62
+ assert_equal(0, @session.epoch)
63
+ assert_equal(true, @session.check_seq(1))
64
+ assert_equal(1, @session.seq)
65
+ assert_equal(nil, @session.key_block)
66
+ assert_equal(false, @session.handshake?)
67
+ end
68
+
69
+ # get_epoch and increase_epoch test
70
+ def test_epoch
71
+ assert_equal(nil, @session.id)
72
+ assert_equal(0, @session.epoch)
73
+ assert_equal(true, @session.check_seq(1))
74
+ assert_equal(1, @session.seq)
75
+ assert_equal(nil, @session.key_block)
76
+ assert_equal(false, @session.handshake?)
77
+
78
+ @session.seq
79
+ @session.seq
80
+ @session.seq = 50
81
+ assert_raises(CoDTLS::SessionError) { @session.increase_epoch }
82
+
83
+ @session.key_block = 'ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDABCD'
84
+ assert_equal(nil, @session.key_block)
85
+
86
+ @session.increase_epoch
87
+ assert_equal(1, @session.epoch)
88
+ assert_equal(true, @session.check_seq(1))
89
+ assert_equal(1, @session.seq)
90
+ assert_equal('ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDABCD',
91
+ @session.key_block)
92
+ end
93
+
94
+ # get_key_block and add_key_block tests, testing the overwriting off
95
+ # new keyblocks and switching keyblocks when the epoch is increased
96
+ def test_key_block
97
+ assert_equal(nil, @session.key_block)
98
+ exception = assert_raises(CoDTLS::SessionError) do
99
+ @session.key_block = 'this_key_block_is_too_small'
100
+ end
101
+ assert_equal('key blocks have to be 40 byte long', exception.message)
102
+ @session.key_block = 'key_block_with_fourty_bytes_number_00001'
103
+ assert_equal(nil, @session.key_block)
104
+ @session.increase_epoch
105
+ assert_equal('key_block_with_fourt' \
106
+ 'y_bytes_number_00001', @session.key_block)
107
+ @session.key_block = 'key_block_with_fourty_bytes_number_00002'
108
+ @session.key_block = 'key_block_with_fourty_bytes_number_00003'
109
+ assert_equal('key_block_with_fourt' \
110
+ 'y_bytes_number_00001', @session.key_block)
111
+ @session.increase_epoch
112
+ assert_equal('key_block_with_fourt' \
113
+ 'y_bytes_number_00003', @session.key_block)
114
+ end
115
+
116
+ # enable_handshake and dissable_handshake tests.
117
+ def test_handshake
118
+ assert_equal(false, @session.handshake?)
119
+ @session.enable_handshake
120
+ assert_equal(true, @session.handshake?)
121
+ @session.enable_handshake
122
+ assert_equal(true, @session.handshake?)
123
+ @session.disable_handshake
124
+ assert_equal(false, @session.handshake?)
125
+ end
126
+
127
+ # get_seq and check_seq tests, testing the check_seq ranges and the
128
+ # incrementing of get_seq.
129
+ def test_seq
130
+ assert_equal(1, @session.seq)
131
+ assert_equal(2, @session.seq)
132
+ assert_equal(3, @session.seq)
133
+
134
+ # 1 is expected, so -9 ... 101 are valid values
135
+ assert_equal(false, @session.check_seq(-10))
136
+ assert_equal(false, @session.check_seq(102))
137
+ assert_equal(true, @session.check_seq(-9))
138
+ assert_equal(true, @session.check_seq(-1))
139
+ assert_equal(true, @session.check_seq(0))
140
+ assert_equal(true, @session.check_seq(1))
141
+ assert_equal(true, @session.check_seq(101))
142
+
143
+ @session.seq = 1
144
+ (2..100).each do |n|
145
+ assert_equal(true, @session.check_seq(n))
146
+ @session.seq = n
147
+ end
148
+ # 101 is expected, so max allowed value is 201
149
+ assert_equal(true, @session.check_seq(201))
150
+ assert_equal(false, @session.check_seq(202))
151
+ end
152
+
153
+ def test_multiple_sessions
154
+ new_session = CoDTLS::Session.new('127.0.0.1')
155
+ assert_equal(1, CoDTLS::Session.ip_list.size)
156
+ assert_equal(false, new_session.handshake?)
157
+ assert_equal(false, @session.handshake?)
158
+ new_session.enable_handshake
159
+ assert_equal(true, new_session.handshake?)
160
+ assert_equal(true, @session.handshake?)
161
+ new_session.clear
162
+ assert_equal(false, @session.handshake?)
163
+ end
164
+ end
metadata ADDED
@@ -0,0 +1,303 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: codtls
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.alpha
5
+ platform: ruby
6
+ authors:
7
+ - Lars Schmertmann
8
+ - Jens Trillmann
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-05-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: coap
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: openssl-ccm
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.1'
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: 1.1.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - "~>"
43
+ - !ruby/object:Gem::Version
44
+ version: '1.1'
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.1
48
+ - !ruby/object:Gem::Dependency
49
+ name: openssl-cmac
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 2.0.0
58
+ type: :runtime
59
+ prerelease: false
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: '2.0'
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 2.0.0
68
+ - !ruby/object:Gem::Dependency
69
+ name: sqlite3
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.3'
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: 1.3.9
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '1.3'
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: 1.3.9
88
+ - !ruby/object:Gem::Dependency
89
+ name: activerecord
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '4.0'
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: 4.0.0
98
+ type: :runtime
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '4.0'
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: 4.0.0
108
+ - !ruby/object:Gem::Dependency
109
+ name: rake
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '10.2'
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 10.2.2
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '10.2'
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 10.2.2
128
+ - !ruby/object:Gem::Dependency
129
+ name: rdoc
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '4.1'
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: 4.1.1
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '4.1'
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: 4.1.1
148
+ - !ruby/object:Gem::Dependency
149
+ name: yard
150
+ requirement: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '0.8'
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: 0.8.7.3
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '0.8'
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: 0.8.7.3
168
+ - !ruby/object:Gem::Dependency
169
+ name: rubocop
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '0.18'
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: 0.18.1
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: '0.18'
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: 0.18.1
188
+ - !ruby/object:Gem::Dependency
189
+ name: coveralls
190
+ requirement: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '0.7'
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: 0.7.0
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - "~>"
203
+ - !ruby/object:Gem::Version
204
+ version: '0.7'
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: 0.7.0
208
+ description: DTLS with stateless header compression and CoAP based handshake.
209
+ email:
210
+ - SmallLars@t-online.de
211
+ - jtrillma@informatik.uni-bremen.de
212
+ executables: []
213
+ extensions: []
214
+ extra_rdoc_files:
215
+ - README.md
216
+ - LICENSE
217
+ files:
218
+ - ".rubocop.yml"
219
+ - ".yardopts"
220
+ - Gemfile
221
+ - LICENSE
222
+ - README.md
223
+ - Rakefile
224
+ - lib/codtls.rb
225
+ - lib/codtls/abstract_session.rb
226
+ - lib/codtls/alert.rb
227
+ - lib/codtls/decrypt.rb
228
+ - lib/codtls/ecc.rb
229
+ - lib/codtls/encrypt.rb
230
+ - lib/codtls/h_changecipherspec.rb
231
+ - lib/codtls/h_chello.rb
232
+ - lib/codtls/h_content.rb
233
+ - lib/codtls/h_finished.rb
234
+ - lib/codtls/h_keyexchange.rb
235
+ - lib/codtls/h_shello.rb
236
+ - lib/codtls/h_shellodone.rb
237
+ - lib/codtls/h_type.rb
238
+ - lib/codtls/h_verify.rb
239
+ - lib/codtls/handshake.rb
240
+ - lib/codtls/models/codtls_connection.rb
241
+ - lib/codtls/models/codtls_device.rb
242
+ - lib/codtls/prf.rb
243
+ - lib/codtls/pskdb.rb
244
+ - lib/codtls/ram_session.rb
245
+ - lib/codtls/rampskdb.rb
246
+ - lib/codtls/record.rb
247
+ - lib/codtls/session.rb
248
+ - lib/codtls/version.rb
249
+ - lib/generators/codtls/codtls_generator.rb
250
+ - lib/generators/codtls/templates/create_codtls_connections.rb
251
+ - lib/generators/codtls/templates/create_codtls_devices.rb
252
+ - test/test_codtls.rb
253
+ - test/test_ecc.rb
254
+ - test/test_h_chello.rb
255
+ - test/test_h_content.rb
256
+ - test/test_h_keyexchange.rb
257
+ - test/test_helper.rb
258
+ - test/test_pskdb.rb
259
+ - test/test_ram_session.rb
260
+ - test/test_rampskdb.rb
261
+ - test/test_record.rb
262
+ - test/test_send_recv.rb
263
+ - test/test_session.rb
264
+ homepage: https://github.com/SmallLars/codtls
265
+ licenses:
266
+ - MIT
267
+ metadata: {}
268
+ post_install_message: Thanks for installing!
269
+ rdoc_options:
270
+ - "-x"
271
+ - test/data_*
272
+ require_paths:
273
+ - lib
274
+ required_ruby_version: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: 2.1.0
279
+ required_rubygems_version: !ruby/object:Gem::Requirement
280
+ requirements:
281
+ - - ">"
282
+ - !ruby/object:Gem::Version
283
+ version: 1.3.1
284
+ requirements: []
285
+ rubyforge_project:
286
+ rubygems_version: 2.2.2
287
+ signing_key:
288
+ specification_version: 4
289
+ summary: DTLS with CoAP based handshake.
290
+ test_files:
291
+ - test/test_codtls.rb
292
+ - test/test_ecc.rb
293
+ - test/test_h_content.rb
294
+ - test/test_h_keyexchange.rb
295
+ - test/test_send_recv.rb
296
+ - test/test_pskdb.rb
297
+ - test/test_ram_session.rb
298
+ - test/test_session.rb
299
+ - test/test_helper.rb
300
+ - test/test_h_chello.rb
301
+ - test/test_rampskdb.rb
302
+ - test/test_record.rb
303
+ has_rdoc: