mobile_id 0.0.4 → 0.0.9
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +6 -0
- data/lib/mobile_id.rb +1 -0
- data/lib/mobile_id/auth.rb +24 -27
- data/lib/mobile_id/cert.rb +98 -0
- data/lib/mobile_id/certs/EE_Certification_Centre_Root_CA.pem.crt +24 -0
- data/lib/mobile_id/certs/ESTEID-SK_2015.pem.crt +37 -0
- data/lib/mobile_id/certs/TEST_of_EE_Certification_Centre_Root_CA.pem.crt +24 -0
- data/lib/mobile_id/certs/TEST_of_ESTEID-SK_2015.pem.crt +37 -0
- metadata +6 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bcb3f7e69f425ea215f86a911b42b36fd0bba8012b25491dba9bfe2983f61ae
|
4
|
+
data.tar.gz: d322ceae5ef98c798beed98fd1927111a81fee624c667897bc43b5b0bb2ffc30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3b858ba860c6194f7c52a47d5496835535462ba8ca60570c8eaa5e407de5349fac8dc205fc8a98cb796522cf8b3295a8693e418e7d7078cbd05a10a61105fc6
|
7
|
+
data.tar.gz: d3fde770330ab1614f2192d008b9ed202cc65caa06a065bb78833514e52d34c2d2dcfcf44435e6a20a68304df6dc7e309b1beae0af3997fdd08cfc3084c0040f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
Release 0.0.9
|
2
|
+
* Fixed verification code
|
3
|
+
|
4
|
+
Release 0.0.8
|
5
|
+
* Release cleanup
|
6
|
+
|
7
|
+
Release 0.0.7
|
8
|
+
* Cert cleanup
|
9
|
+
|
10
|
+
Release 0.0.6
|
11
|
+
* Cert path fix
|
12
|
+
|
13
|
+
Release 0.0.5
|
14
|
+
* Added user certificate validation
|
15
|
+
|
1
16
|
Release 0.0.4
|
2
17
|
* Refactored MobileId to MobileId::Auth
|
3
18
|
|
data/README.md
CHANGED
@@ -109,12 +109,18 @@ end
|
|
109
109
|
|
110
110
|
After checking out the repo, run `bundle` to install dependencies. For testing code, run `rspec`
|
111
111
|
|
112
|
+
## Contributors
|
113
|
+
|
114
|
+
* Priit Tark
|
115
|
+
* Andri Möll for pointing out user signature issue
|
116
|
+
|
112
117
|
## Contributing
|
113
118
|
|
114
119
|
Bug reports and pull requests are welcome on GitHub at https://github.com/gitlabeu/mobile_id
|
115
120
|
|
116
121
|
## Roadmap
|
117
122
|
|
123
|
+
* Auth signature validation
|
118
124
|
* Document sign
|
119
125
|
* Rails generators
|
120
126
|
|
data/lib/mobile_id.rb
CHANGED
data/lib/mobile_id/auth.rb
CHANGED
@@ -9,13 +9,19 @@ module MobileId
|
|
9
9
|
TEST_UUID = "00000000-0000-0000-0000-000000000000"
|
10
10
|
TEST_NAME = "DEMO"
|
11
11
|
|
12
|
-
attr_accessor :url, :uuid, :name, :hash, :
|
12
|
+
attr_accessor :url, :uuid, :name, :doc, :hash, :user_cert, :live
|
13
13
|
|
14
14
|
def initialize(live:, uuid: nil, name: nil)
|
15
15
|
self.url = live == true ? LIVE_URL : TEST_URL
|
16
16
|
self.uuid = live == true ? uuid : TEST_UUID
|
17
17
|
self.name = live == true ? name : TEST_NAME
|
18
|
-
self.
|
18
|
+
self.live = live
|
19
|
+
init_doc(SecureRandom.hex(40))
|
20
|
+
end
|
21
|
+
|
22
|
+
def init_doc(doc)
|
23
|
+
self.doc = doc
|
24
|
+
self.hash = Digest::SHA256.digest(doc)
|
19
25
|
end
|
20
26
|
|
21
27
|
def authenticate!(phone_calling_code: nil, phone:, personal_code:, language: nil, display_text: nil)
|
@@ -44,7 +50,7 @@ module MobileId
|
|
44
50
|
relyingPartyName: name,
|
45
51
|
phoneNumber: full_phone.to_s.strip,
|
46
52
|
nationalIdentityNumber: personal_code.to_s.strip,
|
47
|
-
hash: hash,
|
53
|
+
hash: Base64.strict_encode64(hash),
|
48
54
|
hashType: 'SHA256',
|
49
55
|
language: language,
|
50
56
|
displayText: display_text,
|
@@ -58,12 +64,13 @@ module MobileId
|
|
58
64
|
ActiveSupport::HashWithIndifferentAccess.new(
|
59
65
|
session_id: response['sessionID'],
|
60
66
|
phone: phone,
|
61
|
-
phone_calling_code: phone_calling_code
|
67
|
+
phone_calling_code: phone_calling_code,
|
68
|
+
doc: doc
|
62
69
|
)
|
63
70
|
end
|
64
71
|
|
65
72
|
def verify!(auth)
|
66
|
-
long_poll!(session_id: auth['session_id'])
|
73
|
+
long_poll!(session_id: auth['session_id'], doc: auth['doc'])
|
67
74
|
|
68
75
|
ActiveSupport::HashWithIndifferentAccess.new(
|
69
76
|
personal_code: personal_code,
|
@@ -75,7 +82,7 @@ module MobileId
|
|
75
82
|
)
|
76
83
|
end
|
77
84
|
|
78
|
-
def long_poll!(session_id:)
|
85
|
+
def long_poll!(session_id:, doc:)
|
79
86
|
response = HTTParty.get(url + "/authentication/session/#{session_id}")
|
80
87
|
raise Error, "#{I18n.t('mobile_id.some_error')} #{response.code} #{response}" if response.code != 200
|
81
88
|
|
@@ -100,51 +107,41 @@ module MobileId
|
|
100
107
|
raise Error, message
|
101
108
|
end
|
102
109
|
|
103
|
-
|
104
|
-
|
105
|
-
|
110
|
+
@user_cert = MobileId::Cert.new(response['cert'], live: live)
|
111
|
+
@user_cert.verify_signature!(response['signature']['value'], doc)
|
112
|
+
self.user_cert = @user_cert
|
106
113
|
end
|
107
114
|
|
108
115
|
def verification_code
|
109
|
-
|
116
|
+
binary = hash.unpack('B*').first
|
117
|
+
"%04d" % (binary[0...6] + binary[-7..-1]).to_i(2)
|
110
118
|
end
|
111
119
|
|
112
120
|
def given_name
|
113
|
-
|
121
|
+
user_cert.given_name
|
114
122
|
end
|
115
123
|
alias first_name given_name
|
116
124
|
|
117
125
|
def surname
|
118
|
-
|
126
|
+
user_cert.surname
|
119
127
|
end
|
120
128
|
alias last_name surname
|
121
129
|
|
122
130
|
def country
|
123
|
-
|
131
|
+
user_cert.country
|
124
132
|
end
|
125
133
|
|
126
134
|
def common_name
|
127
|
-
|
135
|
+
user_cert.common_name
|
128
136
|
end
|
129
137
|
|
130
138
|
def organizational_unit
|
131
|
-
|
139
|
+
user_cert.organizational_unit
|
132
140
|
end
|
133
141
|
|
134
142
|
def serial_number
|
135
|
-
|
143
|
+
user_cert.serial_number
|
136
144
|
end
|
137
145
|
alias personal_code serial_number
|
138
|
-
|
139
|
-
private
|
140
|
-
|
141
|
-
def build_cert_subject
|
142
|
-
self.cert_subject = cert.subject.to_utf8.split(/(?<!\\)\,+/).each_with_object({}) do |c, result|
|
143
|
-
next unless c.include?("=")
|
144
|
-
|
145
|
-
key, val = c.split("=")
|
146
|
-
result[key] = val
|
147
|
-
end
|
148
|
-
end
|
149
146
|
end
|
150
147
|
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MobileId
|
4
|
+
class Cert
|
5
|
+
class << self
|
6
|
+
def root_path
|
7
|
+
@root_path ||= File.expand_path('certs', __dir__)
|
8
|
+
end
|
9
|
+
|
10
|
+
def live_store
|
11
|
+
@live_store ||=
|
12
|
+
build_store([
|
13
|
+
File.join(root_path, 'EE_Certification_Centre_Root_CA.pem.crt'),
|
14
|
+
File.join(root_path, 'ESTEID-SK_2015.pem.crt')
|
15
|
+
])
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_store
|
19
|
+
@test_store ||=
|
20
|
+
build_store([
|
21
|
+
File.join(root_path, 'TEST_of_EE_Certification_Centre_Root_CA.pem.crt'),
|
22
|
+
File.join(root_path, 'TEST_of_ESTEID-SK_2015.pem.crt')
|
23
|
+
])
|
24
|
+
end
|
25
|
+
|
26
|
+
def build_store(paths)
|
27
|
+
store = OpenSSL::X509::Store.new
|
28
|
+
paths.each { |path| cert = OpenSSL::X509::Certificate.new(File.read(path)); store.add_cert(cert) }
|
29
|
+
store
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_accessor :cert, :subject
|
34
|
+
|
35
|
+
def initialize(base64_cert, live:)
|
36
|
+
self.cert = OpenSSL::X509::Certificate.new(Base64.decode64(base64_cert))
|
37
|
+
verify!(self.cert, live: live)
|
38
|
+
build_cert_subject
|
39
|
+
end
|
40
|
+
|
41
|
+
def verify!(cert, live:)
|
42
|
+
store = live == true ? self.class.live_store : self.class.test_store
|
43
|
+
raise Error, 'User certificate is not valid' unless store.verify(cert)
|
44
|
+
raise Error, 'User certificate is not valid' unless cert.public_key.check_key
|
45
|
+
raise Error, 'User certificate is expired' unless (cert.not_before..cert.not_after) === Time.now
|
46
|
+
|
47
|
+
true
|
48
|
+
end
|
49
|
+
|
50
|
+
def verify_signature!(signature_base64, doc)
|
51
|
+
signature = Base64.decode64(signature_base64)
|
52
|
+
digest = OpenSSL::Digest::SHA256.new(doc)
|
53
|
+
|
54
|
+
# cert.public_key.verify(digest, signature, doc)
|
55
|
+
|
56
|
+
# TODO OpenSSL does not parse signature correctly
|
57
|
+
# OpenSSL::PKey::PKeyError: EVP_VerifyFinal: nested asn1 error
|
58
|
+
end
|
59
|
+
|
60
|
+
def given_name
|
61
|
+
subject["GN"].tr(",", " ")
|
62
|
+
end
|
63
|
+
alias first_name given_name
|
64
|
+
|
65
|
+
def surname
|
66
|
+
subject["SN"].tr(",", " ")
|
67
|
+
end
|
68
|
+
alias last_name surname
|
69
|
+
|
70
|
+
def country
|
71
|
+
subject["C"].tr(",", " ")
|
72
|
+
end
|
73
|
+
|
74
|
+
def common_name
|
75
|
+
subject["CN"]
|
76
|
+
end
|
77
|
+
|
78
|
+
def organizational_unit
|
79
|
+
subject["OU"]
|
80
|
+
end
|
81
|
+
|
82
|
+
def serial_number
|
83
|
+
subject["serialNumber"]
|
84
|
+
end
|
85
|
+
alias personal_code serial_number
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
def build_cert_subject
|
90
|
+
self.subject = cert.subject.to_utf8.split(/(?<!\\)\,+/).each_with_object({}) do |c, result|
|
91
|
+
next unless c.include?("=")
|
92
|
+
|
93
|
+
key, val = c.split("=")
|
94
|
+
result[key] = val
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
|
3
|
+
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
|
4
|
+
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
|
5
|
+
CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
|
6
|
+
MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
|
7
|
+
ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
|
8
|
+
b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
|
9
|
+
AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
|
10
|
+
euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
|
11
|
+
bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
|
12
|
+
WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
|
13
|
+
MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
|
14
|
+
1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
|
15
|
+
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
|
16
|
+
zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
|
17
|
+
BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
|
18
|
+
BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
|
19
|
+
v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
|
20
|
+
E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
|
21
|
+
uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
|
22
|
+
iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
|
23
|
+
GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
|
24
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,37 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIGcDCCBVigAwIBAgIQRUgJC4ec7yFWcqzT3mwbWzANBgkqhkiG9w0BAQwFADB1
|
3
|
+
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
|
4
|
+
czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
|
5
|
+
CSqGSIb3DQEJARYJcGtpQHNrLmVlMCAXDTE1MTIxNzEyMzg0M1oYDzIwMzAxMjE3
|
6
|
+
MjM1OTU5WjBjMQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVy
|
7
|
+
aW1pc2tlc2t1czEXMBUGA1UEYQwOTlRSRUUtMTA3NDcwMTMxFzAVBgNVBAMMDkVT
|
8
|
+
VEVJRC1TSyAyMDE1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0oH6
|
9
|
+
1NDxbdW9k8nLA1qGaL4B7vydod2Ewp/STBZB3wEtIJCLdkpEsS8pXfFiRqwDVsgG
|
10
|
+
Gbu+Q99trlb5LI7yi7rIkRov5NftBdSNPSU5rAhYPQhvZZQgOwRaHa5Ey+BaLJHm
|
11
|
+
LqYQS9hQvQsCYyws+xVvNFUpK0pGD64iycqdMuBl/nWq3fLuZppwBh0VFltm4nhr
|
12
|
+
/1S0R9TRJpqFUGbGr4OK/DwebQ5PjhdS40gCUNwmC7fPQ4vIH+x+TCk2aG+u3MoA
|
13
|
+
z0IrpVWqiwzG/vxreuPPAkgXeFCeYf6fXLsGz4WivsZFbph2pMjELu6sltlBXfAG
|
14
|
+
3fGv43t91VXicyzR/eT5dsB+zFsW1sHV+1ONPr+qzgDxCH2cmuqoZNfIIq+buob3
|
15
|
+
eA8ee+XpJKJQr+1qGrmhggjvAhc7m6cU4x/QfxwRYhIVNhJf+sKVThkQhbJ9XxuK
|
16
|
+
k3c18wymwL1mpDD0PIGJqlssMeiuJ4IzagFbgESGNDUd4icm0hQT8CmQeUm1GbWe
|
17
|
+
BYseqPhMQX97QFBLXJLVy2SCyoAz7Bq1qA43++EcibN+yBc1nQs2Zoq8ck9MK0bC
|
18
|
+
xDMeUkQUz6VeQGp69ImOQrsw46qTz0mtdQrMSbnkXCuLan5dPm284J9HmaqiYi6j
|
19
|
+
6KLcZ2NkUnDQFesBVlMEm+fHa2iR6lnAFYZ06UECAwEAAaOCAgowggIGMB8GA1Ud
|
20
|
+
IwQYMBaAFBLyWj7qVhy/zQas8fElyalL1BSZMB0GA1UdDgQWBBSzq4i8mdVipIUq
|
21
|
+
CM20HXI7g3JHUTAOBgNVHQ8BAf8EBAMCAQYwdwYDVR0gBHAwbjAIBgYEAI96AQIw
|
22
|
+
CQYHBACL7EABAjAwBgkrBgEEAc4fAQEwIzAhBggrBgEFBQcCARYVaHR0cHM6Ly93
|
23
|
+
d3cuc2suZWUvQ1BTMAsGCSsGAQQBzh8BAjALBgkrBgEEAc4fAQMwCwYJKwYBBAHO
|
24
|
+
HwEEMBIGA1UdEwEB/wQIMAYBAf8CAQAwQQYDVR0eBDowOKE2MASCAiIiMAqHCAAA
|
25
|
+
AAAAAAAAMCKHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCcGA1Ud
|
26
|
+
JQQgMB4GCCsGAQUFBwMJBggrBgEFBQcDAgYIKwYBBQUHAwQwfAYIKwYBBQUHAQEE
|
27
|
+
cDBuMCAGCCsGAQUFBzABhhRodHRwOi8vb2NzcC5zay5lZS9DQTBKBggrBgEFBQcw
|
28
|
+
AoY+aHR0cDovL3d3dy5zay5lZS9jZXJ0cy9FRV9DZXJ0aWZpY2F0aW9uX0NlbnRy
|
29
|
+
ZV9Sb290X0NBLmRlci5jcnQwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL3d3dy5z
|
30
|
+
ay5lZS9yZXBvc2l0b3J5L2NybHMvZWVjY3JjYS5jcmwwDQYJKoZIhvcNAQEMBQAD
|
31
|
+
ggEBAHRWDGI3P00r2sOnlvLHKk9eE7X93eT+4e5TeaQsOpE5zQRUTtshxN8Bnx2T
|
32
|
+
oQ9rgi18q+MwXm2f0mrGakYYG0bix7ZgDQvCMD/kuRYmwLGdfsTXwh8KuL6uSHF+
|
33
|
+
U/ZTss6qG7mxCHG9YvebkN5Yj/rYRvZ9/uJ9rieByxw4wo7b19p22PXkAkXP5y3+
|
34
|
+
qK/Oet98lqwI97kJhiS2zxFYRk+dXbazmoVHnozYKmsZaSUvoYNNH19tpS7BLdsg
|
35
|
+
i9KpbvQLb5ywIMq9ut3+b2Xvzq8yzmHMFtLIJ6Afu1jJpqD82BUAFcvi5vhnP8M7
|
36
|
+
b974R18WCOpgNQvXDI+2/8ZINeU=
|
37
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,24 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEEzCCAvugAwIBAgIQc/jtqiMEFERMtVvsSsH7sjANBgkqhkiG9w0BAQUFADB9
|
3
|
+
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
|
4
|
+
czEwMC4GA1UEAwwnVEVTVCBvZiBFRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBSb290
|
5
|
+
IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwIhgPMjAxMDEwMDcxMjM0NTZa
|
6
|
+
GA8yMDMwMTIxNzIzNTk1OVowfTELMAkGA1UEBhMCRUUxIjAgBgNVBAoMGUFTIFNl
|
7
|
+
cnRpZml0c2VlcmltaXNrZXNrdXMxMDAuBgNVBAMMJ1RFU1Qgb2YgRUUgQ2VydGlm
|
8
|
+
aWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVl
|
9
|
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1gGpqCtDmNNEHUjC8LXq
|
10
|
+
xRdC1kpjDgkzOTxQynzDxw/xCjy5hhyG3xX4RPrW9Z6k5ZNTNS+xzrZgQ9m5U6uM
|
11
|
+
ywYpx3F3DVgbdQLd8DsLmuVOz02k/TwoRt1uP6xtV9qG0HsGvN81q3HvPR/zKtA7
|
12
|
+
MmNZuwuDFQwsguKgDR2Jfk44eKmLfyzvh+Xe6Cr5+zRnsVYwMA9bgBaOZMv1TwTT
|
13
|
+
VNi9H1ltK32Z+IhUX8W5f2qVP33R1wWCKapK1qTX/baXFsBJj++F8I8R6+gSyC3D
|
14
|
+
kV5N/pOlWPzZYx+kHRkRe/oddURA9InJwojbnsH+zJOa2VrNKakNv2HnuYCIonzu
|
15
|
+
pwIDAQABo4GKMIGHMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
|
16
|
+
A1UdDgQWBBS1NAqdpS8QxechDr7EsWVHGwN2/jBFBgNVHSUEPjA8BggrBgEFBQcD
|
17
|
+
AgYIKwYBBQUHAwEGCCsGAQUFBwMDBggrBgEFBQcDBAYIKwYBBQUHAwgGCCsGAQUF
|
18
|
+
BwMJMA0GCSqGSIb3DQEBBQUAA4IBAQAj72VtxIw6p5lqeNmWoQ48j8HnUBM+6mI0
|
19
|
+
I+VkQr0EfQhfmQ5KFaZwnIqxWrEPaxRjYwV0xKa1AixVpFOb1j+XuVmgf7khxXTy
|
20
|
+
Bmd8JRLwl7teCkD1SDnU/yHmwY7MV9FbFBd+5XK4teHVvEVRsJ1oFwgcxVhyoviR
|
21
|
+
SnbIPaOvk+0nxKClrlS6NW5TWZ+yG55z8OCESHaL6JcimkLFjRjSsQDWIEtDvP4S
|
22
|
+
tH3vIMUPPiKdiNkGjVLSdChwkW3z+m0EvAjyD9rnGCmjeEm5diLFu7VMNVqupsbZ
|
23
|
+
SfDzzBLc5+6TqgQTOG7GaZk2diMkn03iLdHGFrh8ML+mXG9SjEPI
|
24
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,37 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIGgzCCBWugAwIBAgIQEDb9gCZi4PdWc7IoNVIbsTANBgkqhkiG9w0BAQwFADB9
|
3
|
+
MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
|
4
|
+
czEwMC4GA1UEAwwnVEVTVCBvZiBFRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBSb290
|
5
|
+
IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwIBcNMTUxMjE4MDcxMzQ0WhgP
|
6
|
+
MjAzMDEyMTcyMzU5NTlaMGsxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0
|
7
|
+
aWZpdHNlZXJpbWlza2Vza3VzMRcwFQYDVQRhDA5OVFJFRS0xMDc0NzAxMzEfMB0G
|
8
|
+
A1UEAwwWVEVTVCBvZiBFU1RFSUQtU0sgMjAxNTCCAiIwDQYJKoZIhvcNAQEBBQAD
|
9
|
+
ggIPADCCAgoCggIBAMTeAFvLxmAeaOsRKaf+hlkOhW+CdEilmUIKWs+qCWVq+w8E
|
10
|
+
8PA/TohAZdUcO4KFXothmPDmfOCb0ExXcnOPCr2NndavzB39htlyYKYxkOkZi3pL
|
11
|
+
z8bZg/HvpBoy8KIg0sYdbhVPYHf6i7fuJjDac4zN1vKdVQXA6Tv5wS/e90/ZyF95
|
12
|
+
5vycxdNLticdozm5yCDMNgsEji6QNA1zIi3+C2YmnDXx6VyxhuC2R3q0xNkwtJ4e
|
13
|
+
zs1RZGxWokTNPzQc3ilGhEJlVsS8vP624hUHwufQnwrKWpc3+D+plMIO0j3E+hmh
|
14
|
+
46gIadDRweFR/dzb+CIBHRaFh0LEBjd/cDFQlBI+E8vpkhqeWp6rp1xwnhCL201M
|
15
|
+
3E1E1Mw+51Xqj7WOfY0TzjOmQJy8WJPEwU2m44KxW1SnpeEBVkgb4XYFeQHAllc7
|
16
|
+
J7JDv50BoIPpecgaqn1vKR7l//wDsL0MN1tDlBhl3x7TJ/fwMnwB1E3zVZR74TUZ
|
17
|
+
h5J49CAcFrfM4RmP/0hcDW8+4wNWMg2Qgst2qmPZmHCI/OJt5yMt0Ud5yPF8AWxV
|
18
|
+
ot3TxOBGjMiM8m6WsksFsQxp5WtA0DANGXIIfydTaTV16Mg+KpYVqFKxkvFBmfVp
|
19
|
+
6xApMaFl3dY/m56O9JHEqFpBDF+uDQIMjFJxJ4Pt7Mdk40zfL4PSw9Qco2T3AgMB
|
20
|
+
AAGjggINMIICCTAfBgNVHSMEGDAWgBS1NAqdpS8QxechDr7EsWVHGwN2/jAdBgNV
|
21
|
+
HQ4EFgQUScDyRDll1ZtGOw04YIOx1i0ohqYwDgYDVR0PAQH/BAQDAgEGMGYGA1Ud
|
22
|
+
IARfMF0wMQYKKwYBBAHOHwMBATAjMCEGCCsGAQUFBwIBFhVodHRwczovL3d3dy5z
|
23
|
+
ay5lZS9DUFMwDAYKKwYBBAHOHwMBAjAMBgorBgEEAc4fAwEDMAwGCisGAQQBzh8D
|
24
|
+
AQQwEgYDVR0TAQH/BAgwBgEB/wIBADBBBgNVHR4EOjA4oTYwBIICIiIwCocIAAAA
|
25
|
+
AAAAAAAwIocgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJwYDVR0l
|
26
|
+
BCAwHgYIKwYBBQUHAwkGCCsGAQUFBwMCBggrBgEFBQcDBDCBiQYIKwYBBQUHAQEE
|
27
|
+
fTB7MCUGCCsGAQUFBzABhhlodHRwOi8vZGVtby5zay5lZS9jYV9vY3NwMFIGCCsG
|
28
|
+
AQUFBzAChkZodHRwOi8vd3d3LnNrLmVlL2NlcnRzL1RFU1Rfb2ZfRUVfQ2VydGlm
|
29
|
+
aWNhdGlvbl9DZW50cmVfUm9vdF9DQS5kZXIuY3J0MEMGA1UdHwQ8MDowOKA2oDSG
|
30
|
+
Mmh0dHBzOi8vd3d3LnNrLmVlL3JlcG9zaXRvcnkvY3Jscy90ZXN0X2VlY2NyY2Eu
|
31
|
+
Y3JsMA0GCSqGSIb3DQEBDAUAA4IBAQDBOYTpbbQuoJKAmtDPpAomDd9mKZCarIPx
|
32
|
+
AH8UXphSndMqOmIUA4oQMrLcZ6a0rMyCFR8x4NX7abc8T81cvgUAWjfNFn8+bi6+
|
33
|
+
DgbjhYY+wZ010MHHdUo2xPajfog8cDWJPkmz+9PAdyjzhb1eYoEnm5D6o4hZQCiR
|
34
|
+
yPnOKp7LZcpsVz1IFXsqP7M5WgHk0SqY1vs+Yhu7zWPSNYFIzNNXGoUtfKhhkHiR
|
35
|
+
WFX/wdzr3fqeaQ3gs/PyD53YuJXRzFrktgJJoJWnHEYIhEwbai9+OeKr4L4kTkxv
|
36
|
+
PKTyjjpLKcjUk0Y0cxg7BuzwevonyBtL72b/FVs6XsXJJqCa3W4T
|
37
|
+
-----END CERTIFICATE-----
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mobile_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Priit Tark
|
@@ -105,6 +105,11 @@ files:
|
|
105
105
|
- README.md
|
106
106
|
- lib/mobile_id.rb
|
107
107
|
- lib/mobile_id/auth.rb
|
108
|
+
- lib/mobile_id/cert.rb
|
109
|
+
- lib/mobile_id/certs/EE_Certification_Centre_Root_CA.pem.crt
|
110
|
+
- lib/mobile_id/certs/ESTEID-SK_2015.pem.crt
|
111
|
+
- lib/mobile_id/certs/TEST_of_EE_Certification_Centre_Root_CA.pem.crt
|
112
|
+
- lib/mobile_id/certs/TEST_of_ESTEID-SK_2015.pem.crt
|
108
113
|
- lib/mobile_id/locales/en.yml
|
109
114
|
- lib/mobile_id/locales/et.yml
|
110
115
|
- lib/mobile_id/locales/ru.yml
|