mobile_id 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ac2213a077be1331007897be4a68ddde6e428cb7b4a0ca712950367d38c5d6c7
4
- data.tar.gz: 7d7736fb27da9413c707b30ea98797a5dcbe05160ff2fc434b802fdf58310645
3
+ metadata.gz: 5a39f8c3482b16724603fe8f0d104e9cab10e154be69a30a81cf2cec0b5cfc33
4
+ data.tar.gz: 3a96e0f7adae83b23d357bc3ab17dffbf921e66e8f2b422830226f56c67654aa
5
5
  SHA512:
6
- metadata.gz: 3e04950d1fda22037f6e7f5f72bbf1b0f4038632028940e80bb020626efa54b46d94bd1af4f01c99113db5cf6f58fa6f6e2a6578543ef6b85771e6a88ef86487
7
- data.tar.gz: bee3d0498d13db91e956c8daf69df2bd4e3c659be5379e40b1a6a9e1d3e7ddbd5f58c310f01c1bd9ed16f6ee92ee4ed6ea027627f770a7915fedda5a3e198382
6
+ metadata.gz: 8bacbcf4ddd115634ced32037fd54f2f0109cf9329a75f1c4525ce337c65bcf197fe942cf9ba7ce0e3fe2a148eb1937c3b262ce365eb44656a88f51fee66df31
7
+ data.tar.gz: 65e6235749c5017fc3b263a95d0d6aa18c399a49b511dd35f6bfdbc58ecddb151374e3cac3f23b7a13cfda54856da19197ac5128244923961ba0c9faf76d9473
@@ -1,3 +1,6 @@
1
+ Release 0.0.5
2
+ * Added user certificate validation
3
+
1
4
  Release 0.0.4
2
5
  * Refactored MobileId to MobileId::Auth
3
6
 
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
 
@@ -17,4 +17,5 @@ module MobileId
17
17
  LOCALES = [:en, :et, :ru]
18
18
  end
19
19
 
20
+ require 'mobile_id/cert'
20
21
  require 'mobile_id/auth'
@@ -9,13 +9,20 @@ 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, :cert, :cert_subject
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.hash = Digest::SHA256.base64digest(SecureRandom.uuid)
18
+ self.live = live
19
+ init_doc(SecureRandom.uuid)
20
+ end
21
+
22
+ def init_doc(doc)
23
+ self.doc = doc
24
+
25
+ self.hash = Digest::SHA256.base64digest(self.doc)
19
26
  end
20
27
 
21
28
  def authenticate!(phone_calling_code: nil, phone:, personal_code:, language: nil, display_text: nil)
@@ -58,12 +65,13 @@ module MobileId
58
65
  ActiveSupport::HashWithIndifferentAccess.new(
59
66
  session_id: response['sessionID'],
60
67
  phone: phone,
61
- phone_calling_code: phone_calling_code
68
+ phone_calling_code: phone_calling_code,
69
+ doc: doc
62
70
  )
63
71
  end
64
72
 
65
73
  def verify!(auth)
66
- long_poll!(session_id: auth['session_id'])
74
+ long_poll!(session_id: auth['session_id'], doc: auth['doc'])
67
75
 
68
76
  ActiveSupport::HashWithIndifferentAccess.new(
69
77
  personal_code: personal_code,
@@ -75,7 +83,7 @@ module MobileId
75
83
  )
76
84
  end
77
85
 
78
- def long_poll!(session_id:)
86
+ def long_poll!(session_id:, doc:)
79
87
  response = HTTParty.get(url + "/authentication/session/#{session_id}")
80
88
  raise Error, "#{I18n.t('mobile_id.some_error')} #{response.code} #{response}" if response.code != 200
81
89
 
@@ -100,9 +108,9 @@ module MobileId
100
108
  raise Error, message
101
109
  end
102
110
 
103
- self.cert = OpenSSL::X509::Certificate.new(Base64.decode64(response['cert']))
104
- self.cert_subject = build_cert_subject
105
- cert
111
+ @user_cert = MobileId::Cert.new(response['cert'], live: live)
112
+ @user_cert.verify_signature!(response['signature']['value'], doc)
113
+ self.user_cert = @user_cert
106
114
  end
107
115
 
108
116
  def verification_code
@@ -110,41 +118,30 @@ module MobileId
110
118
  end
111
119
 
112
120
  def given_name
113
- cert_subject["GN"].tr(",", " ")
121
+ user_cert.given_name
114
122
  end
115
123
  alias first_name given_name
116
124
 
117
125
  def surname
118
- cert_subject["SN"].tr(",", " ")
126
+ user_cert.surname
119
127
  end
120
128
  alias last_name surname
121
129
 
122
130
  def country
123
- cert_subject["C"].tr(",", " ")
131
+ user_cert.country
124
132
  end
125
133
 
126
134
  def common_name
127
- cert_subject["CN"]
135
+ user_cert.common_name
128
136
  end
129
137
 
130
138
  def organizational_unit
131
- cert_subject["OU"]
139
+ user_cert.organizational_unit
132
140
  end
133
141
 
134
142
  def serial_number
135
- cert_subject["serialNumber"]
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,93 @@
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('lib/mobile_id/certs/') + '/')
8
+ end
9
+
10
+ def live_store
11
+ @live_store ||=
12
+ build_store([
13
+ root_path + 'EE_Certification_Centre_Root_CA.pem.crt',
14
+ root_path + 'ESTEID-SK_2015.pem.crt'
15
+ ])
16
+ end
17
+
18
+ def test_store
19
+ @test_store ||=
20
+ build_store([
21
+ root_path + 'TEST_of_EE_Certification_Centre_Root_CA.pem.crt',
22
+ 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, doc)
51
+ # TODO OpenSSL does not parse signature
52
+ # cert.public_key.verify(OpenSSL::Digest::SHA256.new, signature, doc)
53
+ end
54
+
55
+ def given_name
56
+ subject["GN"].tr(",", " ")
57
+ end
58
+ alias first_name given_name
59
+
60
+ def surname
61
+ subject["SN"].tr(",", " ")
62
+ end
63
+ alias last_name surname
64
+
65
+ def country
66
+ subject["C"].tr(",", " ")
67
+ end
68
+
69
+ def common_name
70
+ subject["CN"]
71
+ end
72
+
73
+ def organizational_unit
74
+ subject["OU"]
75
+ end
76
+
77
+ def serial_number
78
+ subject["serialNumber"]
79
+ end
80
+ alias personal_code serial_number
81
+
82
+ private
83
+
84
+ def build_cert_subject
85
+ self.subject = cert.subject.to_utf8.split(/(?<!\\)\,+/).each_with_object({}) do |c, result|
86
+ next unless c.include?("=")
87
+
88
+ key, val = c.split("=")
89
+ result[key] = val
90
+ end
91
+ end
92
+ end
93
+ 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
4
+ version: 0.0.5
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