emailauth 0.0.2

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