rack-tctp 0.9.5 → 0.9.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6b91b55890f0a473f132a0e6c2eec7fe5aa3254
4
- data.tar.gz: 8ac625d2bb5a6576a5cc164fed0b7a928419d129
3
+ metadata.gz: 1fb5bcf11c0cacc00595f49b429d6810b646f62a
4
+ data.tar.gz: 469afac39fcc7dd72568c9c5f0c62c8309e5e7b6
5
5
  SHA512:
6
- metadata.gz: d93b73d45ac80ad26c8c6f5d1b10964cf6f07d47a7a4a4fde519d96d7206c74613cae47301658d6e2d50ae44ed658666c8eb6bc5323b4c9d3eba15f8543577a8
7
- data.tar.gz: b68e836d5e51dd6cfbc10ff89b7b67f98ed3adeee36f34faabab4dc117d7bcdbe61bae9bd4a36f1177f51b80ce40b61335ce60927381d6636de71dbe4375330c
6
+ metadata.gz: 8a47f449b3ddb7da03987b77624b936c88875a46d9d64ec5b6016d070bf287d1a6b7c868ab0e92f74070c115f5219bb06c79d84bfebb6ef201dadd4677572808
7
+ data.tar.gz: b8cfe98bbe089fbfa476146de64e8458e7b5e9e478190b8539588bbb5f0c83ecb770966074fc00be291ccddc86ec1b0fdbcaefddcfd36f69541c31b5519ba145
@@ -18,8 +18,37 @@ class Rack::TCTP::HALEC
18
18
  # A server or client certificate (if any)
19
19
  attr_reader :certificate
20
20
 
21
+ # The thread for encrypting and decrypting data of this HALEC
22
+ attr_reader :async_thread
23
+
24
+ # The queue for encrypting and decrypting data
25
+ # @return [Queue] The async queue
26
+ attr_reader :async_queue
27
+
21
28
  def initialize(options = {})
22
29
  @url = options[:url] || nil
30
+
31
+ @async_queue = Queue.new
32
+
33
+ Thread.new do
34
+ begin
35
+ while true
36
+ item = @async_queue.pop
37
+
38
+ case item[0]
39
+ when :encrypt
40
+ item[2].call encrypt_data(item[1])
41
+ when :decrypt
42
+ item[2].call decrypt_data(item[1])
43
+ when :call
44
+ item[2].call
45
+ end
46
+ end
47
+ rescue Exception => e
48
+ #TODO Handle HALEC encryption thread shutdown
49
+ puts e
50
+ end
51
+ end
23
52
  end
24
53
 
25
54
  # Encrypts +plaintext+ data and either returns the encrypted data or calls a block with it.
@@ -28,21 +57,33 @@ class Rack::TCTP::HALEC
28
57
  # @yield Gives the encrypted data to the block
29
58
  # @yieldparam [String] The encrypted data
30
59
  def encrypt_data(plaintext, &encrypted)
31
- @engine.write plaintext
60
+ written = @engine.write plaintext
61
+
62
+ if written < plaintext.length
63
+ exit -1
64
+ end
65
+
66
+ read_data = []
32
67
 
33
68
  while(read_chunk = @engine.extract)
34
- if(block_given?)
35
- encrypted.call read_chunk
36
- else
37
- if read_data
38
- read_data.write read_chunk
39
- else
40
- read_data = StringIO.new(read_chunk)
41
- end
69
+ read_data << read_chunk
70
+ end
71
+
72
+ if block_given?
73
+ read_data.each do |data|
74
+ encrypted.call data
42
75
  end
76
+ else
77
+ read_data.join
43
78
  end
79
+ end
44
80
 
45
- read_data.string unless block_given?
81
+ # Encrypts +plaintext+ data asynchronously, yielding data to the block when done.
82
+ # @param [String] plaintext The plaintext
83
+ # @yield Gives the encrypted data to the block
84
+ # @yieldparam [String] The encrypted data
85
+ def encrypt_data_async(plaintext, &encrypted)
86
+ async_queue.push [:encrypt, plaintext, encrypted]
46
87
  end
47
88
 
48
89
  # Decrypts +encrypted+ data and either returns the plaintext or calls a block with it.
@@ -51,21 +92,38 @@ class Rack::TCTP::HALEC
51
92
  # @yield Gives the plaintext to the block
52
93
  # @yieldparam [String] The plaintext
53
94
  def decrypt_data(encrypted, &decrypted)
54
- @engine.inject encrypted
95
+ injected = @engine.inject encrypted
96
+
97
+ if injected < encrypted.length
98
+ exit -1
99
+ end
100
+
101
+ read_data = []
55
102
 
56
103
  while(read_chunk = @engine.read)
57
- if(block_given?)
58
- decrypted.call read_chunk
59
- else
60
- if read_data
61
- read_data.write read_chunk
62
- else
63
- read_data = StringIO.new(read_chunk)
64
- end
104
+ read_data << read_chunk
105
+ end
106
+
107
+ if block_given? then
108
+ read_data.each do |data|
109
+ decrypted.call data
65
110
  end
111
+ else
112
+ read_data.join
66
113
  end
114
+ end
115
+
116
+ # Decrypts +encrypted+ data asynchronously, yielding data to the block when done.
117
+ # @param [String] encrypted The encrypted data
118
+ # @yield Gives the decrypted data to the block
119
+ # @yieldparam [String] the decrypted data
120
+ def decrypt_data_async(encrypted, &decrypted)
121
+ async_queue.push [:decrypt, encrypted, decrypted]
122
+ end
67
123
 
68
- read_data.string unless block_given?
124
+ # Calls a given block asynchronously, considering the order of all calls to async methods.
125
+ def call_async(&block)
126
+ async_queue.push [:call, nil, block]
69
127
  end
70
128
  end
71
129
 
data/lib/rack/tctp.rb CHANGED
@@ -102,7 +102,11 @@ module Rack
102
102
 
103
103
  read_body = req.body.read
104
104
 
105
- decrypted_body.write halec.decrypt_data(read_body)
105
+ begin
106
+ decrypted_body.write halec.decrypt_data(read_body)
107
+ rescue Exception => e
108
+ error(e.message + e.backtrace.join("<br/>\n"))
109
+ end
106
110
 
107
111
  req.body.string = decrypted_body.string
108
112
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-tctp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mathias Slawik