emailauth 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ end
6
+
7
+ desc "Run tests"
8
+ task :default => :test
@@ -0,0 +1,44 @@
1
+ require 'securerandom'
2
+ require 'base64'
3
+ require 'rotp'
4
+
5
+ class EmailAuth::Authenticator
6
+ ##
7
+ # Generates SAW tokens in base64 that are the provided number of bytes
8
+ ##
9
+ def self.generateTokens(bytes = 16)
10
+ complete_token = SecureRandom.random_bytes(bytes)
11
+ complete_token_s = Base64.urlsafe_encode64(complete_token)
12
+ email_token = SecureRandom.random_bytes(bytes)
13
+ email_token_s = Base64.urlsafe_encode64(email_token)
14
+
15
+ user_token_s = Base64.urlsafe_encode64(complete_token.unpack('C*').zip(email_token.unpack('C*')).map{ |a,b| a ^ b }.pack('C*'))
16
+
17
+ return [user_token_s,email_token_s,complete_token_s]
18
+ end
19
+
20
+ ##
21
+ # Validates whether the provided tokens are correct using SAW protocol
22
+ ##
23
+ def self.authenticate(user_token, email_token, complete_token)
24
+ email_token_e = Base64.urlsafe_decode64(email_token)
25
+ complete_token_e = Base64.urlsafe_decode64(complete_token)
26
+
27
+ calculated_user_token = Base64.urlsafe_encode64(complete_token_e.unpack('C*').zip(email_token_e.unpack('C*')).map{ |a,b| a ^ b }.pack('C*'))
28
+ return user_token==calculated_user_token
29
+ end
30
+
31
+ ##
32
+ # Validates whether a TOTP code is valid for a particular secret
33
+ ##
34
+ def self.validateTOTP(auth_secret, code)
35
+ return code == ROTP::TOTP.new(auth_secret).now.to_s
36
+ end
37
+
38
+ ##
39
+ # Generates a TOTP secret
40
+ ##
41
+ def self.generateTOTPSecret
42
+ ROTP::Base32.random_base32
43
+ end
44
+ end
data/lib/emailauth.rb ADDED
@@ -0,0 +1,19 @@
1
+ class EmailAuth
2
+ def self.generateTokens(bytes = 16)
3
+ EmailAuth::Authenticator.generateTokens(bytes)
4
+ end
5
+
6
+ def self.authenticate(user_token, email_token, complete_token)
7
+ EmailAuth::Authenticator.authenticate(user_token, email_token, complete_token)
8
+ end
9
+
10
+ def self.validateTOTP(auth_secret, code)
11
+ EmailAuth::Authenticator.validateTOTP(auth_secret, code)
12
+ end
13
+
14
+ def self.generateTOTPSecret
15
+ EmailAuth::Authenticator.generateTOTPSecret
16
+ end
17
+ end
18
+
19
+ require 'emailauth/authenticator'
@@ -0,0 +1,25 @@
1
+ require 'test/unit'
2
+ require 'emailauth'
3
+
4
+ class EmailAuthTest < Test::Unit::TestCase
5
+ def test_generate_token
6
+ user_token, email_token, complete_token = EmailAuth.generateTokens
7
+ assert_not_nil user_token
8
+ assert_not_nil email_token
9
+ assert_not_nil complete_token
10
+ end
11
+
12
+ def test_authenticate
13
+ user_token, email_token, complete_token = EmailAuth.generateTokens
14
+ assert EmailAuth.authenticate(user_token, email_token, complete_token)
15
+ end
16
+
17
+ def test_totp
18
+ secret = ROTP::Base32.random_base32
19
+ assert !EmailAuth.validate_totp(secret, secret)
20
+ end
21
+
22
+ def test_totp
23
+ assert_not_nil EmailAuth.generateTOTPSecret
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: emailauth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brian Lubben
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-03-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rotp
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Email based authentication with mobile devices
31
+ email: blubben@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - Rakefile
37
+ - lib/emailauth.rb
38
+ - lib/emailauth/authenticator.rb
39
+ - test/test_emailauth.rb
40
+ homepage:
41
+ licenses: []
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: 0.0.2
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 1.8.23
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: Hola Auth
64
+ test_files:
65
+ - test/test_emailauth.rb