virgil-sdk 4.2.3
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 +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +15 -0
- data/Gemfile +4 -0
- data/README.md +134 -0
- data/Rakefile +9 -0
- data/bin/console +16 -0
- data/bin/setup +8 -0
- data/dockefiles/Dockerfile-200 +25 -0
- data/dockefiles/Dockerfile-2110 +36 -0
- data/dockefiles/Dockerfile-220 +26 -0
- data/dockefiles/Dockerfile-226 +25 -0
- data/dockefiles/Dockerfile-233 +25 -0
- data/dockefiles/Dockerfile-240 +26 -0
- data/docker-compose.yml +107 -0
- data/lib/virgil/sdk.rb +10 -0
- data/lib/virgil/sdk/client.rb +47 -0
- data/lib/virgil/sdk/client/card.rb +142 -0
- data/lib/virgil/sdk/client/card_validator.rb +104 -0
- data/lib/virgil/sdk/client/http.rb +45 -0
- data/lib/virgil/sdk/client/http/base_connection.rb +112 -0
- data/lib/virgil/sdk/client/http/cards_service_connection.rb +113 -0
- data/lib/virgil/sdk/client/http/request.rb +63 -0
- data/lib/virgil/sdk/client/request_signer.rb +90 -0
- data/lib/virgil/sdk/client/requests.rb +50 -0
- data/lib/virgil/sdk/client/requests/confirm_identity_request.rb +67 -0
- data/lib/virgil/sdk/client/requests/create_card_request.rb +105 -0
- data/lib/virgil/sdk/client/requests/revoke_card_request.rb +85 -0
- data/lib/virgil/sdk/client/requests/signable_request.rb +142 -0
- data/lib/virgil/sdk/client/requests/verify_identity_request.rb +60 -0
- data/lib/virgil/sdk/client/search_criteria.rb +79 -0
- data/lib/virgil/sdk/client/signatures_base64.rb +25 -0
- data/lib/virgil/sdk/client/virgil_client.rb +425 -0
- data/lib/virgil/sdk/cryptography.rb +42 -0
- data/lib/virgil/sdk/cryptography/hashes.rb +44 -0
- data/lib/virgil/sdk/cryptography/hashes/fingerprint.rb +79 -0
- data/lib/virgil/sdk/cryptography/hashes/hash_algorithm.rb +91 -0
- data/lib/virgil/sdk/cryptography/keys.rb +48 -0
- data/lib/virgil/sdk/cryptography/keys/key_pair.rb +46 -0
- data/lib/virgil/sdk/cryptography/keys/key_pair_type.rb +108 -0
- data/lib/virgil/sdk/cryptography/keys/key_storage.rb +177 -0
- data/lib/virgil/sdk/cryptography/keys/private_key.rb +44 -0
- data/lib/virgil/sdk/cryptography/keys/public_key.rb +44 -0
- data/lib/virgil/sdk/cryptography/keys/storage_item.rb +63 -0
- data/lib/virgil/sdk/cryptography/virgil_crypto.rb +411 -0
- data/lib/virgil/sdk/high_level.rb +21 -0
- data/lib/virgil/sdk/high_level/virgil_api.rb +71 -0
- data/lib/virgil/sdk/high_level/virgil_app_credentials.rb +54 -0
- data/lib/virgil/sdk/high_level/virgil_buffer.rb +161 -0
- data/lib/virgil/sdk/high_level/virgil_card.rb +204 -0
- data/lib/virgil/sdk/high_level/virgil_card_manager.rb +294 -0
- data/lib/virgil/sdk/high_level/virgil_card_verifier_info.rb +49 -0
- data/lib/virgil/sdk/high_level/virgil_context.rb +69 -0
- data/lib/virgil/sdk/high_level/virgil_identity.rb +17 -0
- data/lib/virgil/sdk/high_level/virgil_identity/email_confirmation.rb +60 -0
- data/lib/virgil/sdk/high_level/virgil_identity/validation_token.rb +49 -0
- data/lib/virgil/sdk/high_level/virgil_identity/verification_attempt.rb +69 -0
- data/lib/virgil/sdk/high_level/virgil_identity/verification_options.rb +56 -0
- data/lib/virgil/sdk/high_level/virgil_key.rb +168 -0
- data/lib/virgil/sdk/high_level/virgil_key_manager.rb +97 -0
- data/lib/virgil/sdk/version.rb +5 -0
- data/virgil-sdk.gemspec +31 -0
- metadata +203 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
# Copyright (C) 2016 Virgil Security Inc.
|
2
|
+
#
|
3
|
+
# Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
|
4
|
+
#
|
5
|
+
# All rights reserved.
|
6
|
+
#
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
8
|
+
# modification, are permitted provided that the following conditions are
|
9
|
+
# met:
|
10
|
+
#
|
11
|
+
# (1) Redistributions of source code must retain the above copyright
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
13
|
+
#
|
14
|
+
# (2) Redistributions in binary form must reproduce the above copyright
|
15
|
+
# notice, this list of conditions and the following disclaimer in
|
16
|
+
# the documentation and/or other materials provided with the
|
17
|
+
# distribution.
|
18
|
+
#
|
19
|
+
# (3) Neither the name of the copyright holder nor the names of its
|
20
|
+
# contributors may be used to endorse or promote products derived from
|
21
|
+
# this software without specific prior written permission.
|
22
|
+
#
|
23
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
|
24
|
+
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
25
|
+
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
26
|
+
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
27
|
+
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
28
|
+
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
29
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
30
|
+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
31
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
32
|
+
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
33
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
34
|
+
module Virgil
|
35
|
+
module SDK
|
36
|
+
module HighLevel
|
37
|
+
module VirgilIdentity
|
38
|
+
class ValidationToken
|
39
|
+
attr_reader :value
|
40
|
+
|
41
|
+
def initialize(value)
|
42
|
+
@value = value
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Copyright (C) 2016 Virgil Security Inc.
|
2
|
+
#
|
3
|
+
# Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
|
4
|
+
#
|
5
|
+
# All rights reserved.
|
6
|
+
#
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
8
|
+
# modification, are permitted provided that the following conditions are
|
9
|
+
# met:
|
10
|
+
#
|
11
|
+
# (1) Redistributions of source code must retain the above copyright
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
13
|
+
#
|
14
|
+
# (2) Redistributions in binary form must reproduce the above copyright
|
15
|
+
# notice, this list of conditions and the following disclaimer in
|
16
|
+
# the documentation and/or other materials provided with the
|
17
|
+
# distribution.
|
18
|
+
#
|
19
|
+
# (3) Neither the name of the copyright holder nor the names of its
|
20
|
+
# contributors may be used to endorse or promote products derived from
|
21
|
+
# this software without specific prior written permission.
|
22
|
+
#
|
23
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
|
24
|
+
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
25
|
+
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
26
|
+
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
27
|
+
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
28
|
+
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
29
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
30
|
+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
31
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
32
|
+
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
33
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
34
|
+
module Virgil
|
35
|
+
module SDK
|
36
|
+
module HighLevel
|
37
|
+
module VirgilIdentity
|
38
|
+
class VerificationAttempt
|
39
|
+
attr_reader :action_id, :context, :additional_options, :identity, :identity_type
|
40
|
+
|
41
|
+
def initialize(context:, action_id:, identity:, identity_type:, additional_options: nil)
|
42
|
+
@context = context
|
43
|
+
@action_id = action_id
|
44
|
+
@identity = identity
|
45
|
+
@identity_type = identity_type
|
46
|
+
@additional_options = additional_options || VerificationOptions.new
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
def confirm(confirmation)
|
51
|
+
raise ConfirmationIsNotValid unless confirmation
|
52
|
+
token = confirmation.confirm_and_grab_validation_token(self, self.context.client)
|
53
|
+
ValidationToken.new(token)
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
class ConfirmationIsNotValid < StandardError
|
60
|
+
def to_s
|
61
|
+
"Confirmation is not valid"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Copyright (C) 2016 Virgil Security Inc.
|
2
|
+
#
|
3
|
+
# Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
|
4
|
+
#
|
5
|
+
# All rights reserved.
|
6
|
+
#
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
8
|
+
# modification, are permitted provided that the following conditions are
|
9
|
+
# met:
|
10
|
+
#
|
11
|
+
# (1) Redistributions of source code must retain the above copyright
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
13
|
+
#
|
14
|
+
# (2) Redistributions in binary form must reproduce the above copyright
|
15
|
+
# notice, this list of conditions and the following disclaimer in
|
16
|
+
# the documentation and/or other materials provided with the
|
17
|
+
# distribution.
|
18
|
+
#
|
19
|
+
# (3) Neither the name of the copyright holder nor the names of its
|
20
|
+
# contributors may be used to endorse or promote products derived from
|
21
|
+
# this software without specific prior written permission.
|
22
|
+
#
|
23
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
|
24
|
+
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
25
|
+
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
26
|
+
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
27
|
+
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
28
|
+
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
29
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
30
|
+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
31
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
32
|
+
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
33
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
34
|
+
module Virgil
|
35
|
+
module SDK
|
36
|
+
module HighLevel
|
37
|
+
module VirgilIdentity
|
38
|
+
class VerificationOptions
|
39
|
+
|
40
|
+
# time_to_live is used to limit the lifetime of the token in
|
41
|
+
# seconds (maximum value is 60 * 60 * 24 * 365 = 1 year). Default value is 3600.
|
42
|
+
#
|
43
|
+
# count_to_live parameter is used to restrict the number of validation token
|
44
|
+
# usages (maximum value is 100).
|
45
|
+
attr_reader :time_to_live, :count_to_live
|
46
|
+
|
47
|
+
def initialize(options = {})
|
48
|
+
@time_to_live = options[:time_to_live] || 3600
|
49
|
+
@count_to_live = options[:count_to_live] || 12
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
# Copyright (C) 2016 Virgil Security Inc.
|
2
|
+
#
|
3
|
+
# Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
|
4
|
+
#
|
5
|
+
# All rights reserved.
|
6
|
+
#
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
8
|
+
# modification, are permitted provided that the following conditions are
|
9
|
+
# met:
|
10
|
+
#
|
11
|
+
# (1) Redistributions of source code must retain the above copyright
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
13
|
+
#
|
14
|
+
# (2) Redistributions in binary form must reproduce the above copyright
|
15
|
+
# notice, this list of conditions and the following disclaimer in
|
16
|
+
# the documentation and/or other materials provided with the
|
17
|
+
# distribution.
|
18
|
+
#
|
19
|
+
# (3) Neither the name of the copyright holder nor the names of its
|
20
|
+
# contributors may be used to endorse or promote products derived from
|
21
|
+
# this software without specific prior written permission.
|
22
|
+
#
|
23
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
|
24
|
+
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
25
|
+
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
26
|
+
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
27
|
+
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
28
|
+
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
29
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
30
|
+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
31
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
32
|
+
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
33
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
34
|
+
module Virgil
|
35
|
+
module SDK
|
36
|
+
module HighLevel
|
37
|
+
# This class represents a user's high-level Private key which provides
|
38
|
+
# a list of methods that allows to store the key and perform cryptographic operations like
|
39
|
+
# Decrypt, Sign etc.
|
40
|
+
class VirgilKey
|
41
|
+
attr_reader :context, :private_key
|
42
|
+
|
43
|
+
def initialize(context, private_key)
|
44
|
+
@context = context
|
45
|
+
@private_key = private_key
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# Decrypts the specified cipher data using Virgil key.
|
50
|
+
#
|
51
|
+
# Args:
|
52
|
+
# cipher_buffer: The encrypted data wrapped by VirgilBuffer.
|
53
|
+
#
|
54
|
+
# Returns:
|
55
|
+
# A byte array containing the result from performing the operation wrapped by VirgilBuffer.
|
56
|
+
#
|
57
|
+
# Raises:
|
58
|
+
# ArgumentError: buffer is not valid if buffer doesn't have type VirgilBuffer or String
|
59
|
+
# Recipient with given identifier is not found if user tries to decrypt cipher data by private key,
|
60
|
+
# though its public key was not used for encryption
|
61
|
+
def decrypt(cipher_buffer)
|
62
|
+
VirgilBuffer.validate_buffer_param(cipher_buffer, "cipher buffer")
|
63
|
+
bytes = context.crypto.decrypt(cipher_buffer.bytes, private_key)
|
64
|
+
VirgilBuffer.new(bytes)
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
# Generates a digital signature for specified data using current Virgil key.
|
69
|
+
#
|
70
|
+
# Args:
|
71
|
+
# buffer: The data wrapped by VirgilBuffer for which the digital signature will be generated.
|
72
|
+
#
|
73
|
+
# Returns:
|
74
|
+
# A new buffer that containing the result from performing the operation.
|
75
|
+
#
|
76
|
+
# Raises:
|
77
|
+
# ArgumentError: buffer is not valid if buffer doesn't have type VirgilBuffer or String
|
78
|
+
def sign(buffer)
|
79
|
+
VirgilBuffer.validate_buffer_param(buffer)
|
80
|
+
bytes = context.crypto.sign(buffer.bytes, private_key)
|
81
|
+
VirgilBuffer.new(bytes)
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
# Encrypts and signs the data.
|
86
|
+
#
|
87
|
+
# Args:
|
88
|
+
# buffer: The data wrapped by VirgilBuffer to be encrypted and signed
|
89
|
+
# recipients: The list of VirgilCard recipients.
|
90
|
+
#
|
91
|
+
# Returns:
|
92
|
+
# A new buffer that containing the encrypted and signed data
|
93
|
+
#
|
94
|
+
|
95
|
+
# Raises:
|
96
|
+
# ArgumentError: buffer is not valid if buffer doesn't have type VirgilBuffer or String
|
97
|
+
# ArgumentError: recipients is not valid if recipients doesn't have type Array or empty
|
98
|
+
def sign_then_encrypt(buffer, recipients)
|
99
|
+
|
100
|
+
VirgilBuffer.validate_buffer_param(buffer)
|
101
|
+
raise ArgumentError.new("recipients is not valid") if (!recipients.is_a?(Array) || recipients.empty?)
|
102
|
+
public_keys = recipients.map(&:public_key)
|
103
|
+
bytes = context.crypto.sign_then_encrypt(buffer.bytes, private_key, *public_keys)
|
104
|
+
VirgilBuffer.new(bytes)
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
# Decrypts and verifies the data.
|
110
|
+
#
|
111
|
+
# Args:
|
112
|
+
# cipher_buffer: The data to be decrypted and verified
|
113
|
+
# card: The signer's VirgilCard
|
114
|
+
#
|
115
|
+
# Returns:
|
116
|
+
# The decrypted data, which is the original plain text before encryption The decrypted data, wrapped by VirgilBuffer
|
117
|
+
#
|
118
|
+
# Raises:
|
119
|
+
# ArgumentError: buffer is not valid if buffer doesn't have type VirgilBuffer or String
|
120
|
+
# ArgumentError: recipients is not valid if recipients doesn't have type Array or empty
|
121
|
+
def decrypt_then_verify(cipher_buffer, card)
|
122
|
+
|
123
|
+
VirgilBuffer.validate_buffer_param(cipher_buffer, "cipher buffer")
|
124
|
+
raise ArgumentError.new("card is not valid") unless card.is_a?(VirgilCard)
|
125
|
+
|
126
|
+
bytes = context.crypto.decrypt_then_verify(cipher_buffer.bytes, private_key, card.public_key)
|
127
|
+
VirgilBuffer.new(bytes)
|
128
|
+
end
|
129
|
+
|
130
|
+
|
131
|
+
# Saves a current VirgilKey in secure storage.
|
132
|
+
#
|
133
|
+
# Args:
|
134
|
+
# key_name: The name of the key.
|
135
|
+
# key_password: The key password.
|
136
|
+
#
|
137
|
+
# Returns:
|
138
|
+
# An instance of VirgilKey class
|
139
|
+
#
|
140
|
+
# Raises:
|
141
|
+
# KeyEntryAlreadyExistsException: if key storage already has item with such name
|
142
|
+
# ArgumentError: key_name is not valid if key_name is nil
|
143
|
+
# KeyStorageException: Destination folder doesn't exist or you don't have permission to write there
|
144
|
+
def save(key_name, key_password=nil)
|
145
|
+
|
146
|
+
raise ArgumentError.new("key_name is not valid") if key_name.nil?
|
147
|
+
|
148
|
+
exported_private_key = context.crypto.export_private_key(private_key, key_password)
|
149
|
+
storage_item = Cryptography::Keys::StorageItem.new(key_name, exported_private_key)
|
150
|
+
context.key_storage.store(storage_item)
|
151
|
+
self
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
|
156
|
+
# Exports the Public key value from current VirgilKey.
|
157
|
+
#
|
158
|
+
# Returns:
|
159
|
+
# A new VirgilBuffer that contains Public Key value.
|
160
|
+
def export_public_key
|
161
|
+
public_key = context.crypto.extract_public_key(private_key)
|
162
|
+
VirgilBuffer.from_bytes(context.crypto.export_public_key(public_key))
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# Copyright (C) 2016 Virgil Security Inc.
|
2
|
+
#
|
3
|
+
# Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
|
4
|
+
#
|
5
|
+
# All rights reserved.
|
6
|
+
#
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
8
|
+
# modification, are permitted provided that the following conditions are
|
9
|
+
# met:
|
10
|
+
#
|
11
|
+
# (1) Redistributions of source code must retain the above copyright
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
13
|
+
#
|
14
|
+
# (2) Redistributions in binary form must reproduce the above copyright
|
15
|
+
# notice, this list of conditions and the following disclaimer in
|
16
|
+
# the documentation and/or other materials provided with the
|
17
|
+
# distribution.
|
18
|
+
#
|
19
|
+
# (3) Neither the name of the copyright holder nor the names of its
|
20
|
+
# contributors may be used to endorse or promote products derived from
|
21
|
+
# this software without specific prior written permission.
|
22
|
+
#
|
23
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
|
24
|
+
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
25
|
+
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
26
|
+
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
27
|
+
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
28
|
+
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
29
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
30
|
+
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
31
|
+
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
32
|
+
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
33
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
34
|
+
module Virgil
|
35
|
+
module SDK
|
36
|
+
module HighLevel
|
37
|
+
# this class provides a list of methods to generate the VirgilKey
|
38
|
+
# and further them storage in secure place.
|
39
|
+
class VirgilKeyManager
|
40
|
+
attr_reader :context
|
41
|
+
|
42
|
+
def initialize(context)
|
43
|
+
@context = context
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
# Generates a new VirgilKey with default parameters.
|
48
|
+
def generate
|
49
|
+
key_pair = context.crypto.generate_keys()
|
50
|
+
VirgilKey.new(context, key_pair.private_key)
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
# Loads the VirgilKey from current storage by specified key name.
|
55
|
+
#
|
56
|
+
# Args:
|
57
|
+
# key_name: The name of the key.
|
58
|
+
# key_password: The key password.
|
59
|
+
#
|
60
|
+
# Returns:
|
61
|
+
# An instance of VirgilKey class
|
62
|
+
#
|
63
|
+
# Raises:
|
64
|
+
# KeyEntryNotFoundException: if key storage doesn't have item with such name
|
65
|
+
# ArgumentError: key_name is not valid if key_name is nil
|
66
|
+
# KeyStorageException: Destination folder doesn't exist or you don't have permission to write there
|
67
|
+
def load(key_name, key_password=nil)
|
68
|
+
|
69
|
+
raise ArgumentError.new("key_name is not valid") if key_name.nil?
|
70
|
+
|
71
|
+
storage_item = context.key_storage.load(key_name)
|
72
|
+
private_key = context.crypto.import_private_key(storage_item.data, key_password)
|
73
|
+
VirgilKey.new(context, private_key)
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
# Remove the VirgilKey from current storage by specified key name.
|
79
|
+
#
|
80
|
+
# Args:
|
81
|
+
# key_name: The name of the key.
|
82
|
+
#
|
83
|
+
# Raises:
|
84
|
+
# KeyEntryNotFoundException: if key storage doesn't have item with such name
|
85
|
+
# ArgumentError: key_name is not valid if key_name is nil
|
86
|
+
# KeyStorageException: Destination folder doesn't exist or you don't have permission to write there
|
87
|
+
def delete(key_name)
|
88
|
+
|
89
|
+
raise ArgumentError.new("key_name is not valid") if key_name.nil?
|
90
|
+
|
91
|
+
context.key_storage.delete(key_name)
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|