EzSSL 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ezssl.rb +73 -100
  3. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43edff0aff40d417ab9dbbe9daf4217324a03b473e137794f7159366098a2d3a
4
- data.tar.gz: d227aaf919fc6dcc4e554dca40dd8d5032f2e5f24598187b9333e0332f627e5f
3
+ metadata.gz: f381e57cd92893ee88b828ed535e451972d2a1d88a3aed3cb78961f8b4cdfa75
4
+ data.tar.gz: 7cf236a5ba8f17b493ffb29fd0f5d195b0b1fd911f87403bd6b1fde66802da34
5
5
  SHA512:
6
- metadata.gz: e3e6ac65c51a8aae19339984b32b209c2abb6370c17ed81427278f81b762cb6a177bdbf57d5ddd5155c815b2778a7bf8bef7bec2ebe3237c83fdc62e8aa83b6e
7
- data.tar.gz: 7502c80f193ef387a2c422e6f2037eccb229eec3cc6b84a24ae96b84aac9f38e6127119993ea16339d43eea6387579a01e685ec6614bc069e15896e679f75802
6
+ metadata.gz: a150f6ff4ad094d50ce9fa88ebe7314ff9aa80e04f6c450528804438fe87bcd5af9130f343397f0dd6be86c5c02850a7faa4f591ac94ee40a09c05fb62dc345d
7
+ data.tar.gz: fcc9c4607d96b41ecf8f81e44f3b20040cfc07bcb9565736894a54090e7428054faddc9ee79d4ace1e93028aa6b036f2651327fb624e865c5c6dcd6ca767cdd4
@@ -1,131 +1,104 @@
1
1
  require 'openssl'
2
2
  require 'socket'
3
3
  module EzSSL
4
-
5
4
  class Server
6
-
7
- attr_reader :read, :length
8
-
9
- def initialize(ip,port,length=2048)
10
- @length=length # bit length of private key [readable]
11
- @socket=TCPServer.open(ip,port) # the server
12
- @pair=OpenSSL::PKey::RSA.new(length) # the server keypair
13
- @pubkey=@pair.public_key
14
- @read=@pubkey.public_encrypt('hello').length # byte length to be read by the Handle object
5
+ attr_reader :pubkey
6
+ @@rsa=OpenSSL::PKey::RSA.new(2048)
7
+ def initialize(ip,port)
8
+ @server=TCPServer.new(ip,port)
15
9
  end
16
-
17
- # Accepts a client connection, and returns a Handle object for communication
18
- #
19
- # @return [Object] The Handle object
20
10
  def accept()
21
- client=@socket.accept
22
- client.puts @pubkey.to_s
23
- go=true
24
- key=''
25
- while go
26
- msg=client.gets
27
- key+=msg
28
- go=false if msg=="-----END PUBLIC KEY-----\n"
29
- end
30
- return Handle.new(client,key,self)
11
+ client=@server.accept
12
+ return Handle.new(client,self)
31
13
  end
32
-
33
- # Decrypt a message without direct access to the private key
34
- #
35
- # @param msg [String] The encrypted message
36
- # @return [String] The decrypted message
37
- def decrypt(msg)
38
- return @pair.private_decrypt(msg)
14
+ def rsa_decrypt(msg)
15
+ return @@rsa.private_decrypt(msg)
16
+ end
17
+ def pubkey
18
+ return @@rsa.public_key.to_s
39
19
  end
40
-
41
20
  end
42
-
21
+
43
22
  class Client
44
-
45
- attr_reader :key, :pubkey, :length, :max
46
-
47
- def initialize(ip,port,length=2048)
48
- @length=length # bit length of private key
49
- @pair=OpenSSL::PKey::RSA.new(length)
50
- @pubkey=@pair.public_key # clients public key
23
+ def initialize(ip,port)
51
24
  @socket=TCPSocket.new(ip,port)
52
- @read=@pubkey.public_encrypt('hello').length
53
-
54
- # recieve the key frome the server
55
- go=true
25
+ @rsa=OpenSSL::PKey::RSA.new(2048)
26
+ @cip=OpenSSL::Cipher::AES256.new(:CBC).encrypt()
27
+ @dec=OpenSSL::Cipher::AES256.new(:CBC).decrypt()
28
+ #server=>client
56
29
  key=''
57
- while go
58
- msg=@socket.gets
59
- key+=msg
60
- go=false if msg=="-----END PUBLIC KEY-----\n"
30
+ line=@socket.gets
31
+ until line=="\n"
32
+ key+=line
33
+ line=@socket.gets
61
34
  end
