bnet-authenticator 0.1.5 → 0.1.6
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/README.md +1 -1
- data/lib/bnet/authenticator.rb +16 -13
- data/lib/bnet/authenticator/version.rb +1 -1
- data/lib/bnet/authenticator_helper.rb +3 -3
- data/lib/bnet/commands/new.rb +1 -1
- metadata +26 -16
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -4,7 +4,7 @@ Ruby implementation of the Battle.net Mobile Authenticator.
|
|
4
4
|
|
5
5
|
[](http://badge.fury.io/rb/bnet-authenticator)
|
6
6
|
|
7
|
-
[](https://travis-ci.org/dorentus/bnet-authenticator) [](https://gemnasium.com/dorentus/bnet-authenticator) [](https://coveralls.io/r/dorentus/bnet-authenticator) [](https://codeclimate.com/github/dorentus/bnet-authenticator)
|
8
8
|
|
9
9
|
Installation
|
10
10
|
====
|
data/lib/bnet/authenticator.rb
CHANGED
@@ -9,7 +9,9 @@ module Bnet
|
|
9
9
|
|
10
10
|
# @!attribute [r] serial
|
11
11
|
# @return [String] serial
|
12
|
-
|
12
|
+
def serial
|
13
|
+
self.class.prettify_serial(@normalized_serial)
|
14
|
+
end
|
13
15
|
|
14
16
|
# @!attribute [r] secret
|
15
17
|
# @return [String] hexified secret
|
@@ -17,11 +19,16 @@ module Bnet
|
|
17
19
|
|
18
20
|
# @!attribute [r] restorecode
|
19
21
|
# @return [String] restoration code
|
20
|
-
|
22
|
+
def restorecode
|
23
|
+
restorecode_bin = Digest::SHA1.digest(@normalized_serial + secret.as_hex_to_bin)
|
24
|
+
self.class.encode_restorecode(restorecode_bin.split(//).last(10).join)
|
25
|
+
end
|
21
26
|
|
22
27
|
# @!attribute [r] region
|
23
28
|
# @return [Symbol] region
|
24
|
-
|
29
|
+
def region
|
30
|
+
self.class.extract_region(@normalized_serial)
|
31
|
+
end
|
25
32
|
|
26
33
|
# Create a new authenticator with given serial and secret
|
27
34
|
# @param serial [String]
|
@@ -30,27 +37,20 @@ module Bnet
|
|
30
37
|
raise BadInputError.new("bad serial #{serial}") unless self.class.is_valid_serial?(serial)
|
31
38
|
raise BadInputError.new("bad secret #{secret}") unless self.class.is_valid_secret?(secret)
|
32
39
|
|
33
|
-
normalized_serial = self.class.normalize_serial(serial)
|
34
|
-
|
35
|
-
@serial = self.class.prettify_serial(normalized_serial)
|
40
|
+
@normalized_serial = self.class.normalize_serial(serial)
|
36
41
|
@secret = secret
|
37
|
-
@region = self.class.extract_region(normalized_serial)
|
38
|
-
|
39
|
-
restorecode_bin = Digest::SHA1.digest(normalized_serial + secret.as_hex_to_bin)
|
40
|
-
@restorecode = self.class.encode_restorecode(restorecode_bin.split(//).last(10).join)
|
41
42
|
end
|
42
43
|
|
43
44
|
# Request a new authenticator from server
|
44
45
|
# @param region [Symbol]
|
45
46
|
# @return [Bnet::Authenticator]
|
46
47
|
def self.request_authenticator(region)
|
47
|
-
region = region.to_s.upcase.to_sym
|
48
48
|
raise BadInputError.new("bad region #{region}") unless is_valid_region?(region)
|
49
49
|
|
50
50
|
k = create_one_time_pad(37)
|
51
51
|
|
52
52
|
payload_plain = "\1" + k + region.to_s + CLIENT_MODEL.ljust(16, "\0")[0, 16]
|
53
|
-
e =
|
53
|
+
e = rsa_encrypt_bin(payload_plain)
|
54
54
|
|
55
55
|
response_body = request_for('new serial', region, ENROLLMENT_REQUEST_PATH, e)
|
56
56
|
|
@@ -80,7 +80,7 @@ module Bnet
|
|
80
80
|
decode_restorecode(restorecode),
|
81
81
|
Digest::SHA1)
|
82
82
|
|
83
|
-
payload = normalized_serial +
|
83
|
+
payload = normalized_serial + rsa_encrypt_bin(digest + key)
|
84
84
|
|
85
85
|
response_body = request_for('restore (stage 2)', region, RESTORE_VALIDATE_REQUEST_PATH, payload)
|
86
86
|
|
@@ -91,6 +91,8 @@ module Bnet
|
|
91
91
|
# @param region [Symbol]
|
92
92
|
# @return [Integer] server timestamp in seconds
|
93
93
|
def self.request_server_time(region)
|
94
|
+
raise BadInputError.new("bad region #{region}") unless is_valid_region?(region)
|
95
|
+
|
94
96
|
server_time_big_endian = request_for('server time', region, TIME_REQUEST_PATH)
|
95
97
|
server_time_big_endian.unpack('Q>')[0].to_f / 1000
|
96
98
|
end
|
@@ -127,6 +129,7 @@ module Bnet
|
|
127
129
|
:serial => serial,
|
128
130
|
:secret => secret,
|
129
131
|
:restorecode => restorecode,
|
132
|
+
:region => region,
|
130
133
|
}
|
131
134
|
end
|
132
135
|
|
@@ -56,7 +56,7 @@ module Bnet
|
|
56
56
|
def create_one_time_pad(length)
|
57
57
|
(0..1.0/0.0).reduce('') do |memo, i|
|
58
58
|
break memo if memo.length >= length
|
59
|
-
memo << Digest::SHA1.
|
59
|
+
memo << Digest::SHA1.hexdigest(rand().to_s)
|
60
60
|
end[0, length]
|
61
61
|
end
|
62
62
|
|
@@ -66,8 +66,8 @@ module Bnet
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
def
|
70
|
-
(
|
69
|
+
def rsa_encrypt_bin(bin)
|
70
|
+
(bin.as_bin_to_i ** RSA_KEY % RSA_MOD).to_bin
|
71
71
|
end
|
72
72
|
|
73
73
|
def request_for(label, region, path, body = nil)
|
data/lib/bnet/commands/new.rb
CHANGED
metadata
CHANGED
@@ -1,69 +1,78 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bnet-authenticator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- ZHANG Yi
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-04-09 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rake
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '10.1'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '10.1'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: minitest
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '5.0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '5.0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: yard
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0.8'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0.8'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: coveralls
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- -
|
67
|
+
- - ~>
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0.7'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- -
|
75
|
+
- - ~>
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0.7'
|
69
78
|
description: Ruby implementation of the Battle.net Mobile Authenticator
|
@@ -74,7 +83,7 @@ executables:
|
|
74
83
|
extensions: []
|
75
84
|
extra_rdoc_files: []
|
76
85
|
files:
|
77
|
-
-
|
86
|
+
- .yardopts
|
78
87
|
- COPYING
|
79
88
|
- Gemfile
|
80
89
|
- README.md
|
@@ -97,26 +106,27 @@ files:
|
|
97
106
|
homepage: https://github.com/dorentus/bnet-authenticator
|
98
107
|
licenses:
|
99
108
|
- MIT
|
100
|
-
metadata: {}
|
101
109
|
post_install_message:
|
102
110
|
rdoc_options: []
|
103
111
|
require_paths:
|
104
112
|
- lib
|
105
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
106
115
|
requirements:
|
107
|
-
- -
|
116
|
+
- - ! '>='
|
108
117
|
- !ruby/object:Gem::Version
|
109
118
|
version: 1.9.3
|
110
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
111
121
|
requirements:
|
112
|
-
- -
|
122
|
+
- - ! '>='
|
113
123
|
- !ruby/object:Gem::Version
|
114
124
|
version: '0'
|
115
125
|
requirements: []
|
116
126
|
rubyforge_project:
|
117
|
-
rubygems_version:
|
127
|
+
rubygems_version: 1.8.23
|
118
128
|
signing_key:
|
119
|
-
specification_version:
|
129
|
+
specification_version: 3
|
120
130
|
summary: Battle.net Mobile Authenticator
|
121
131
|
test_files:
|
122
132
|
- test/test_battlenet_authenticator.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 028841465a3483415e852b56a2ca8e05552dafd4
|
4
|
-
data.tar.gz: 2bf75662b2cdbe6bf3841e38fcc32b7a9a798b4c
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 93b5da7a8a001dc4720f9a2c4947e267a2afe16400d6971c6995ad1e2af7fe71da58a142c0f8ae28ac91c566f3f9f701b963de51df49f7e68b04d2446f9748fc
|
7
|
-
data.tar.gz: 401d3af738845309d9690aaed1dfcb1cd33fec147e491afc370071c8f39d44b6a622c40338366025419b4a526b80a02216600a693372af4f9a80c625ec06ef0b
|