rack-tctp 0.9.5 → 0.9.8

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: 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