62
-
63
- #give server public key
64
- @socket.puts @pubkey.to_s
65
- @key=OpenSSL::PKey::RSA.new(key) # the servers public key
66
-
67
- @max=((self.gets().to_i)/8).floor - 11
68
- self.puts @length.to_s
35
+ @server_rsa=OpenSSL::PKey::RSA.new(key)
36
+ @socket.puts @rsa.public_key.to_s
37
+ @socket.puts ""
69
38
  end
70
-
71
- # Sends a string (msg) to the server
72
- #
73
- # @param msg [String] The sting being sent to the server
74
- # @raise [ArgumentError] if the message being sent is too large for the OpenSSL::PKey::RSA object
39
+
75
40
  def puts(msg)
76
- raise ArgumentError, 'Message too big' if msg.length>@max
77
- @socket.write @key.public_encrypt(msg)
41
+ key=@cip.random_key()
42
+ iv=@cip.random_iv()
43
+ enc=@cip.update(msg)+@cip.final
44
+ @socket.write(iv)
45
+ @socket.write(@server_rsa.public_encrypt(key))
46
+ @socket.puts enc.length
47
+ @socket.write(enc)
78
48
  end
79
-
80
- # Recieves a string from the server
81
- #
82
- # @return [String] The message from the server
49
+
83
50
  def gets()
84
- msg=@socket.read(@read)
85
- return @pair.private_decrypt(msg)
51
+ @dec.iv=@socket.read(16)
52
+ @dec.key=@rsa.private_decrypt(@socket.read(256))
53
+ len=@socket.gets.to_i
54
+ msg=@socket.read(len)
55
+ return @dec.update(msg)+@dec.final
86
56
  end
57
+
87
58
  end
88
-
59
+
89
60
  private
90
-
91
- # The object that allows communication from Server to Client.
92
61
  class Handle
93
- attr_reader :max
94
- # the client already has the servers pubkey, and the server has the clients pubkey
95
-
96
- def initialize(client,key,server)
97
- # The represented client
62
+ def initialize(client,server)
98
63
  @client=client
99
- # The public key of the represented client
100
- @key=OpenSSL::PKey::RSA.new(key)
101
64
  @server=server
102
- @max=256
103
- self.puts @server.length.to_s
104
- @max=@max=((self.gets().to_i)/8).floor - 11
65
+ @cip=OpenSSL::Cipher::AES256.new(:CBC).encrypt()
66
+ @dec=OpenSSL::Cipher::AES256.new(:CBC).decrypt()
67
+ #swap rsa keys
68
+ #server=>client
69
+ client.puts server.pubkey
70
+ client.puts ""
71
+ #client=>server
72
+ key=''
73
+ line=client.gets
74
+ until line=="\n"
75
+ key+=line
76
+ line=client.gets
77
+ end
78
+ #make rsa key
79
+ @rsa=OpenSSL::PKey::RSA.new(key)
105
80
  end
106
-
107
- # Sends a string (msg) to the represented client
108
- #
109
- # @param msg [String] The message being sent to the client
110
- # @raise [ArgumentError] if the message being sent is too large for the OpenSSL::PKey::RSA object
81
+
111
82
  def puts(msg)
112
- raise ArgumentError, 'Message too big' if msg.length>@max
113
- @client.write @key.public_encrypt(msg)
83
+ key=@cip.random_key()
84
+ iv=@cip.random_iv()
85
+ enc=@cip.update(msg)+@cip.final
86
+ @client.write(iv)
87
+ @client.write(@rsa.public_encrypt(key))
88
+ @client.puts enc.length
89
+ @client.write(enc)
114
90
  end
115
-
116
- # Recieves a string from the client
117
- #
118
- # @return [String] The message sent from the client
91
+
119
92
  def gets()
120
- msg=@client.read(@server.read)
121
- return @server.decrypt(msg)
93
+ @dec.iv=@client.read(16)
94
+ @dec.key=@server.rsa_decrypt(@client.read(256))
95
+ len=@client.gets.to_i
96
+ msg=@client.read(len)
97
+ return @dec.update(msg)+@dec.final
122
98
  end
123
-
124
- # Closes the client remotely
125
- def close
126
- @client.close
99
+
100
+ def close()
101
+ @client.close()
127
102
  end
128
-
129
103
  end
130
-
131
104
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: EzSSL
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Reinheart
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-06 00:00:00.000000000 Z
11
+ date: 2020-02-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: OpenSSL is confusing to people new to socket programming, so i aim to
14
14
  make the process easier
@@ -39,7 +39,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  requirements: []
42
- rubygems_version: 3.0.3
42
+ rubyforge_project:
43
+ rubygems_version: 2.7.6.2
43
44
  signing_key:
44
45
  specification_version: 4
45
46
  summary: Easily make secure socket connections