2 * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
17 * @file ckm-manager-async.h
18 * @author Bartlomiej Grzelewski (b.grzelewski@samsung.com)
20 * @brief Async key manager API.
26 #include <ckm/ckm-certificate.h>
27 #include <ckm/ckm-error.h>
28 #include <ckm/ckm-key.h>
29 #include <ckm/ckm-type.h>
30 #include <ckm/ckm-pkcs12.h>
32 // Central Key Manager namespace
35 // Asynchronous interface to Central Key Manager. This implementation uses
36 // internal thread for connection. Key Manager is not thread safe.
44 ManagerAsync(const ManagerAsync&) = delete;
45 ManagerAsync& operator=(const ManagerAsync&) = delete;
47 // Observer will observer custom operation.
49 virtual void ReceivedError(int error) = 0;
51 virtual void ReceivedSaveKey() {}
52 virtual void ReceivedSaveCertificate() {}
53 virtual void ReceivedSaveData() {}
54 virtual void ReceivedSavePKCS12() {}
56 virtual void ReceivedRemovedAlias() {}
58 virtual void ReceivedKey(Key &&) {}
59 virtual void ReceivedCertificate(Certificate &&) {}
60 virtual void ReceivedData(RawBuffer &&) {}
61 virtual void ReceivedPKCS12(PKCS12ShPtr &&) {}
63 virtual void ReceivedKeyAliasVector(AliasVector &&) {}
64 virtual void ReceivedCertificateAliasVector(AliasVector &&) {}
65 virtual void ReceivedDataAliasVector(AliasVector &&) {}
67 virtual void ReceivedCreateKeyPairRSA() {}
68 virtual void ReceivedCreateKeyPairDSA() {}
69 virtual void ReceivedCreateKeyPairECDSA() {}
71 virtual void ReceivedGetCertificateChain(CertificateShPtrVector &&) {}
73 virtual void ReceivedCreateSignature(RawBuffer &&) {}
74 virtual void ReceivedVerifySignature() {}
76 virtual void ReceivedOCSPCheck(int) {}
78 virtual void ReceivedSetPermission() {}
80 virtual ~Observer() {}
83 typedef std::shared_ptr<Observer> ObserverPtr;
85 virtual ~ManagerAsync();
88 const ObserverPtr& observer,
91 const Policy& policy);
93 const ObserverPtr& observer,
95 const CertificateShPtr& cert,
96 const Policy& policy);
98 const ObserverPtr& observer,
100 const RawBuffer& data,
101 const Policy& policy);
103 const ObserverPtr& observer,
105 const PKCS12ShPtr &pkcs,
106 const Policy &keyPolicy,
107 const Policy &certPolicy);
109 void removeAlias(const ObserverPtr& observer, const Alias& alias);
111 void getKey(const ObserverPtr& observer, const Alias& alias, const Password& password);
112 void getCertificate(const ObserverPtr& observer, const Alias& alias, const Password& password);
113 void getData(const ObserverPtr& observer, const Alias& alias, const Password& password);
114 void getPKCS12(const ObserverPtr& observer, const Alias &alias);
116 // send request for list of all keys/certificates/data that application/user may use
117 void getKeyAliasVector(const ObserverPtr& observer);
118 void getCertificateAliasVector(const ObserverPtr& observer);
119 void getDataAliasVector(const ObserverPtr& observer);
121 void createKeyPairRSA(
122 const ObserverPtr& observer,
124 const Alias& privateKeyAlias,
125 const Alias& publicKeyAlias,
126 const Policy& policyPrivateKey = Policy(),
127 const Policy& policyPublicKey = Policy());
128 void createKeyPairDSA(
129 const ObserverPtr& observer,
131 const Alias& privateKeyAlias,
132 const Alias& publicKeyAlias,
133 const Policy& policyPrivateKey = Policy(),
134 const Policy& policyPublicKey = Policy());
135 void createKeyPairECDSA(
136 const ObserverPtr& observer,
137 const ElipticCurve type,
138 const Alias& privateKeyAlias,
139 const Alias& publicKeyAlias,
140 const Policy& policyPrivateKey = Policy(),
141 const Policy& policyPublicKey = Policy());
143 void getCertificateChain(
144 const ObserverPtr& observer,
145 const CertificateShPtr& certificate,
146 const CertificateShPtrVector& untrustedCertificates);
147 void getCertificateChain(
148 const ObserverPtr& observer,
149 const CertificateShPtr& certificate,
150 const AliasVector& untrustedCertificates);
152 void createSignature(
153 const ObserverPtr& observer,
154 const Alias& privateKeyAlias,
155 const Password& password, // password for private_key
156 const RawBuffer& message,
157 const HashAlgorithm hash,
158 const RSAPaddingAlgorithm padding);
159 void verifySignature(
160 const ObserverPtr& observer,
161 const Alias& publicKeyOrCertAlias,
162 const Password& password, // password for public_key (optional)
163 const RawBuffer& message,
164 const RawBuffer& signature,
165 const HashAlgorithm hash,
166 const RSAPaddingAlgorithm padding);
168 // This function will check all certificates in chain except Root CA.
169 // This function will delegate task to service. You may use this even
170 // if application does not have permission to use network.
172 const ObserverPtr& observer,
173 const CertificateShPtrVector& certificateChainVector);
176 const ObserverPtr& observer,
178 const Label& accessor,
179 Permission newPermission);
182 std::unique_ptr<Impl> m_impl;