2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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.
18 * @file FSecCert_CertDbStore.cpp
19 * @brief This file contains implementation of X509 Certificate Database.
30 #include <FIoDatabase.h>
31 #include <FIoDbEnumerator.h>
32 #include <FIoDbStatement.h>
33 #include <unique_ptr.h>
35 #include <FBaseByteBuffer.h>
36 #include <FBaseString.h>
37 #include <FBaseResult.h>
38 #include <FBaseSysLog.h>
39 #include <FBaseUtilStringUtil.h>
40 #include "FSecCert_CertDbStore.h"
41 #include "FSecCert_Base64.h"
43 using namespace Tizen::Io;
44 using namespace Tizen::Base;
46 namespace Tizen { namespace Security { namespace Cert
49 _CertDbStore::_CertDbStore(void)
51 __rootCaCertTableCreated = Database::Exists(_CERT_ROOT_CA_CERT_TABLE);
52 __userCertTableCreated = Database::Exists(_CERT_USER_CERT_TABLE);
55 _CertDbStore::~_CertDbStore(void)
61 _CertDbStore::IsRootCaCertTableCreated(void)
63 if (!Database::Exists(_CERT_ROOT_CA_CERT_TABLE))
72 _CertDbStore::IsUserCertTableCreated(void)
74 if (!Database::Exists(_CERT_USER_CERT_TABLE))
84 _CertDbStore::CreateCertificateTables(void)
89 std::unique_ptr< Database > pRootCaDatabase(new (std::nothrow) Database());
90 SysTryReturnResult(NID_SEC_CERT, pRootCaDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
92 r = pRootCaDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, true);
93 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
95 sql.Append(L"CREATE TABLE IF NOT EXISTS rootcert (\
96 certId INTEGER PRIMARY KEY AUTOINCREMENT,\
97 certType SMALLINT DEFAULT 0,\
98 certFormat SMALLINT DEFAULT 0,\
100 subjectNameLen SMALLINT DEFAULT 20,\
101 subjectName VARCHAR,\
102 issuerNameLen SMALLINT DEFAULT 20,\
107 serialNoLen SMALLINT DEFAULT 20)");
109 r = pRootCaDatabase->ExecuteSql(sql, true);
110 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql.", GetErrorMessage(r));
112 std::unique_ptr< Database > pUserCertDatabase(new (std::nothrow) Database());
113 SysTryReturnResult(NID_SEC_CERT, pUserCertDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
115 r = pUserCertDatabase->Construct(_CERT_USER_CERT_TABLE, true);
116 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to create certificate table. ", GetErrorMessage(r));
118 // Create a database table
119 sql2.Append(L"CREATE TABLE IF NOT EXISTS usercert (\
120 certId INTEGER PRIMARY KEY AUTOINCREMENT,\
121 certPubKeyHash VARCHAR DEFAULT null,\
122 certFormat SMALLINT DEFAULT 0,\
124 subjectNameLen SMALLINT DEFAULT 20,\
125 subjectName VARCHAR,\
126 issuerNameLen SMALLINT DEFAULT 20,\
128 prvKeyPath VARCHAR DEFAULT null,\
129 prvKeyLen SMALLINT DEFAULT 0,\
130 parentCa SMALLINT DEFAULT 0,\
133 serialNoLen SMALLINT DEFAULT 20)");
135 r = pUserCertDatabase->ExecuteSql(sql2, true);
136 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql.", GetErrorMessage(r));
142 _CertDbStore::DeleteCaCertFiles(void)
144 result r = E_SUCCESS;
147 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
148 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
150 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
151 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to create certificate table.", GetErrorMessage(r));
153 r = pDatabase->BeginTransaction();
154 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
156 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(L"SELECT * from rootcert"));
157 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "Failed to get data.");
159 while (pEnum->MoveNext() == E_SUCCESS)
161 r = pEnum->GetStringAt(3, strVal);
162 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to get string.", GetErrorMessage(r));
163 Tizen::Io::File::Remove(strVal);
170 _CertDbStore::DeleteUserCertFiles(void)
172 result r = E_SUCCESS;
176 r = database.Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
177 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to open user cert database.", GetErrorMessage(r));
179 std::unique_ptr< DbEnumerator > pEnum(database.QueryN(L"SELECT * from usercert"));
180 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "Failed to find any user certificate in database.");
182 while (pEnum->MoveNext() == E_SUCCESS)
184 r = pEnum->GetStringAt(3, strVal);
185 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to get string.", GetErrorMessage(r));
186 Tizen::Io::File::Remove(strVal);
193 _CertDbStore::DropCertificateTables(void)
195 result r = E_SUCCESS;
198 r = Database::Delete(_CERT_ROOT_CA_CERT_TABLE);
199 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to delete CA table.", GetErrorMessage(r));
201 r = Database::Delete(_CERT_USER_CERT_TABLE);
202 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to delete user table.", GetErrorMessage(r));
204 //Remove root certificates from the file system
211 _CertDbStore::RemoveCertificateById(int certId)
217 _CertDbStore::RemoveAllCertificates(void)
223 _CertDbStore::GetNumberOfCertificates(int& count)
229 _CaCertDbStore::_CaCertDbStore(void)
233 _CaCertDbStore::~_CaCertDbStore(void)
238 _CaCertDbStore::InsertCaCertificate(CaCertRecord* pCertRecord)
240 result r = E_SUCCESS;
241 byte subjectNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
242 byte issuerNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
243 byte base64SerialNum[_MAX_SERIAL_NUMBER_SIZE] = {0, };
244 int subjectNameBase64Len = 0;
245 int base64IssuerNameLen = 0;
246 int base64SerialNumLen = 0;
249 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Invalid input parameter.");
251 memcpy(subjectNameBase64, pCertRecord->subjectName, pCertRecord->subjectNameLen);
252 memcpy(issuerNameBase64, pCertRecord->issuerName, pCertRecord->issuerNameLen);
253 memcpy(base64SerialNum, pCertRecord->serialNo, _MAX_SERIAL_NUMBER_SIZE);
254 memset(pCertRecord->subjectName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
255 memset(pCertRecord->issuerName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
256 memset(pCertRecord->serialNo, 0, _MAX_SERIAL_NUMBER_SIZE);
258 subjectNameBase64Len = _Base64::GetEncodedSize(pCertRecord->subjectNameLen);
259 memset(pCertRecord->subjectName, 0, sizeof(pCertRecord->subjectName));
260 r = _Base64::Encode(static_cast< byte* >(subjectNameBase64), pCertRecord->subjectNameLen, pCertRecord->subjectName, subjectNameBase64Len);
261 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode subject name of certificate.");
263 pCertRecord->subjectNameLen = subjectNameBase64Len;
265 base64IssuerNameLen = _Base64::GetEncodedSize(pCertRecord->issuerNameLen);
266 memset(pCertRecord->issuerName, 0, sizeof(pCertRecord->issuerName));
267 r = _Base64::Encode(static_cast< byte* >(issuerNameBase64), pCertRecord->issuerNameLen, pCertRecord->issuerName, base64IssuerNameLen);
268 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
270 pCertRecord->issuerNameLen = base64IssuerNameLen;
272 base64SerialNumLen = _Base64::GetEncodedSize(pCertRecord->serialNoLen);
273 memset(pCertRecord->serialNo, 0, sizeof(pCertRecord->serialNo));
274 r = _Base64::Encode(static_cast< byte* >(base64SerialNum), pCertRecord->serialNoLen, pCertRecord->serialNo, base64SerialNumLen);
275 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode serial number of certificate.");
277 pCertRecord->serialNoLen = base64SerialNumLen;
279 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
280 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
282 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
283 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
285 r = pDatabase->BeginTransaction();
286 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Begin transaction failed.", GetErrorMessage(r));
288 statement.Append(L"INSERT INTO rootcert (certId, certType, certFormat, fileName, subjectNameLen, subjectName, issuerNameLen, issuerName, parentCa, installed, serialNo, serialNoLen) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)");
290 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
292 r = pStmt->BindInt(1, pCertRecord->certType);
293 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 1 in database statement.", GetErrorMessage(r));
294 r = pStmt->BindInt(2, pCertRecord->certFormat);
295 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 2 in database statement.", GetErrorMessage(r));
296 r = pStmt->BindString(3, pCertRecord->fileName);
297 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 3 in database statement.", GetErrorMessage(r));
298 r = pStmt->BindInt(4, pCertRecord->subjectNameLen);
299 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 4 in database statement.", GetErrorMessage(r));
300 r = pStmt->BindString(5, pCertRecord->subjectName);
301 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 5 in database statement.", GetErrorMessage(r));
302 r = pStmt->BindInt(6, pCertRecord->issuerNameLen);
303 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 6 in database statement.", GetErrorMessage(r));
304 r = pStmt->BindString(7, pCertRecord->issuerName);
305 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 7 in database statement.", GetErrorMessage(r));
306 r = pStmt->BindInt(8, pCertRecord->parentCa);
307 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 8 in database statement.", GetErrorMessage(r));
308 r = pStmt->BindString(9, pCertRecord->installed);
309 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 9 in database statement.", GetErrorMessage(r));
310 r = pStmt->BindString(10, pCertRecord->serialNo);
311 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 10 in database statement.", GetErrorMessage(r));
312 r = pStmt->BindInt(11, pCertRecord->serialNoLen);
313 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun 11 in database statement.", GetErrorMessage(r));
315 std::unique_ptr< DbEnumerator > pEnum(pDatabase->ExecuteStatementN(*pStmt));
318 r = pDatabase->CommitTransaction();
319 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Commit transaction failed.", GetErrorMessage(r));
325 _CaCertDbStore::UpdateCaCertificate(CaCertRecord* pCertRecord, CaCertRecord* pUpdateCertRecord)
327 result r = E_SUCCESS;
328 String statement(_MAX_QUERY_LEN);
329 int subjectNameBase64Len = 0;
330 int base64IssuerNameLen = 0;
331 byte subjectNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
332 byte issuerNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
334 SysTryReturnResult(NID_SEC_CERT, !(pCertRecord == null || pUpdateCertRecord == null), E_INVALID_ARG, "Invalid input parameter.");
336 memcpy(subjectNameBase64, pCertRecord->subjectName, pCertRecord->subjectNameLen);
337 memcpy(issuerNameBase64, pCertRecord->issuerName, pCertRecord->issuerNameLen);
338 memset(pCertRecord->subjectName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
339 memset(pCertRecord->issuerName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
341 subjectNameBase64Len = _Base64::GetEncodedSize(pCertRecord->subjectNameLen);
342 memset(pCertRecord->subjectName, 0, sizeof(pCertRecord->subjectName));
343 r = _Base64::Encode(static_cast< byte* >(subjectNameBase64), pCertRecord->subjectNameLen, pCertRecord->subjectName, subjectNameBase64Len);
344 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode subject name of certificate.");
346 pCertRecord->subjectNameLen = subjectNameBase64Len;
348 base64IssuerNameLen = _Base64::GetEncodedSize(pCertRecord->issuerNameLen);
349 memset(pCertRecord->issuerName, 0, sizeof(pCertRecord->issuerName));
350 r = _Base64::Encode(static_cast< byte* >(issuerNameBase64), pCertRecord->issuerNameLen, pCertRecord->issuerName, base64IssuerNameLen);
351 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
353 pCertRecord->issuerNameLen = base64IssuerNameLen;
355 memset(subjectNameBase64, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
356 memset(issuerNameBase64, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
357 subjectNameBase64Len = 0;
358 base64IssuerNameLen = 0;
359 memcpy(subjectNameBase64, pUpdateCertRecord->subjectName, pUpdateCertRecord->subjectNameLen);
360 memcpy(issuerNameBase64, pUpdateCertRecord->issuerName, pUpdateCertRecord->issuerNameLen);
361 memset(pUpdateCertRecord->subjectName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
362 memset(pUpdateCertRecord->issuerName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
364 subjectNameBase64Len = _Base64::GetEncodedSize(pUpdateCertRecord->subjectNameLen);
365 memset(pCertRecord->subjectName, 0, sizeof(pCertRecord->subjectName));
366 r = _Base64::Encode(static_cast< byte* >(subjectNameBase64), pUpdateCertRecord->subjectNameLen, pUpdateCertRecord->subjectName, subjectNameBase64Len);
367 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode subject name of certificate.");
369 pUpdateCertRecord->subjectNameLen = subjectNameBase64Len;
371 base64IssuerNameLen = _Base64::GetEncodedSize(pUpdateCertRecord->issuerNameLen);
372 memset(pCertRecord->issuerName, 0, sizeof(pCertRecord->issuerName));
373 r = _Base64::Encode(static_cast< byte* >(issuerNameBase64), pUpdateCertRecord->issuerNameLen, pUpdateCertRecord->issuerName, base64IssuerNameLen);
374 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
376 pUpdateCertRecord->issuerNameLen = base64IssuerNameLen;
378 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
379 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
381 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
382 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Construct of update ca certificate failed.", GetErrorMessage(r));
384 r = pDatabase->BeginTransaction();
385 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
387 statement.Format(_MAX_QUERY_LEN, L"UPDATE rootcert SET subjectNameLen = %d, subjectName = '%s', issuerNameLen = %d, issuerName = '%s' WHERE subjectName = '%s' and issuerName = '%s' and certType = %d and certId = %d", pUpdateCertRecord->subjectNameLen, pUpdateCertRecord->subjectName, pUpdateCertRecord->issuerNameLen, pUpdateCertRecord->issuerName, pCertRecord->subjectName, pCertRecord->issuerName, pCertRecord->certType, pCertRecord->certId);
388 r = pDatabase->ExecuteSql(statement, true);
389 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql.", GetErrorMessage(r));
391 r = pDatabase->CommitTransaction();
392 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction .", GetErrorMessage(r));
398 _CaCertDbStore::UpdateParentCa(int certId, int parentCa)
400 result r = E_SUCCESS;
401 String statement(_MAX_QUERY_LEN);
403 SysTryReturnResult(NID_SEC_CERT, certId > 0, E_INVALID_ARG, "Invalid input parameter certificate identifier.");
404 SysTryReturnResult(NID_SEC_CERT, parentCa > 0, E_INVALID_ARG, "Invalid input parameter parent certificate identifier.");
406 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
407 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
409 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
411 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
413 r = pDatabase->BeginTransaction();
414 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
416 statement.Format(_MAX_QUERY_LEN, L"UPDATE rootcert SET parentCa = '%d' WHERE certId = '%d'", parentCa, certId);
417 r = pDatabase->ExecuteSql(statement, true);
418 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql statement.", GetErrorMessage(r));
420 r = pDatabase->CommitTransaction();
421 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
427 _CaCertDbStore::RemoveCertificateBySubjectName(_CaCertType certType, byte* pSubjectName, int subjectNameLen)
429 result r = E_SUCCESS;
430 char subjectNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
431 int subjectNameBase64Len = 0;
432 String statement(_MAX_QUERY_LEN);
434 SysTryReturnResult(NID_SEC_CERT, !((pSubjectName == null) || (subjectNameLen <= 0) || (certType < _MIN_CERT_TYPE) || (certType > _MAX_CERT_TYPE)),
435 E_INVALID_ARG, "Invalid input parameter subjetname or invalid subject name length.");
437 subjectNameBase64Len = _Base64::GetEncodedSize(subjectNameLen);
438 memset(subjectNameBase64, 0, sizeof(subjectNameBase64));
439 r = _Base64::Encode(static_cast< byte* >(pSubjectName), subjectNameLen, subjectNameBase64, subjectNameBase64Len);
440 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode subject name of certificate.");
442 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
443 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
445 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
446 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
448 r = pDatabase->BeginTransaction();
449 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
451 statement.Format(_MAX_QUERY_LEN, L"DELETE FROM rootcert WHERE subjectName = '%s' and subjectNameLen = '%d' and certType = '%d'", subjectNameBase64, subjectNameBase64Len, certType);
453 r = pDatabase->ExecuteSql(statement, true);
454 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql statement.", GetErrorMessage(r));
456 r = pDatabase->CommitTransaction();
457 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit tranction.", GetErrorMessage(r));
463 _CaCertDbStore::RemoveCertificateByIssuerNameAndSerialNo(_CaCertType certType, byte* issuerName, int issuerNameLen, byte* serialNo)
465 result r = E_SUCCESS;
466 char issuerNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
467 char base64SerialNum[_MAX_SERIAL_NUMBER_SIZE] = {0, };
468 int base64IssuerNameLen = 0;
469 int base64SerialNoLen = 0;
471 String statement(_MAX_QUERY_LEN);
473 SysTryReturnResult(NID_SEC_CERT, !((issuerName == null) || (issuerNameLen <= 0) || (serialNo == null) || (certType < _MIN_CERT_TYPE) || (certType > _MAX_CERT_TYPE)),
474 E_INVALID_ARG, "Invalid input parameter issuer name or length of issuer name.");
476 base64IssuerNameLen = _Base64::GetEncodedSize(issuerNameLen);
477 memset(issuerNameBase64, 0, sizeof(issuerNameBase64));
478 r = _Base64::Encode(issuerName, issuerNameLen, issuerNameBase64, base64IssuerNameLen);
479 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
481 serialNoLen = strlen(reinterpret_cast< const char* >(serialNo));
483 base64SerialNoLen = _Base64::GetEncodedSize(serialNoLen);
484 memset(base64SerialNum, 0, sizeof(base64SerialNum));
485 r = _Base64::Encode(serialNo, serialNoLen, base64SerialNum, base64SerialNoLen);
486 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode serial number of certificate.");
488 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
489 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
491 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
492 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
494 r = pDatabase->BeginTransaction();
495 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
497 statement.Format(_MAX_QUERY_LEN, L"DELETE FROM rootcert WHERE issuerName = '%s' and issuerNameLen = '%d' and certType = '%d' and serialNo = '%s'", issuerNameBase64, base64IssuerNameLen, certType, base64SerialNum);
498 r = pDatabase->ExecuteSql(statement, true);
499 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql statement.", GetErrorMessage(r));
501 r = pDatabase->CommitTransaction();
502 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
508 _CaCertDbStore::RemoveAllCertificateByCondition(byte* pCondition)
510 result r = E_SUCCESS;
512 CaCertRecord certRecord = {0, };
514 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter.");
516 r = GetNextRecordByCondition(pCondition, &certRecord, curCertId);
520 curCertId = certRecord.certId;
522 r = _CaCertDbStore::RemoveCertificateById(certRecord.certId);
525 Tizen::Io::File::Remove(certRecord.fileName);
528 r = GetNextRecordByCondition(pCondition, &certRecord, curCertId);
536 _CaCertDbStore::CheckDuplicateCertificate(_CaCertType certType, byte* pSubjectName, int subjectNameLen)
538 result r = E_SUCCESS;
539 char subjectNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
540 int subjectNameBase64Len = 0;
544 SysTryReturnResult(NID_SEC_CERT, pSubjectName != null, E_INVALID_ARG, "Invalid input parameter subject name.");
545 SysTryReturnResult(NID_SEC_CERT, subjectNameLen >= 0, E_INVALID_ARG, "Invalid input parameter subject name length.");
546 SysTryReturnResult(NID_SEC_CERT, certType >= _MIN_CERT_TYPE, E_INVALID_ARG, "Invalid input parameter certificate identifier(value less than minimum index).");
547 SysTryReturnResult(NID_SEC_CERT, certType <= _MAX_CERT_TYPE, E_INVALID_ARG, "Invalid input parameter certificate identifier(value greater than maximim index).");
549 subjectNameBase64Len = _Base64::GetEncodedSize(subjectNameLen);
550 memset(subjectNameBase64, 0, sizeof(subjectNameBase64));
551 r = _Base64::Encode(static_cast< byte* >(pSubjectName), subjectNameLen, subjectNameBase64, subjectNameBase64Len);
552 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode subject name of certificate.");
554 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
555 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
557 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
558 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
560 r = pDatabase->BeginTransaction();
561 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
563 statement.Format(_MAX_QUERY_LEN, L"SELECT * from rootcert where certType = '%d' and subjectName = '%s' and subjectNameLen = '%d'", certType, subjectNameBase64, subjectNameBase64Len);
564 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
566 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result.");
567 SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database.");
573 _CaCertDbStore::CheckDuplicateCertificate(_CaCertType certType, byte* issuerName, int issuerNameLen, byte* pSerialNumber)
575 result r = E_SUCCESS;
576 char issuerNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
577 char base64SerialNo[_MAX_SERIAL_NUMBER_SIZE] = {0, };
578 int base64IssuerNameLen = 0;
579 int base64SerialNoLen = 0;
581 String statement(_MAX_QUERY_LEN);
583 SysTryReturnResult(NID_SEC_CERT, issuerName != null, E_INVALID_ARG, "Invalid input parameter issuer name.");
584 SysTryReturnResult(NID_SEC_CERT, issuerNameLen >= 0, E_INVALID_ARG, "Invalid input parameter issuer name length.");
585 SysTryReturnResult(NID_SEC_CERT, pSerialNumber != null, E_INVALID_ARG, "Invalid input parameter serial number.");
586 SysTryReturnResult(NID_SEC_CERT, certType >= _MIN_CERT_TYPE, E_INVALID_ARG, "Invalid input parameter certificate identifier (value is less than minimum index).");
587 SysTryReturnResult(NID_SEC_CERT, certType <= _MAX_CERT_TYPE, E_INVALID_ARG, "Invalid input parameter certificate identifier (value is greater than maximum index).");
589 base64IssuerNameLen = _Base64::GetEncodedSize(issuerNameLen);
590 memset(issuerNameBase64, 0, sizeof(issuerNameBase64));
591 r = _Base64::Encode(issuerName, issuerNameLen, issuerNameBase64, base64IssuerNameLen);
592 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
594 serialNoLen = strlen(reinterpret_cast< const char* >(pSerialNumber));
596 base64SerialNoLen = _Base64::GetEncodedSize(serialNoLen);
597 memset(base64SerialNo, 0, sizeof(base64SerialNo));
598 r = _Base64::Encode(pSerialNumber, serialNoLen, base64SerialNo, base64SerialNoLen);
599 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode serial number of certificate.");
601 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
602 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
604 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
605 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
607 r = pDatabase->BeginTransaction();
608 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed begin transaction.", GetErrorMessage(r));
610 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM rootcert WHERE certType = '%d' AND issuerName = '%s' AND issuerNameLen = '%d' AND serialNo = '%s'", certType, issuerNameBase64, base64IssuerNameLen, base64SerialNo);
611 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
613 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result.");
614 SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database.");
620 _CaCertDbStore::GetFirstRecordByConditions(byte* pCondition, CaCertRecord* pCertRecord)
622 result r = E_SUCCESS;
623 String statement(_MAX_QUERY_LEN);
624 char tmpName[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
627 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter.");
628 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Invalid input parameter.");
630 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
631 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
633 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
634 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
636 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM rootcert WHERE %s ORDER BY certId", pCondition);
637 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
638 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
640 r = pEnum->MoveNext();
641 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to move next.", GetErrorMessage(r));
643 r = pEnum->GetIntAt(0, pCertRecord->certId);
644 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 0.", GetErrorMessage(r));
646 r = pEnum->GetIntAt(1, pCertRecord->certType);
647 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 1.", GetErrorMessage(r));
649 r = pEnum->GetIntAt(2, pCertRecord->certFormat);
650 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 2.", GetErrorMessage(r));
652 r = pEnum->GetStringAt(3, strVal);
653 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 3.", GetErrorMessage(r));
655 std::unique_ptr< ByteBuffer > pTempBuf(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
657 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
659 memcpy(pCertRecord->fileName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
660 pCertRecord->fileName[pTempBuf->GetRemaining()] = '\0';
662 r = pEnum->GetIntAt(4, pCertRecord->subjectNameLen);
663 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 4.", GetErrorMessage(r));
665 r = pEnum->GetStringAt(5, strVal);
666 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 5.", GetErrorMessage(r));
668 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
670 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
673 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
675 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pCertRecord->subjectNameLen);
676 _Base64::Decode(tmpName, pCertRecord->subjectNameLen, reinterpret_cast< byte* >(pCertRecord->subjectName), pCertRecord->subjectNameLen);
678 r = pEnum->GetIntAt(6, pCertRecord->issuerNameLen);
679 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 6.", GetErrorMessage(r));
681 r = pEnum->GetStringAt(7, strVal);
682 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 7.", GetErrorMessage(r));
684 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
686 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
688 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
690 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pCertRecord->issuerNameLen);
691 _Base64::Decode(tmpName, pCertRecord->issuerNameLen, reinterpret_cast< byte* >(pCertRecord->issuerName), pCertRecord->issuerNameLen);
693 r = pEnum->GetIntAt(8, pCertRecord->parentCa);
694 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 8.", GetErrorMessage(r));
696 r = pEnum->GetStringAt(9, strVal);
697 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 9.", GetErrorMessage(r));
699 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
701 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
703 memcpy(pCertRecord->installed, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
704 pCertRecord->installed[pTempBuf->GetRemaining()] = '\0';
706 r = pEnum->GetStringAt(10, strVal);
707 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 10.", GetErrorMessage(r));
709 r = pEnum->GetIntAt(11, pCertRecord->serialNoLen);
710 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 11.", GetErrorMessage(r));
712 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
714 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
716 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
718 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
719 _Base64::Decode(tmpName, pCertRecord->serialNoLen, reinterpret_cast< byte* >(pCertRecord->serialNo), pCertRecord->serialNoLen);
725 _CaCertDbStore::GetNextRecordByCondition(byte* pCondition, CaCertRecord* pCertRecord, int curCertId)
727 result r = E_SUCCESS;
728 String statement(_MAX_QUERY_LEN);
731 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter.");
732 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Invalid input parameter.");
734 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
735 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
737 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
738 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
740 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM rootcert WHERE %s AND certId > '%d' ORDER BY certId", pCondition, curCertId);
741 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
744 return E_DATA_NOT_FOUND;
747 r = pEnum->MoveNext();
748 r = pEnum->GetIntAt(0, pCertRecord->certId);
749 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 0.", GetErrorMessage(r));
751 r = pEnum->GetIntAt(1, pCertRecord->certType);
752 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 1.", GetErrorMessage(r));
754 r = pEnum->GetIntAt(2, pCertRecord->certFormat);
755 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 2.", GetErrorMessage(r));
757 r = pEnum->GetStringAt(3, strVal);
758 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 3.");
760 std::unique_ptr< ByteBuffer > pTempBuf(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
762 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
764 memcpy(pCertRecord->fileName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
765 pCertRecord->fileName[pTempBuf->GetRemaining()] = '\0';
767 r = pEnum->GetIntAt(4, pCertRecord->subjectNameLen);
768 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 4.", GetErrorMessage(r));
770 r = pEnum->GetStringAt(5, strVal);
771 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 5.", GetErrorMessage(r));
773 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
775 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
777 memcpy(pCertRecord->subjectName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
778 pCertRecord->subjectName[pTempBuf->GetRemaining()] = '\0';
780 r = pEnum->GetIntAt(6, pCertRecord->issuerNameLen);
781 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 6.", GetErrorMessage(r));
783 r = pEnum->GetStringAt(7, strVal);
784 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 7.", GetErrorMessage(r));
786 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
788 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
790 memcpy(pCertRecord->issuerName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
791 pCertRecord->issuerName[pTempBuf->GetRemaining()] = '\0';
793 r = pEnum->GetIntAt(8, pCertRecord->parentCa);
794 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 8.", GetErrorMessage(r));
796 r = pEnum->GetStringAt(9, strVal);
797 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 9.", GetErrorMessage(r));
799 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
801 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
803 memcpy(pCertRecord->installed, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
804 pCertRecord->installed[pTempBuf->GetRemaining()] = '\0';
806 r = pEnum->GetStringAt(10, strVal);
807 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 10.", GetErrorMessage(r));
809 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
811 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
813 memcpy(pCertRecord->serialNo, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
814 pCertRecord->serialNo[pTempBuf->GetRemaining()] = '\0';
816 r = pEnum->GetIntAt(11, pCertRecord->serialNoLen);
817 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 11.", GetErrorMessage(r));
823 _CaCertDbStore::GetCurrentCertId(int& curCertId)
825 result r = E_SUCCESS;
828 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
829 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
831 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
832 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
834 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN("SELECT seq FROM sqlite_sequence"));
837 return E_DATA_NOT_FOUND;
840 while (pEnum->MoveNext() == E_SUCCESS)
842 r = pEnum->GetIntAt(0, certId);
843 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
851 _CaCertDbStore::CheckIfSameParent(int certId)
853 result r = E_SUCCESS;
858 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
859 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
861 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
862 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
864 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM rootcert where parentCa = %d ORDER BY certId", certId);
866 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
867 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
869 while (pEnum->MoveNext() == E_SUCCESS)
871 r = pEnum->GetIntAt(0, curCertId);
872 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
876 SysTryReturnResult(NID_SEC_CERT, count > 1, E_SYSTEM, "Failed to get record.");
882 _CaCertDbStore::SelectCaCertificateBycertId(int certId, CaCertRecord* pCertRecord)
884 byte condition[_MAX_TYPE_CONST_SIZE] = {0, };
886 return _CaCertDbStore::GetNextRecordByCondition(static_cast< byte* >(condition), pCertRecord, certId);
891 _CaCertDbStore::RemoveCertificateById(int certId)
893 result r = E_SUCCESS;
896 SysTryReturnResult(NID_SEC_CERT, certId > 0, E_INVALID_ARG, "Invalid input parameter.");
898 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
899 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
901 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
902 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
904 r = pDatabase->BeginTransaction();
905 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
907 statement.Append(L"DELETE FROM rootcert WHERE certId = ?");
908 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
909 SysTryReturn(NID_SEC_CERT, pStmt != null, r, r, "[%s] Failed to create statement.", GetErrorMessage(r));
911 r = pStmt->BindInt(0, certId);
912 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
914 pDatabase->ExecuteStatementN(*pStmt);
916 r = pDatabase->CommitTransaction();
917 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
923 _CaCertDbStore::RemoveAllCertificates(void)
925 result r = E_SUCCESS;
928 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
929 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
931 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
932 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
934 r = pDatabase->BeginTransaction();
935 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
937 statement.Append(L"DELETE from rootcert");
939 r = pDatabase->ExecuteSql(statement, true);
940 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql.", GetErrorMessage(r));
942 r = pDatabase->CommitTransaction();
943 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
949 _CaCertDbStore::GetNumberOfCertificates(int& count)
951 result r = E_SUCCESS;
956 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
957 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
959 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
960 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
962 statement.Append(L"SELECT * FROM rootcert");
963 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
964 std::unique_ptr< DbEnumerator > pEnum(pDatabase->ExecuteStatementN(*pStmt));
965 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
967 while (pEnum->MoveNext() == E_SUCCESS)
977 _UserCertDbStore::_UserCertDbStore(void)
981 _UserCertDbStore::~_UserCertDbStore(void)
986 _UserCertDbStore::InsertUserCertificate(UserCertRecord* pCertRecord)
988 result r = E_SUCCESS;
989 byte subjectNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
990 byte issuerNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
991 byte base64SerialNum[_MAX_SERIAL_NUMBER_SIZE] = {0, };
992 int subjectNameBase64Len = 0;
993 int base64IssuerNameLen = 0;
994 int base64SerialNumLen = 0;
997 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Invalid input parameter.");
999 memcpy(subjectNameBase64, pCertRecord->subjectName, pCertRecord->subjectNameLen);
1000 memcpy(issuerNameBase64, pCertRecord->issuerName, pCertRecord->issuerNameLen);
1001 memcpy(base64SerialNum, pCertRecord->serialNo, _MAX_SERIAL_NUMBER_SIZE);
1002 memset(pCertRecord->subjectName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1003 memset(pCertRecord->issuerName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1004 memset(pCertRecord->serialNo, 0, _MAX_SERIAL_NUMBER_SIZE);
1006 subjectNameBase64Len = _Base64::GetEncodedSize(pCertRecord->subjectNameLen);
1007 memset(pCertRecord->subjectName, 0, sizeof(pCertRecord->subjectName));
1008 r = _Base64::Encode(static_cast< byte* >(subjectNameBase64), pCertRecord->subjectNameLen, pCertRecord->subjectName, subjectNameBase64Len);
1009 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode subject name of certificate.");
1011 pCertRecord->subjectNameLen = subjectNameBase64Len;
1013 base64IssuerNameLen = _Base64::GetEncodedSize(pCertRecord->issuerNameLen);
1014 memset(pCertRecord->issuerName, 0, sizeof(pCertRecord->issuerName));
1015 r = _Base64::Encode(static_cast< byte* >(issuerNameBase64), pCertRecord->issuerNameLen, pCertRecord->issuerName, base64IssuerNameLen);
1016 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
1018 pCertRecord->issuerNameLen = base64IssuerNameLen;
1020 base64SerialNumLen = _Base64::GetEncodedSize(pCertRecord->serialNoLen);
1021 memset(pCertRecord->serialNo, 0, sizeof(pCertRecord->serialNo));
1022 r = _Base64::Encode(static_cast< byte* >(base64SerialNum), pCertRecord->serialNoLen, pCertRecord->serialNo, base64SerialNumLen);
1023 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode serial number of certificate.");
1025 pCertRecord->serialNoLen = base64SerialNumLen;
1027 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1028 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1030 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1031 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "Failed to construct database instance.");
1033 r = pDatabase->BeginTransaction();
1034 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1036 statement.Append(L"INSERT INTO usercert (certId, certPubKeyHash, certFormat, fileName, subjectNameLen, subjectName, issuerNameLen, issuerName, prvKeyPath, prvKeyLen, parentCa, installed, serialNo, serialNoLen) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)");
1037 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
1038 r = pStmt->BindString(1, pCertRecord->certPubKeyHash);
1039 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1040 r = pStmt->BindInt(2, pCertRecord->certFormat);
1041 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1042 r = pStmt->BindString(3, pCertRecord->fileName);
1043 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1044 r = pStmt->BindInt(4, pCertRecord->subjectNameLen);
1045 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1046 r = pStmt->BindString(5, pCertRecord->subjectName);
1047 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1048 r = pStmt->BindInt(6, pCertRecord->issuerNameLen);
1049 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1050 r = pStmt->BindString(7, pCertRecord->issuerName);
1051 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1052 r = pStmt->BindString(8, pCertRecord->prvKeyPath);
1053 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1054 r = pStmt->BindInt(9, pCertRecord->prvKeyLen);
1055 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1056 r = pStmt->BindInt(10, pCertRecord->parentCa);
1057 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1058 r = pStmt->BindString(11, pCertRecord->installed);
1059 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1060 r = pStmt->BindString(12, pCertRecord->serialNo);
1061 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1062 r = pStmt->BindInt(13, pCertRecord->serialNoLen);
1063 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1064 std::unique_ptr< DbEnumerator > pEnum(pDatabase->ExecuteStatementN(*pStmt));
1067 r = pDatabase->CommitTransaction();
1068 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
1074 _UserCertDbStore::UpdateParentCa(int certId, int parentCa)
1076 result r = E_SUCCESS;
1077 String statement(_MAX_QUERY_LEN);
1079 SysTryReturnResult(NID_SEC_CERT, certId > 0, E_INVALID_ARG, "Invalid input parameter.");
1080 SysTryReturnResult(NID_SEC_CERT, parentCa > 0, E_INVALID_ARG, "Invalid input parameter.");
1082 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1083 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
1085 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1086 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1088 r = pDatabase->BeginTransaction();
1089 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1091 statement.Format(_MAX_QUERY_LEN, L"UPDATE usercert SET parentCa = '%d' WHERE certId = '%d'", parentCa, certId);
1092 r = pDatabase->ExecuteSql(statement, true);
1093 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql.", GetErrorMessage(r));
1095 r = pDatabase->CommitTransaction();
1096 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
1102 _UserCertDbStore::UpdateRecordByCondition(byte* pCondition)
1104 result r = E_SUCCESS;
1105 String statement(_MAX_QUERY_LEN);
1107 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter.");
1109 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1110 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1112 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1113 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1115 r = pDatabase->BeginTransaction();
1116 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1118 statement.Format(_MAX_QUERY_LEN, L"UPDATE usercert SET %s", pCondition);
1120 r = pDatabase->ExecuteSql(statement, true);
1121 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql statement.", GetErrorMessage(r));
1123 r = pDatabase->CommitTransaction();
1124 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transactoin.", GetErrorMessage(r));
1130 _UserCertDbStore::RemoveCertificateByCondition(byte* pCondition)
1132 result r = E_SUCCESS;
1136 String statement(_MAX_QUERY_LEN);
1139 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter.");
1141 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1142 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1144 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1145 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1147 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE %s ORDER BY certId", pCondition);
1148 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1149 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1152 while (pEnum->MoveNext() == E_SUCCESS)
1154 r = pEnum->GetIntAt(0, curCertId);
1155 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1157 r = _UserCertDbStore::RemoveCertificateById(curCertId);
1158 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to delete record from database.", GetErrorMessage(r));
1160 r = pEnum->GetStringAt(4, strVal);
1161 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1163 Tizen::Io::File::Remove(strVal);
1170 _UserCertDbStore::CheckDuplicateCertificate(byte* pSubjectName, int subjectNameLen)
1172 result r = E_SUCCESS;
1173 char subjectNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
1174 int subjectNameBase64Len = 0;
1175 String statement(_MAX_QUERY_LEN);
1177 SysTryReturnResult(NID_SEC_CERT, pSubjectName != null, E_INVALID_ARG, "Invalid input parameter.");
1178 SysTryReturnResult(NID_SEC_CERT, subjectNameLen > 0, E_INVALID_ARG, "Invalid input parameter.");
1180 subjectNameBase64Len = _Base64::GetEncodedSize(subjectNameLen);
1181 memset(subjectNameBase64, 0, sizeof(subjectNameBase64));
1182 r = _Base64::Encode(static_cast< byte* >(pSubjectName), subjectNameLen, subjectNameBase64, subjectNameBase64Len);
1183 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode subject name of certificate.");
1185 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1186 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1188 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1189 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1191 r = pDatabase->BeginTransaction();
1192 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1194 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE subjectName = '%s' AND subjectNameLen = '%d'", subjectNameBase64, subjectNameBase64Len);
1196 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1197 r = GetLastResult();
1198 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result.");
1199 SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database.");
1205 _UserCertDbStore::CheckDuplicateCertificate(byte* pIssuerName, int issuerNameLen, byte* pSerialNumber)
1207 result r = E_SUCCESS;
1208 char issuerNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
1209 char base64SerialNo[_MAX_SERIAL_NUMBER_SIZE] = {0, };
1210 int base64IssuerNameLen = 0;
1211 int base64SerialNoLen = 0;
1212 int serialNoLen = 0;
1213 String statement(_MAX_QUERY_LEN);
1215 SysTryReturnResult(NID_SEC_CERT, pIssuerName != null, E_INVALID_ARG, "Invald input parameter");
1216 SysTryReturnResult(NID_SEC_CERT, issuerNameLen >= 0, E_INVALID_ARG, "Invald input parameter");
1217 SysTryReturnResult(NID_SEC_CERT, pSerialNumber != null, E_INVALID_ARG, "Invald input parameter");
1219 base64IssuerNameLen = _Base64::GetEncodedSize(issuerNameLen);
1220 memset(issuerNameBase64, 0, sizeof(issuerNameBase64));
1221 r = _Base64::Encode(pIssuerName, issuerNameLen, issuerNameBase64, base64IssuerNameLen);
1222 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
1224 serialNoLen = strlen(reinterpret_cast< const char* >(pSerialNumber));
1226 base64SerialNoLen = _Base64::GetEncodedSize(serialNoLen);
1227 memset(base64SerialNo, 0, sizeof(base64SerialNo));
1228 r = _Base64::Encode(pSerialNumber, serialNoLen, base64SerialNo, base64SerialNoLen);
1229 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode serial number of certificate.");
1231 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1232 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1234 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1235 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1237 r = pDatabase->BeginTransaction();
1238 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1240 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE issuerName = '%s' AND issuerNameLen = '%d' AND serialNo = '%s'", issuerNameBase64, base64IssuerNameLen, base64SerialNo);
1241 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1242 r = GetLastResult();
1243 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result.");
1244 SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database.");
1250 _UserCertDbStore::GetFirstRecordByConditions(byte* pCondition, UserCertRecord* pCertRecord)
1252 result r = E_SUCCESS;
1253 String statement(_MAX_QUERY_LEN);
1254 char tmpName[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
1258 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter");
1259 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Invalid input parameter");
1261 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1262 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1264 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1265 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1267 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE %s", pCondition);
1268 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1269 SysTryReturn(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, E_DATA_NOT_FOUND, "No certificate found in database.");
1272 r = pEnum->MoveNext();
1273 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1275 r = pEnum->GetIntAt(0, pCertRecord->certId);
1276 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 0.", GetErrorMessage(r));
1278 r = pEnum->GetStringAt(1, strVal);
1279 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 1.", GetErrorMessage(r));
1281 std::unique_ptr< ByteBuffer > pTempBuf(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1282 r = GetLastResult();
1283 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1285 memcpy(pCertRecord->certPubKeyHash, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1286 pCertRecord->certPubKeyHash[pTempBuf->GetRemaining()] = '\0';
1288 r = pEnum->GetIntAt(2, pCertRecord->certFormat);
1289 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 2.", GetErrorMessage(r));
1291 r = pEnum->GetStringAt(3, strVal);
1292 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 3.", GetErrorMessage(r));
1294 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1295 r = GetLastResult();
1296 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1298 memcpy(pCertRecord->fileName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1299 pCertRecord->fileName[pTempBuf->GetRemaining()] = '\0';
1301 r = pEnum->GetIntAt(4, pCertRecord->subjectNameLen);
1302 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 4.", GetErrorMessage(r));
1304 r = pEnum->GetStringAt(5, strVal);
1305 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 5.", GetErrorMessage(r));
1307 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1308 r = GetLastResult();
1309 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1311 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1312 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1313 _Base64::Decode(tmpName, pCertRecord->subjectNameLen, reinterpret_cast< byte* >(pCertRecord->subjectName), pCertRecord->subjectNameLen);
1315 r = pEnum->GetIntAt(6, pCertRecord->issuerNameLen);
1316 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 6.", GetErrorMessage(r));
1318 r = pEnum->GetStringAt(7, strVal);
1319 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 7.", GetErrorMessage(r));
1321 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1322 r = GetLastResult();
1323 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1326 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1327 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1328 _Base64::Decode(tmpName, pCertRecord->issuerNameLen, reinterpret_cast< byte* >(pCertRecord->issuerName), pCertRecord->issuerNameLen);
1330 r = pEnum->GetStringAt(8, strVal);
1331 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 8.", GetErrorMessage(r));
1333 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1336 memcpy(pCertRecord->prvKeyPath, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1340 memset(pCertRecord->prvKeyPath, 0, _MAX_PRV_KEY_PATH_SIZE_SIZE);
1343 r = pEnum->GetIntAt(9, pCertRecord->prvKeyLen);
1344 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 9.", GetErrorMessage(r));
1346 r = pEnum->GetIntAt(10, pCertRecord->parentCa);
1347 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 10.", GetErrorMessage(r));
1349 r = pEnum->GetStringAt(11, strVal);
1350 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 11.", GetErrorMessage(r));
1352 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1353 r = GetLastResult();
1354 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1356 memcpy(pCertRecord->installed, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1357 pCertRecord->installed[pTempBuf->GetRemaining()] = '\0';
1359 r = pEnum->GetStringAt(12, strVal);
1360 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 12.", GetErrorMessage(r));
1362 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1363 r = GetLastResult();
1364 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1366 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1367 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1369 len = pTempBuf->GetRemaining();
1370 _Base64::Decode(tmpName, len, reinterpret_cast< byte* >(pCertRecord->serialNo), len);
1372 r = pEnum->GetIntAt(13, pCertRecord->serialNoLen);
1373 pCertRecord->serialNoLen = _Base64::GetDecodedSize(pCertRecord->serialNoLen);
1374 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 13.", GetErrorMessage(r));
1380 _UserCertDbStore::GetNextRecordByCondition(byte* pCondition, UserCertRecord* pCertRecord, int curCertId)
1382 result r = E_SUCCESS;
1383 String statement(_MAX_QUERY_LEN);
1386 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Input parameters are invalid");
1387 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Input parameters are invalid");
1389 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1390 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1392 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1393 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1395 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE %s AND certId > '%d'", pCondition, curCertId);
1396 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1397 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1399 r = pEnum->MoveNext();
1400 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1402 r = pEnum->GetIntAt(0, pCertRecord->certId);
1403 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 0.", GetErrorMessage(r));
1405 r = pEnum->GetStringAt(1, strVal);
1406 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 1.", GetErrorMessage(r));
1408 std::unique_ptr< ByteBuffer > pTempBuf(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1409 r = GetLastResult();
1410 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1412 memcpy(pCertRecord->certPubKeyHash, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1413 pCertRecord->certPubKeyHash[pTempBuf->GetRemaining()] = '\0';
1415 r = pEnum->GetIntAt(2, pCertRecord->certFormat);
1416 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 2.", GetErrorMessage(r));
1418 r = pEnum->GetStringAt(3, strVal);
1419 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 3.", GetErrorMessage(r));
1421 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1422 r = GetLastResult();
1423 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1425 memcpy(pCertRecord->fileName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1426 pCertRecord->fileName[pTempBuf->GetRemaining()] = '\0';
1428 r = pEnum->GetIntAt(4, pCertRecord->subjectNameLen);
1429 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 4.", GetErrorMessage(r));
1431 r = pEnum->GetStringAt(5, strVal);
1432 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 5.", GetErrorMessage(r));
1434 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1435 r = GetLastResult();
1436 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1438 memcpy(pCertRecord->subjectName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1439 pCertRecord->subjectName[pTempBuf->GetRemaining()] = '\0';
1441 r = pEnum->GetIntAt(6, pCertRecord->issuerNameLen);
1442 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 6.", GetErrorMessage(r));
1444 r = pEnum->GetStringAt(7, strVal);
1445 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 7.", GetErrorMessage(r));
1447 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1448 r = GetLastResult();
1449 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1451 memcpy(pCertRecord->issuerName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1452 pCertRecord->issuerName[pTempBuf->GetRemaining()] = '\0';
1454 r = pEnum->GetStringAt(8, strVal);
1455 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 8.", GetErrorMessage(r));
1457 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1460 memcpy(pCertRecord->prvKeyPath, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1464 memset(pCertRecord->prvKeyPath, 0, _MAX_PRV_KEY_PATH_SIZE_SIZE);
1467 r = pEnum->GetIntAt(9, pCertRecord->prvKeyLen);
1468 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 9.", GetErrorMessage(r));
1470 r = pEnum->GetIntAt(10, pCertRecord->parentCa);
1471 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 10.", GetErrorMessage(r));
1473 r = pEnum->GetStringAt(11, strVal);
1474 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 11.", GetErrorMessage(r));
1476 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1477 r = GetLastResult();
1478 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1480 memcpy(pCertRecord->installed, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1481 pCertRecord->installed[pTempBuf->GetRemaining()] = '\0';
1483 r = pEnum->GetStringAt(12, strVal);
1484 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 12.", GetErrorMessage(r));
1486 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1487 r = GetLastResult();
1488 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1490 memcpy(pCertRecord->serialNo, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1491 pCertRecord->serialNo[pTempBuf->GetRemaining()] = '\0';
1493 r = pEnum->GetIntAt(13, pCertRecord->serialNoLen);
1494 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 13.", GetErrorMessage(r));
1500 _UserCertDbStore::GetCurrentCertId(int& curCertId)
1502 result r = E_SUCCESS;
1505 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1506 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1508 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1509 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1511 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN("SELECT seq FROM sqlite_sequence"));
1512 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1514 r = pEnum->MoveNext();
1515 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to move next.", GetErrorMessage(r));
1517 r = pEnum->GetIntAt(0, certId);
1518 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1526 _UserCertDbStore::GetCountByCondition(byte* pCondition, int& count)
1528 result r = E_SUCCESS;
1530 String statement(_MAX_QUERY_LEN);
1532 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Input parameter are invalid");
1534 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1535 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1537 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1538 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Construct fails.", GetErrorMessage(r));
1540 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE %s", pCondition);
1541 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1542 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in Db.");
1544 while (pEnum->MoveNext() == E_SUCCESS)
1555 _UserCertDbStore::GetParentCaByCondition(byte* pCondition, int& parentCa)
1557 result r = E_SUCCESS;
1558 int currParentCa = 0;
1559 String statement(_MAX_QUERY_LEN);
1561 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Input parameter are invalid");
1563 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1564 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1566 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1567 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1569 statement.Format(_MAX_QUERY_LEN, L"SELECT parentCa FROM usercert WHERE %s", pCondition);
1570 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1571 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1573 if (pEnum->MoveNext() == E_SUCCESS)
1575 r = pEnum->GetIntAt(10, currParentCa);
1576 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1579 parentCa = currParentCa;
1585 _UserCertDbStore::SelectUserCertificateBycertId(int certId, UserCertRecord* pCertRecord)
1587 byte condition[_MAX_TYPE_CONST_SIZE] = {0, };
1589 return _UserCertDbStore::GetNextRecordByCondition(static_cast< byte* >(condition), pCertRecord, certId);
1594 _UserCertDbStore::RemoveCertificateById(int certId)
1596 result r = E_SUCCESS;
1599 SysTryReturnResult(NID_SEC_CERT, certId > 0, E_INVALID_ARG, "Invalid input certificate id.");
1601 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1602 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1604 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1605 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1607 r = pDatabase->BeginTransaction();
1608 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1610 statement.Append(L"DELETE FROM usercert WHERE certId = ?");
1611 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
1612 SysTryReturn(NID_SEC_CERT, pStmt, GetLastResult(), GetLastResult(), "[%s] Failed to create statement.", GetErrorMessage(GetLastResult()));
1614 r = pStmt->BindInt(0, certId);
1615 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1617 pDatabase->ExecuteStatementN(*pStmt);
1619 r = pDatabase->CommitTransaction();
1620 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
1626 _UserCertDbStore::RemoveAllCertificates(void)
1628 result r = E_SUCCESS;
1631 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1632 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1634 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1635 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1637 r = pDatabase->BeginTransaction();
1638 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1640 statement.Append(L"DELETE from usercert");
1641 r = pDatabase->ExecuteSql(statement, true);
1642 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql.", GetErrorMessage(r));
1644 r = pDatabase->CommitTransaction();
1645 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
1651 _UserCertDbStore::GetNumberOfCertificates(int& count)
1653 result r = E_SUCCESS;
1657 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1658 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1660 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1661 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1663 statement.Append(L"SELECT * FROM usercert");
1665 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
1666 SysTryReturnResult(NID_SEC_CERT, pStmt != null, E_DATA_NOT_FOUND, "Failed to create statement for user certifcates.");
1668 std::unique_ptr< DbEnumerator > pEnum(pDatabase->ExecuteStatementN(*pStmt.get()));
1669 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1671 while (pEnum->MoveNext() == E_SUCCESS)
1681 } } } //Tizen::Security::Cert