bendiken-cryptograph 0.0.0

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.
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2009 Arto Bendiken <http://ar.to/>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
+ IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,57 @@
1
+ = Cryptograph.rb
2
+
3
+ This is the pure-Ruby reference implementation of a Cryptograph node,
4
+ including gateway daemons for XMPP, SMTP and HTTP.
5
+
6
+
7
+ == Documentation
8
+
9
+ * http://cryptograph.rubyforge.org
10
+
11
+
12
+ == Download
13
+
14
+ To get a local working copy of the development repository, do:
15
+
16
+ % git clone git://github.com/bendiken/cryptograph.git
17
+
18
+ Alternatively, you can download the latest development version as a tarball
19
+ as follows:
20
+
21
+ % wget http://github.com/bendiken/cryptograph/tarball/master
22
+
23
+
24
+ == Requirements
25
+
26
+ * OpenPGP.rb
27
+ * http://openpgp.rubyforge.org
28
+ * EventMachine (only needed for the SMTP gateway)
29
+ * http://rubyeventmachine.com
30
+ * Rack (only needed for the HTTP gateway)
31
+ * http://rack.github.com
32
+ * XMPP4R (only needed for the XMPP gateway)
33
+ * http://home.gna.org/xmpp4r
34
+
35
+
36
+ == Installation
37
+
38
+ The recommended installation method is via RubyGems. To install the latest
39
+ official release from RubyForge, do:
40
+
41
+ % [sudo] gem install cryptograph
42
+
43
+ To use the very latest bleeding-edge development version, install the gem
44
+ directly from GitHub as follows:
45
+
46
+ % [sudo] gem install bendiken-cryptograph -s http://gems.github.com
47
+
48
+
49
+ == Authors
50
+
51
+ * Arto Bendiken (mailto:arto.bendiken@gmail.com) - http://ar.to
52
+
53
+
54
+ == License
55
+
56
+ All source code is available under the terms of the MIT license. For more
57
+ information, see the accompanying LICENSE file.
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
3
+ require 'rubygems'
4
+ require 'rakefile' # http://github.com/bendiken/rakefile
5
+ require 'cryptograph'
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
data/bin/cryptographd ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby -rubygems
2
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
3
+ require 'cryptograph'
@@ -0,0 +1,6 @@
1
+ require 'openpgp'
2
+ require 'cryptograph/version'
3
+
4
+ module Cryptograph
5
+ autoload :Gateway, 'cryptograph/gateway'
6
+ end
@@ -0,0 +1,7 @@
1
+ module Cryptograph
2
+ class Gateway
3
+ autoload :HTTP, 'cryptograph/gateway/http'
4
+ autoload :SMTP, 'cryptograph/gateway/smtp'
5
+ autoload :XMPP, 'cryptograph/gateway/xmpp'
6
+ end
7
+ end
@@ -0,0 +1,34 @@
1
+ require 'rack/request'
2
+ require 'rack/response'
3
+
4
+ module Cryptograph class Gateway
5
+ class HTTP < Gateway
6
+ def self.run(options = {})
7
+ require 'rack'
8
+ require 'rack/showexceptions'
9
+
10
+ app = Rack::ShowExceptions.new(Rack::Lint.new(self.new))
11
+ app = Rack::URLMap.new((options[:path] || '/').to_s => app)
12
+ Rack::Handler::WEBrick.run app, :Port => options[:port]
13
+ end
14
+
15
+ def call(env)
16
+ request = Rack::Request.new(env)
17
+ response = Rack::Response.new do |response|
18
+ if request.post? || true # FIXME
19
+ # TODO
20
+ response.status = 200
21
+ response['Content-Type'] = 'text/plain'
22
+ response.write "OK"
23
+ else
24
+ response.status = 404
25
+ response['Content-Type'] = 'text/plain'
26
+ response.write "Not Found"
27
+ end
28
+ end
29
+ response.finish
30
+ end
31
+ end
32
+ end end
33
+
34
+ Cryptograph::Gateway::HTTP.run(:port => 6780, :path => '/') if $0 == __FILE__
@@ -0,0 +1,78 @@
1
+ require 'eventmachine'
2
+
3
+ module Cryptograph class Gateway
4
+ class SMTP < EM::Protocols::SmtpServer
5
+ def self.run(options = {})
6
+ EM.run do
7
+ EM.start_server options[:hostname] || '127.0.0.1', options[:port], self
8
+ end
9
+ end
10
+
11
+ def initialize(*args)
12
+ super
13
+ end
14
+
15
+ # The greeting returned in the initial connection message to the client.
16
+ def get_server_greeting
17
+ "Cryptograph SMTP Gateway"
18
+ end
19
+
20
+ # The domain name returned in the first line of the response to a
21
+ # successful EHLO or HELO command.
22
+ def get_server_domain
23
+ super # TODO
24
+ end
25
+
26
+ # ...
27
+ def receive_ehlo_domain(domain)
28
+ true
29
+ end
30
+
31
+ # ...
32
+ def receive_plain_auth(user, password)
33
+ true
34
+ end
35
+
36
+ # Triggered when the client calls EHLO/HELO or RSET.
37
+ def receive_transaction
38
+ # TODO
39
+ end
40
+
41
+ # Triggered when the client issues the RSET command.
42
+ def receive_reset
43
+ # TODO
44
+ end
45
+
46
+ # Receives the argument of the MAIL FROM command.
47
+ def receive_sender(from)
48
+ true
49
+ end
50
+
51
+ # Receives the argument of a RCPT TO command.
52
+ def receive_recipient(to)
53
+ true
54
+ end
55
+
56
+ # Triggered when the client sends the DATA command.
57
+ def receive_data_command
58
+ true
59
+ end
60
+
61
+ # Triggered when data from the client is available.
62
+ def receive_data_chunk(data)
63
+ # TODO
64
+ end
65
+
66
+ # Triggered after a message has been completely received.
67
+ def receive_message
68
+ true # accept message
69
+ end
70
+
71
+ # Triggered when the client has ended the connection.
72
+ def connection_ended
73
+ #EM.stop
74
+ end
75
+ end
76
+ end end
77
+
78
+ Cryptograph::Gateway::SMTP.run(:port => 6725) if $0 == __FILE__
@@ -0,0 +1,95 @@
1
+ require 'xmpp4r'
2
+ require 'xmpp4r/roster'
3
+
4
+ module Cryptograph class Gateway
5
+ class XMPP < Gateway
6
+ include Jabber
7
+
8
+ attr_accessor :jid
9
+ attr_accessor :options
10
+
11
+ def self.run(options = {})
12
+ self.new(options[:jid], options[:password], options).run
13
+ end
14
+
15
+ def initialize(jid, password, options = {})
16
+ Jabber::debug = true if options[:debug]
17
+
18
+ @options = options
19
+ connect(jid, password)
20
+ end
21
+
22
+ def connected?
23
+ @client && @client.is_connected?
24
+ end
25
+
26
+ def connect(jid, password)
27
+ @jid = JID.new(jid)
28
+ @client = Client.new(@jid)
29
+ @client.connect
30
+ @client.auth(password)
31
+
32
+ initialize_roster
33
+ initialize_messaging
34
+ send_status(:available, options[:status])
35
+
36
+ @client.on_exception do |exception, *args|
37
+ connect(jid, password)
38
+ end
39
+ end
40
+
41
+ def disconnect
42
+ @client.close if connected?
43
+ end
44
+
45
+ def initialize_roster
46
+ @roster = Roster::Helper.new(@client)
47
+ @roster.wait_for_roster
48
+ @roster.add_subscription_request_callback() do |item, presence|
49
+ @roster.accept_subscription(presence.from)
50
+ send_subscription(presence.from) if @roster.find(presence.from).empty?
51
+ end
52
+ end
53
+
54
+ def initialize_messaging
55
+ @client.add_message_callback do |msg|
56
+ send_chat(msg.from, 'Message received and stored.')
57
+ end
58
+ end
59
+
60
+ def run
61
+ Thread.stop
62
+ end
63
+
64
+ def start_keepalive
65
+ Thread.new do
66
+ loop { send_presence; sleep options[] || 30 }
67
+ end
68
+ end
69
+
70
+ def send_presence
71
+ @client.send(Presence.new)
72
+ end
73
+
74
+ def send_status(type, status = nil)
75
+ @client.send(Presence.new.set_type(type.to_sym).set_status(status.to_s))
76
+ end
77
+
78
+ def send_subscription(jid)
79
+ @client.send(Presence.new.set_type(:subscribe).set_to(jid))
80
+ end
81
+
82
+ def send_chat(jid, body)
83
+ @client.send(Message.new(jid, body).set_type(:chat))
84
+ end
85
+ end
86
+ end end
87
+
88
+ if $0 == __FILE__
89
+ Cryptograph::Gateway::XMPP.run({
90
+ :jid => "#{ARGV.shift}/cryptograph",
91
+ :password => ARGV.shift,
92
+ :status => 'Ready to disseminate cryptography',
93
+ :debug => true,
94
+ })
95
+ end
@@ -0,0 +1,11 @@
1
+ module Cryptograph
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ TINY = 1
6
+ EXTRA = nil
7
+
8
+ STRING = [MAJOR, MINOR, TINY].join('.')
9
+ STRING << "-#{EXTRA}" if EXTRA
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bendiken-cryptograph
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Arto Bendiken
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-19 00:00:00 -07:00
13
+ default_executable: cryptographd
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rakefile
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: openpgp
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description: ""
36
+ email: arto.bendiken@gmail.com
37
+ executables:
38
+ - cryptographd
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - LICENSE
45
+ - README
46
+ - Rakefile
47
+ - VERSION
48
+ - bin/cryptographd
49
+ - lib/cryptograph.rb
50
+ - lib/cryptograph/gateway.rb
51
+ - lib/cryptograph/gateway/http.rb
52
+ - lib/cryptograph/gateway/smtp.rb
53
+ - lib/cryptograph/gateway/xmpp.rb
54
+ - lib/cryptograph/version.rb
55
+ has_rdoc: false
56
+ homepage: http://github.com/bendiken/cryptograph
57
+ post_install_message:
58
+ rdoc_options: []
59
+
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 1.8.2
67
+ version:
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ requirements: []
75
+
76
+ rubyforge_project: cryptograph
77
+ rubygems_version: 1.2.0
78
+ signing_key:
79
+ specification_version: 2
80
+ summary: The Cryptograph reference implementation.
81
+ test_files: []
82
+