2 * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Bumjin Im <bj.im@samsung.com>
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License
19 * @author Bartlomiej Grzelewski (b.grzelewski@samsung.com)
20 * @author Zofia Abramowska (z.abramowska@samsung.com)
22 * @brief List of all protocols supported by Central Key Manager.
25 #include <protocols.h>
27 #include <dpl/serialization.h>
31 char const * const SERVICE_SOCKET_ECHO = "/tmp/.central-key-manager-echo.sock";
32 char const * const SERVICE_SOCKET_CKM_CONTROL = "/tmp/.central-key-manager-api-control.sock";
33 char const * const SERVICE_SOCKET_CKM_STORAGE = "/tmp/.central-key-manager-api-storage.sock";
34 char const * const SERVICE_SOCKET_OCSP = "/tmp/.central-key-manager-api-ocsp.sock";
35 char const * const LABEL_NAME_SEPARATOR = " ";
38 const char* const DB_PERM_READ = "R";
39 const char* const DB_PERM_READ_REMOVE = "RD";
42 const char* toDBPermission(Permission access_right_type) {
43 switch(access_right_type) {
44 case Permission::READ: return DB_PERM_READ;
45 case Permission::READ_REMOVE: return DB_PERM_READ_REMOVE;
52 Permission toPermission(const std::string &input_DB_data) {
53 if(input_DB_data == DB_PERM_READ_REMOVE)
54 return Permission::READ_REMOVE;
55 else if(input_DB_data == DB_PERM_READ)
56 return Permission::READ;
58 return Permission::NONE;
62 PKCS12Serializable::PKCS12Serializable() {}
63 PKCS12Serializable::PKCS12Serializable(const PKCS12 &pkcs)
67 PKCS12Serializable::PKCS12Serializable(IStream &stream)
71 Deserialization::Deserialize(stream, numKeys);
75 Deserialization::Deserialize(stream, keyType);
76 Deserialization::Deserialize(stream, keyData);
77 m_pkey = CKM::Key::create(keyData);
82 Deserialization::Deserialize(stream, numCerts);
85 Deserialization::Deserialize(stream, certData);
86 m_cert = CKM::Certificate::create(certData, DataFormat::FORM_DER);
91 Deserialization::Deserialize(stream, num_CA);
92 for(size_t i=0; i<num_CA; i++)
95 Deserialization::Deserialize(stream, CAcertData);
96 m_ca.push_back(CKM::Certificate::create(CAcertData, DataFormat::FORM_DER));
99 PKCS12Serializable::PKCS12Serializable(const KeyShPtr &privKey, const CertificateShPtr &cert, const CertificateShPtrVector &chainCerts)
106 void PKCS12Serializable::Serialize(IStream &stream) const
109 Key *keyPtr = getKey().get();
110 bool isAnyKeyPresent = (getKey().get()!=NULL);
112 // logics if PKCS is correct or not is on the service side.
113 // sending number of keys and certificates to allow proper parsing on the service side.
114 // (what if no key or cert present? attempt to deserialize a not present key/cert would
115 // throw an error and close the connection).
116 Serialization::Serialize(stream, static_cast<size_t>(isAnyKeyPresent?1:0));
118 Serialization::Serialize(stream, DBDataType(keyPtr->getType()));
119 Serialization::Serialize(stream, keyPtr->getDER());
122 bool isAnyCertPresent = (getCertificate().get()!=NULL);
123 Serialization::Serialize(stream, static_cast<size_t>(isAnyCertPresent?1:0));
124 if(isAnyCertPresent) {
125 Serialization::Serialize(stream, getCertificate().get()->getDER());
129 Serialization::Serialize(stream, getCaCertificateShPtrVector().size());
130 for(auto it : getCaCertificateShPtrVector())
131 Serialization::Serialize(stream, it->getDER());