Use proper constant in TZ data import
[platform/core/security/key-manager.git] / src / manager / crypto / tz-backend / tz-context.h
1 /*
2  *  Copyright (c) 2017 - 2019 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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
15  */
16 /*
17  * @file       tz-context.h
18  * @author     Lukasz Kostyra (l.kostyra@samsung.com)
19  * @version    1.0
20  */
21 #pragma once
22
23 #include <tee_client_api.h>
24 #include <ckm/ckm-raw-buffer.h>
25 #include <data-type.h>
26 #include <km_ta_defines.h>
27 #include <memory>
28 #include <tz-backend/obj.h>
29 #include <generic-backend/encryption-params.h>
30 #include <tz-backend/tz-serializer.h>
31
32 namespace CKM {
33 namespace Crypto {
34 namespace TZ {
35 namespace Internals {
36
37 class TrustZoneContext final
38 {
39 public:
40         static TrustZoneContext& Instance();
41
42         void generateIV(RawBuffer &iv);
43         void generateSKey(tz_algo_type algo,
44                                         uint32_t keySizeBits,
45                                         const RawBuffer &hash);
46         void generateSKeyPwd(tz_algo_type algo,
47                                                 const RawBuffer &pwd,
48                                                 const RawBuffer &iv,
49                                                 const uint32_t pwdKeySizeBits,
50                                                 RawBuffer &pwdTag,
51                                                 const RawBuffer &hash);
52         void generateRSAKey(uint32_t keySizeBits,
53                                         const RawBuffer &pubPwd,
54                                         const RawBuffer &pubPwdIv,
55                                         const RawBuffer &privPwd,
56                                         const RawBuffer &privPwdIv,
57                                         RawBuffer &pubKeyTag,
58                                         RawBuffer &privKeyTag,
59                                         const RawBuffer &hashPriv,
60                                         const RawBuffer &hashPub);
61         void generateDSAKey(uint32_t keySizeBits,
62                                                 const RawBuffer &prime,
63                                                 const RawBuffer &subprime,
64                                                 const RawBuffer &base,
65                                                 const RawBuffer &pubPwd,
66                                                 const RawBuffer &pubPwdIv,
67                                                 const RawBuffer &privPwd,
68                                                 const RawBuffer &privPwdIv,
69                                                 RawBuffer &pubKeyTag,
70                                                 RawBuffer &privKeyTag,
71                                                 const RawBuffer &hashPriv,
72                                                 const RawBuffer &hashPub);
73
74         void importData(uint32_t dataType,
75                                         const RawBuffer &data,
76                                         const Crypto::EncryptionParams &encData,
77                                         const RawBuffer &pwd,
78                                         const RawBuffer &pwdIV,
79                                         const uint32_t keySizeBits,
80                                         RawBuffer &pwdTag,
81                                         const RawBuffer &hash);
82
83         void executeCrypt(tz_command cmd,
84                                         tz_algo_type algo,
85                                         const RawBuffer &keyId,
86                                         const Pwd &pwd,
87                                         const RawBuffer &iv,
88                                         const RawBuffer &data,
89                                         RawBuffer &out);
90
91         void executeEncryptAE(const RawBuffer &keyId,
92                                                 const Pwd &pwd,
93                                                 const RawBuffer &iv,
94                                                 int tagSizeBits,
95                                                 const RawBuffer &aad,
96                                                 const RawBuffer &data,
97                                                 RawBuffer &out,
98                                                 RawBuffer &tag);
99         void executeDecryptAE(const RawBuffer &keyId,
100                                                 const Pwd &pwd,
101                                                 const RawBuffer &iv,
102                                                 int tagSizeBits,
103                                                 const RawBuffer &tag,
104                                                 const RawBuffer &aad,
105                                                 const RawBuffer &data,
106                                                 RawBuffer &out);
107
108         void executeSign(tz_algo_type algo,
109                                         tz_hash_type hash,
110                                         const RawBuffer &keyId,
111                                         const Pwd &pwd,
112                                         const RawBuffer &message,
113                                         RawBuffer &signature);
114         int executeVerify(tz_algo_type algo,
115                                         tz_hash_type hash,
116                                         const RawBuffer &keyId,
117                                         const Pwd &pwd,
118                                         const RawBuffer &message,
119                                         const RawBuffer &signature);
120
121         void executeDestroy(const RawBuffer &keyId);
122
123         void getData(const RawBuffer &dataId,
124                                  const Pwd &pwd,
125                                  RawBuffer &data);
126
127         void destroyData(const RawBuffer &dataId);
128
129 private:
130         TrustZoneContext();
131         ~TrustZoneContext();
132         TrustZoneContext(const TrustZoneContext &other) = delete;
133         TrustZoneContext(TrustZoneContext &&other) = delete;
134
135         void Initialize();
136         void Destroy();
137         void Reload();
138
139         void GetDataSize(const RawBuffer &dataId, uint32_t &dataSize);
140
141         void Execute(tz_command commandID, TEEC_Operation* op);
142
143         void GenerateAKey(tz_command commandID,
144                           TZSerializer &sIn,
145                           uint32_t keySizeBits,
146                           const RawBuffer &pubPwd,
147                           const RawBuffer &pubPwdIv,
148                           const RawBuffer &privPwd,
149                           const RawBuffer &privPwdIv,
150                           RawBuffer &pubKeyTag,
151                           RawBuffer &privKeyTag,
152                           const RawBuffer &hashPriv,
153                                           const RawBuffer &hashPub);
154
155         TEEC_Context m_Context;
156         TEEC_Session m_Session;
157
158         bool m_ContextInitialized;
159         bool m_SessionInitialized;
160 };
161
162 } // namespace Internals
163 } // namespace TZ
164 } // namespace Crypto
165 } // namespace CKM