CAPI cleanup: control "owner" removal, set_permission replaces allow_access.
[platform/core/security/key-manager.git] / src / manager / common / protocols.cpp
1 /*
2  *  Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *  Contact: Bumjin Im <bj.im@samsung.com>
5  *
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
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
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
17  *
18  * @file        protocols.cpp
19  * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
20  * @author      Zofia Abramowska (z.abramowska@samsung.com)
21  * @version     1.0
22  * @brief       List of all protocols supported by Central Key Manager.
23  */
24
25 #include <protocols.h>
26
27 #include <dpl/serialization.h>
28
29 namespace CKM {
30
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 = " ";
36
37
38 PKCS12Serializable::PKCS12Serializable() {}
39 PKCS12Serializable::PKCS12Serializable(const PKCS12 &pkcs)
40     : PKCS12Impl(pkcs)
41 {}
42
43 PKCS12Serializable::PKCS12Serializable(IStream &stream)
44 {
45     // key
46     size_t numKeys;
47     Deserialization::Deserialize(stream, numKeys);
48     if(numKeys > 0) {
49         int keyType;
50         RawBuffer keyData;
51         Deserialization::Deserialize(stream, keyType);
52         Deserialization::Deserialize(stream, keyData);
53         m_pkey = CKM::Key::create(keyData);
54     }
55
56     // cert
57     size_t numCerts;
58     Deserialization::Deserialize(stream, numCerts);
59     if(numCerts > 0) {
60         RawBuffer certData;
61         Deserialization::Deserialize(stream, certData);
62         m_cert = CKM::Certificate::create(certData, DataFormat::FORM_DER);
63     }
64
65     // CA chain
66     size_t num_CA;
67     Deserialization::Deserialize(stream, num_CA);
68     for(size_t i=0; i<num_CA; i++)
69     {
70         RawBuffer CAcertData;
71         Deserialization::Deserialize(stream, CAcertData);
72         m_ca.push_back(CKM::Certificate::create(CAcertData, DataFormat::FORM_DER));
73     }
74 }
75 PKCS12Serializable::PKCS12Serializable(const KeyShPtr &privKey, const CertificateShPtr &cert, const CertificateShPtrVector &chainCerts)
76 {
77     m_pkey = privKey;
78     m_cert = cert;
79     m_ca = chainCerts;
80 }
81
82 void PKCS12Serializable::Serialize(IStream &stream) const
83 {
84     // key
85     Key *keyPtr = getKey().get();
86     bool isAnyKeyPresent = (getKey().get()!=NULL);
87
88     // logics if PKCS is correct or not is on the service side.
89     // sending number of keys and certificates to allow proper parsing on the service side.
90     // (what if no key or cert present? attempt to deserialize a not present key/cert would
91     // throw an error and close the connection).
92     Serialization::Serialize(stream, static_cast<size_t>(isAnyKeyPresent?1:0));
93     if(keyPtr) {
94         Serialization::Serialize(stream, DBDataType(keyPtr->getType()));
95         Serialization::Serialize(stream, keyPtr->getDER());
96     }
97
98     bool isAnyCertPresent = (getCertificate().get()!=NULL);
99     Serialization::Serialize(stream, static_cast<size_t>(isAnyCertPresent?1:0));
100     if(isAnyCertPresent) {
101         Serialization::Serialize(stream, getCertificate().get()->getDER());
102     }
103
104     // CA chain
105     Serialization::Serialize(stream, getCaCertificateShPtrVector().size());
106     for(auto it : getCaCertificateShPtrVector())
107         Serialization::Serialize(stream, it->getDER());
108 };
109
110 } // namespace CKM
111