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.");
569 r = E_DATA_NOT_FOUND;
576 _CaCertDbStore::CheckDuplicateCertificate(_CaCertType certType, byte* issuerName, int issuerNameLen, byte* pSerialNumber)
578 result r = E_SUCCESS;
579 char issuerNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
580 char base64SerialNo[_MAX_SERIAL_NUMBER_SIZE] = {0, };
581 int base64IssuerNameLen = 0;
582 int base64SerialNoLen = 0;
584 String statement(_MAX_QUERY_LEN);
586 SysTryReturnResult(NID_SEC_CERT, issuerName != null, E_INVALID_ARG, "Invalid input parameter issuer name.");
587 SysTryReturnResult(NID_SEC_CERT, issuerNameLen >= 0, E_INVALID_ARG, "Invalid input parameter issuer name length.");
588 SysTryReturnResult(NID_SEC_CERT, pSerialNumber != null, E_INVALID_ARG, "Invalid input parameter serial number.");
589 SysTryReturnResult(NID_SEC_CERT, certType >= _MIN_CERT_TYPE, E_INVALID_ARG, "Invalid input parameter certificate identifier (value is less than minimum index).");
590 SysTryReturnResult(NID_SEC_CERT, certType <= _MAX_CERT_TYPE, E_INVALID_ARG, "Invalid input parameter certificate identifier (value is greater than maximum index).");
592 base64IssuerNameLen = _Base64::GetEncodedSize(issuerNameLen);
593 memset(issuerNameBase64, 0, sizeof(issuerNameBase64));
594 r = _Base64::Encode(issuerName, issuerNameLen, issuerNameBase64, base64IssuerNameLen);
595 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
597 serialNoLen = strlen(reinterpret_cast< const char* >(pSerialNumber));
599 base64SerialNoLen = _Base64::GetEncodedSize(serialNoLen);
600 memset(base64SerialNo, 0, sizeof(base64SerialNo));
601 r = _Base64::Encode(pSerialNumber, serialNoLen, base64SerialNo, base64SerialNoLen);
602 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode serial number of certificate.");
604 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
605 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
607 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
608 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
610 r = pDatabase->BeginTransaction();
611 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed begin transaction.", GetErrorMessage(r));
613 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);
614 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
616 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result.");
617 SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database.");
623 _CaCertDbStore::GetFirstRecordByConditions(byte* pCondition, CaCertRecord* pCertRecord)
625 result r = E_SUCCESS;
626 String statement(_MAX_QUERY_LEN);
627 char tmpName[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
630 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter.");
631 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Invalid input parameter.");
633 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
634 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
636 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
637 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
639 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM rootcert WHERE %s ORDER BY certId", pCondition);
640 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
641 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
643 r = pEnum->MoveNext();
644 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to move next.", GetErrorMessage(r));
646 r = pEnum->GetIntAt(0, pCertRecord->certId);
647 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 0.", GetErrorMessage(r));
649 r = pEnum->GetIntAt(1, pCertRecord->certType);
650 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 1.", GetErrorMessage(r));
652 r = pEnum->GetIntAt(2, pCertRecord->certFormat);
653 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 2.", GetErrorMessage(r));
655 r = pEnum->GetStringAt(3, strVal);
656 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 3.", GetErrorMessage(r));
658 std::unique_ptr< ByteBuffer > pTempBuf(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
660 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
662 memcpy(pCertRecord->fileName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
663 pCertRecord->fileName[pTempBuf->GetRemaining()] = '\0';
665 r = pEnum->GetIntAt(4, pCertRecord->subjectNameLen);
666 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 4.", GetErrorMessage(r));
668 r = pEnum->GetStringAt(5, strVal);
669 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 5.", GetErrorMessage(r));
671 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
673 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
676 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
678 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pCertRecord->subjectNameLen);
679 _Base64::Decode(tmpName, pCertRecord->subjectNameLen, reinterpret_cast< byte* >(pCertRecord->subjectName), pCertRecord->subjectNameLen);
681 r = pEnum->GetIntAt(6, pCertRecord->issuerNameLen);
682 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 6.", GetErrorMessage(r));
684 r = pEnum->GetStringAt(7, strVal);
685 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 7.", GetErrorMessage(r));
687 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
689 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
691 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
693 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pCertRecord->issuerNameLen);
694 _Base64::Decode(tmpName, pCertRecord->issuerNameLen, reinterpret_cast< byte* >(pCertRecord->issuerName), pCertRecord->issuerNameLen);
696 r = pEnum->GetIntAt(8, pCertRecord->parentCa);
697 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 8.", GetErrorMessage(r));
699 r = pEnum->GetStringAt(9, strVal);
700 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 9.", GetErrorMessage(r));
702 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
704 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
706 memcpy(pCertRecord->installed, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
707 pCertRecord->installed[pTempBuf->GetRemaining()] = '\0';
709 r = pEnum->GetStringAt(10, strVal);
710 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 10.", GetErrorMessage(r));
712 r = pEnum->GetIntAt(11, pCertRecord->serialNoLen);
713 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 11.", GetErrorMessage(r));
715 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
717 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
719 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
721 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
722 _Base64::Decode(tmpName, pCertRecord->serialNoLen, reinterpret_cast< byte* >(pCertRecord->serialNo), pCertRecord->serialNoLen);
728 _CaCertDbStore::GetNextRecordByCondition(byte* pCondition, CaCertRecord* pCertRecord, int curCertId)
730 result r = E_SUCCESS;
731 String statement(_MAX_QUERY_LEN);
734 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter.");
735 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Invalid input parameter.");
737 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
738 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
740 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
741 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
743 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM rootcert WHERE %s AND certId > '%d' ORDER BY certId", pCondition, curCertId);
744 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
747 return E_DATA_NOT_FOUND;
750 r = pEnum->MoveNext();
751 r = pEnum->GetIntAt(0, pCertRecord->certId);
752 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 0.", GetErrorMessage(r));
754 r = pEnum->GetIntAt(1, pCertRecord->certType);
755 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 1.", GetErrorMessage(r));
757 r = pEnum->GetIntAt(2, pCertRecord->certFormat);
758 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 2.", GetErrorMessage(r));
760 r = pEnum->GetStringAt(3, strVal);
761 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 3.");
763 std::unique_ptr< ByteBuffer > pTempBuf(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
765 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
767 memcpy(pCertRecord->fileName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
768 pCertRecord->fileName[pTempBuf->GetRemaining()] = '\0';
770 r = pEnum->GetIntAt(4, pCertRecord->subjectNameLen);
771 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 4.", GetErrorMessage(r));
773 r = pEnum->GetStringAt(5, strVal);
774 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 5.", GetErrorMessage(r));
776 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
778 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
780 memcpy(pCertRecord->subjectName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
781 pCertRecord->subjectName[pTempBuf->GetRemaining()] = '\0';
783 r = pEnum->GetIntAt(6, pCertRecord->issuerNameLen);
784 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 6.", GetErrorMessage(r));
786 r = pEnum->GetStringAt(7, strVal);
787 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 7.", GetErrorMessage(r));
789 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
791 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
793 memcpy(pCertRecord->issuerName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
794 pCertRecord->issuerName[pTempBuf->GetRemaining()] = '\0';
796 r = pEnum->GetIntAt(8, pCertRecord->parentCa);
797 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 8.", GetErrorMessage(r));
799 r = pEnum->GetStringAt(9, strVal);
800 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 9.", GetErrorMessage(r));
802 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
804 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
806 memcpy(pCertRecord->installed, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
807 pCertRecord->installed[pTempBuf->GetRemaining()] = '\0';
809 r = pEnum->GetStringAt(10, strVal);
810 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 10.", GetErrorMessage(r));
812 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
814 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
816 memcpy(pCertRecord->serialNo, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
817 pCertRecord->serialNo[pTempBuf->GetRemaining()] = '\0';
819 r = pEnum->GetIntAt(11, pCertRecord->serialNoLen);
820 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database of column 11.", GetErrorMessage(r));
826 _CaCertDbStore::GetCurrentCertId(int& curCertId)
828 result r = E_SUCCESS;
831 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
832 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
834 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
835 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
837 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN("SELECT seq FROM sqlite_sequence"));
840 return E_DATA_NOT_FOUND;
843 while (pEnum->MoveNext() == E_SUCCESS)
845 r = pEnum->GetIntAt(0, certId);
846 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
854 _CaCertDbStore::CheckIfSameParent(int certId)
856 result r = E_SUCCESS;
861 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
862 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
864 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
865 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
867 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM rootcert where parentCa = %d ORDER BY certId", certId);
869 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
870 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
872 while (pEnum->MoveNext() == E_SUCCESS)
874 r = pEnum->GetIntAt(0, curCertId);
875 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
879 SysTryReturnResult(NID_SEC_CERT, count > 1, E_SYSTEM, "Failed to get record.");
885 _CaCertDbStore::SelectCaCertificateBycertId(int certId, CaCertRecord* pCertRecord)
887 byte condition[_MAX_TYPE_CONST_SIZE] = {0, };
889 return _CaCertDbStore::GetNextRecordByCondition(static_cast< byte* >(condition), pCertRecord, certId);
894 _CaCertDbStore::RemoveCertificateById(int certId)
896 result r = E_SUCCESS;
899 SysTryReturnResult(NID_SEC_CERT, certId > 0, E_INVALID_ARG, "Invalid input parameter.");
901 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
902 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
904 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
905 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
907 r = pDatabase->BeginTransaction();
908 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
910 statement.Append(L"DELETE FROM rootcert WHERE certId = ?");
911 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
912 SysTryReturn(NID_SEC_CERT, pStmt != null, r, r, "[%s] Failed to create statement.", GetErrorMessage(r));
914 r = pStmt->BindInt(0, certId);
915 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
917 pDatabase->ExecuteStatementN(*pStmt);
919 r = pDatabase->CommitTransaction();
920 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
926 _CaCertDbStore::RemoveAllCertificates(void)
928 result r = E_SUCCESS;
931 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
932 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
934 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
935 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
937 r = pDatabase->BeginTransaction();
938 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
940 statement.Append(L"DELETE from rootcert");
942 r = pDatabase->ExecuteSql(statement, true);
943 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql.", GetErrorMessage(r));
945 r = pDatabase->CommitTransaction();
946 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
952 _CaCertDbStore::GetNumberOfCertificates(int& count)
954 result r = E_SUCCESS;
959 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
960 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
962 r = pDatabase->Construct(_CERT_ROOT_CA_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
963 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
965 statement.Append(L"SELECT * FROM rootcert");
966 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
967 std::unique_ptr< DbEnumerator > pEnum(pDatabase->ExecuteStatementN(*pStmt));
968 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
970 while (pEnum->MoveNext() == E_SUCCESS)
980 _UserCertDbStore::_UserCertDbStore(void)
984 _UserCertDbStore::~_UserCertDbStore(void)
989 _UserCertDbStore::InsertUserCertificate(UserCertRecord* pCertRecord)
991 result r = E_SUCCESS;
992 byte subjectNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
993 byte issuerNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
994 byte base64SerialNum[_MAX_SERIAL_NUMBER_SIZE] = {0, };
995 int subjectNameBase64Len = 0;
996 int base64IssuerNameLen = 0;
997 int base64SerialNumLen = 0;
1000 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Invalid input parameter.");
1002 memcpy(subjectNameBase64, pCertRecord->subjectName, pCertRecord->subjectNameLen);
1003 memcpy(issuerNameBase64, pCertRecord->issuerName, pCertRecord->issuerNameLen);
1004 memcpy(base64SerialNum, pCertRecord->serialNo, _MAX_SERIAL_NUMBER_SIZE);
1005 memset(pCertRecord->subjectName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1006 memset(pCertRecord->issuerName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1007 memset(pCertRecord->serialNo, 0, _MAX_SERIAL_NUMBER_SIZE);
1009 subjectNameBase64Len = _Base64::GetEncodedSize(pCertRecord->subjectNameLen);
1010 memset(pCertRecord->subjectName, 0, sizeof(pCertRecord->subjectName));
1011 r = _Base64::Encode(static_cast< byte* >(subjectNameBase64), pCertRecord->subjectNameLen, pCertRecord->subjectName, subjectNameBase64Len);
1012 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode subject name of certificate.");
1014 pCertRecord->subjectNameLen = subjectNameBase64Len;
1016 base64IssuerNameLen = _Base64::GetEncodedSize(pCertRecord->issuerNameLen);
1017 memset(pCertRecord->issuerName, 0, sizeof(pCertRecord->issuerName));
1018 r = _Base64::Encode(static_cast< byte* >(issuerNameBase64), pCertRecord->issuerNameLen, pCertRecord->issuerName, base64IssuerNameLen);
1019 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
1021 pCertRecord->issuerNameLen = base64IssuerNameLen;
1023 base64SerialNumLen = _Base64::GetEncodedSize(pCertRecord->serialNoLen);
1024 memset(pCertRecord->serialNo, 0, sizeof(pCertRecord->serialNo));
1025 r = _Base64::Encode(static_cast< byte* >(base64SerialNum), pCertRecord->serialNoLen, pCertRecord->serialNo, base64SerialNumLen);
1026 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode serial number of certificate.");
1028 pCertRecord->serialNoLen = base64SerialNumLen;
1030 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1031 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1033 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1034 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "Failed to construct database instance.");
1036 r = pDatabase->BeginTransaction();
1037 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1039 statement.Append(L"INSERT INTO usercert (certId, certPubKeyHash, certFormat, fileName, subjectNameLen, subjectName, issuerNameLen, issuerName, prvKeyPath, prvKeyLen, parentCa, installed, serialNo, serialNoLen) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)");
1040 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
1041 r = pStmt->BindString(1, pCertRecord->certPubKeyHash);
1042 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1043 r = pStmt->BindInt(2, pCertRecord->certFormat);
1044 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1045 r = pStmt->BindString(3, pCertRecord->fileName);
1046 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1047 r = pStmt->BindInt(4, pCertRecord->subjectNameLen);
1048 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1049 r = pStmt->BindString(5, pCertRecord->subjectName);
1050 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1051 r = pStmt->BindInt(6, pCertRecord->issuerNameLen);
1052 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1053 r = pStmt->BindString(7, pCertRecord->issuerName);
1054 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1055 r = pStmt->BindString(8, pCertRecord->prvKeyPath);
1056 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1057 r = pStmt->BindInt(9, pCertRecord->prvKeyLen);
1058 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1059 r = pStmt->BindInt(10, pCertRecord->parentCa);
1060 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1061 r = pStmt->BindString(11, pCertRecord->installed);
1062 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1063 r = pStmt->BindString(12, pCertRecord->serialNo);
1064 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1065 r = pStmt->BindInt(13, pCertRecord->serialNoLen);
1066 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1067 std::unique_ptr< DbEnumerator > pEnum(pDatabase->ExecuteStatementN(*pStmt));
1070 r = pDatabase->CommitTransaction();
1071 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
1077 _UserCertDbStore::UpdateParentCa(int certId, int parentCa)
1079 result r = E_SUCCESS;
1080 String statement(_MAX_QUERY_LEN);
1082 SysTryReturnResult(NID_SEC_CERT, certId > 0, E_INVALID_ARG, "Invalid input parameter.");
1083 SysTryReturnResult(NID_SEC_CERT, parentCa > 0, E_INVALID_ARG, "Invalid input parameter.");
1085 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1086 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory.");
1088 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1089 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1091 r = pDatabase->BeginTransaction();
1092 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1094 statement.Format(_MAX_QUERY_LEN, L"UPDATE usercert SET parentCa = '%d' WHERE certId = '%d'", parentCa, certId);
1095 r = pDatabase->ExecuteSql(statement, true);
1096 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql.", GetErrorMessage(r));
1098 r = pDatabase->CommitTransaction();
1099 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
1105 _UserCertDbStore::UpdateRecordByCondition(byte* pCondition)
1107 result r = E_SUCCESS;
1108 String statement(_MAX_QUERY_LEN);
1110 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter.");
1112 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1113 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1115 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1116 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1118 r = pDatabase->BeginTransaction();
1119 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1121 statement.Format(_MAX_QUERY_LEN, L"UPDATE usercert SET %s", pCondition);
1123 r = pDatabase->ExecuteSql(statement, true);
1124 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql statement.", GetErrorMessage(r));
1126 r = pDatabase->CommitTransaction();
1127 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transactoin.", GetErrorMessage(r));
1133 _UserCertDbStore::RemoveCertificateByCondition(byte* pCondition)
1135 result r = E_SUCCESS;
1139 String statement(_MAX_QUERY_LEN);
1142 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter.");
1144 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1145 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1147 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1148 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1150 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE %s ORDER BY certId", pCondition);
1151 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1152 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1155 while (pEnum->MoveNext() == E_SUCCESS)
1157 r = pEnum->GetIntAt(0, curCertId);
1158 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1160 r = _UserCertDbStore::RemoveCertificateById(curCertId);
1161 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to delete record from database.", GetErrorMessage(r));
1163 r = pEnum->GetStringAt(4, strVal);
1164 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1166 Tizen::Io::File::Remove(strVal);
1173 _UserCertDbStore::CheckDuplicateCertificate(byte* pSubjectName, int subjectNameLen)
1175 result r = E_SUCCESS;
1176 char subjectNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
1177 int subjectNameBase64Len = 0;
1178 String statement(_MAX_QUERY_LEN);
1180 SysTryReturnResult(NID_SEC_CERT, pSubjectName != null, E_INVALID_ARG, "Invalid input parameter.");
1181 SysTryReturnResult(NID_SEC_CERT, subjectNameLen > 0, E_INVALID_ARG, "Invalid input parameter.");
1183 subjectNameBase64Len = _Base64::GetEncodedSize(subjectNameLen);
1184 memset(subjectNameBase64, 0, sizeof(subjectNameBase64));
1185 r = _Base64::Encode(static_cast< byte* >(pSubjectName), subjectNameLen, subjectNameBase64, subjectNameBase64Len);
1186 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode subject name of certificate.");
1188 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1189 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1191 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1192 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1194 r = pDatabase->BeginTransaction();
1195 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1197 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE subjectName = '%s' AND subjectNameLen = '%d'", subjectNameBase64, subjectNameBase64Len);
1199 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1200 r = GetLastResult();
1201 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result.");
1202 SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database.");
1208 _UserCertDbStore::CheckDuplicateCertificate(byte* pIssuerName, int issuerNameLen, byte* pSerialNumber)
1210 result r = E_SUCCESS;
1211 char issuerNameBase64[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
1212 char base64SerialNo[_MAX_SERIAL_NUMBER_SIZE] = {0, };
1213 int base64IssuerNameLen = 0;
1214 int base64SerialNoLen = 0;
1215 int serialNoLen = 0;
1216 String statement(_MAX_QUERY_LEN);
1218 SysTryReturnResult(NID_SEC_CERT, pIssuerName != null, E_INVALID_ARG, "Invald input parameter");
1219 SysTryReturnResult(NID_SEC_CERT, issuerNameLen >= 0, E_INVALID_ARG, "Invald input parameter");
1220 SysTryReturnResult(NID_SEC_CERT, pSerialNumber != null, E_INVALID_ARG, "Invald input parameter");
1222 base64IssuerNameLen = _Base64::GetEncodedSize(issuerNameLen);
1223 memset(issuerNameBase64, 0, sizeof(issuerNameBase64));
1224 r = _Base64::Encode(pIssuerName, issuerNameLen, issuerNameBase64, base64IssuerNameLen);
1225 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode issuer name of certificate.");
1227 serialNoLen = strlen(reinterpret_cast< const char* >(pSerialNumber));
1229 base64SerialNoLen = _Base64::GetEncodedSize(serialNoLen);
1230 memset(base64SerialNo, 0, sizeof(base64SerialNo));
1231 r = _Base64::Encode(pSerialNumber, serialNoLen, base64SerialNo, base64SerialNoLen);
1232 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r), E_ENCODING_FAILED, "Failed to encode serial number of certificate.");
1234 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1235 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1237 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1238 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1240 r = pDatabase->BeginTransaction();
1241 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1243 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE issuerName = '%s' AND issuerNameLen = '%d' AND serialNo = '%s'", issuerNameBase64, base64IssuerNameLen, base64SerialNo);
1244 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1245 r = GetLastResult();
1246 SysTryReturnResult(NID_SEC_CERT, !IsFailed(r) , r, "Failed to get query result.");
1247 SysTryReturnResult(NID_SEC_CERT, pEnum != null , E_DATA_NOT_FOUND, "No certificate found in database.");
1253 _UserCertDbStore::GetFirstRecordByConditions(byte* pCondition, UserCertRecord* pCertRecord)
1255 result r = E_SUCCESS;
1256 String statement(_MAX_QUERY_LEN);
1257 char tmpName[_MAX_ISSUER_SUBJECT_NAME_SIZE] = {0, };
1261 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Invalid input parameter");
1262 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Invalid input parameter");
1264 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1265 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1267 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1268 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1270 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE %s", pCondition);
1271 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1272 SysTryReturn(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, E_DATA_NOT_FOUND, "No certificate found in database.");
1275 r = pEnum->MoveNext();
1276 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1278 r = pEnum->GetIntAt(0, pCertRecord->certId);
1279 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 0.", GetErrorMessage(r));
1281 r = pEnum->GetStringAt(1, strVal);
1282 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 1.", GetErrorMessage(r));
1284 std::unique_ptr< ByteBuffer > pTempBuf(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1285 r = GetLastResult();
1286 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1288 memcpy(pCertRecord->certPubKeyHash, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1289 pCertRecord->certPubKeyHash[pTempBuf->GetRemaining()] = '\0';
1291 r = pEnum->GetIntAt(2, pCertRecord->certFormat);
1292 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 2.", GetErrorMessage(r));
1294 r = pEnum->GetStringAt(3, strVal);
1295 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 3.", GetErrorMessage(r));
1297 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1298 r = GetLastResult();
1299 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1301 memcpy(pCertRecord->fileName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1302 pCertRecord->fileName[pTempBuf->GetRemaining()] = '\0';
1304 r = pEnum->GetIntAt(4, pCertRecord->subjectNameLen);
1305 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 4.", GetErrorMessage(r));
1307 r = pEnum->GetStringAt(5, strVal);
1308 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 5.", GetErrorMessage(r));
1310 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1311 r = GetLastResult();
1312 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1314 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1315 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1316 _Base64::Decode(tmpName, pCertRecord->subjectNameLen, reinterpret_cast< byte* >(pCertRecord->subjectName), pCertRecord->subjectNameLen);
1318 r = pEnum->GetIntAt(6, pCertRecord->issuerNameLen);
1319 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 6.", GetErrorMessage(r));
1321 r = pEnum->GetStringAt(7, strVal);
1322 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 7.", GetErrorMessage(r));
1324 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1325 r = GetLastResult();
1326 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1329 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1330 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1331 _Base64::Decode(tmpName, pCertRecord->issuerNameLen, reinterpret_cast< byte* >(pCertRecord->issuerName), pCertRecord->issuerNameLen);
1333 r = pEnum->GetStringAt(8, strVal);
1334 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 8.", GetErrorMessage(r));
1336 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1339 memcpy(pCertRecord->prvKeyPath, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1343 memset(pCertRecord->prvKeyPath, 0, _MAX_PRV_KEY_PATH_SIZE_SIZE);
1346 r = pEnum->GetIntAt(9, pCertRecord->prvKeyLen);
1347 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 9.", GetErrorMessage(r));
1349 r = pEnum->GetIntAt(10, pCertRecord->parentCa);
1350 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 10.", GetErrorMessage(r));
1352 r = pEnum->GetStringAt(11, strVal);
1353 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 11.", GetErrorMessage(r));
1355 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1356 r = GetLastResult();
1357 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1359 memcpy(pCertRecord->installed, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1360 pCertRecord->installed[pTempBuf->GetRemaining()] = '\0';
1362 r = pEnum->GetStringAt(12, strVal);
1363 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 12.", GetErrorMessage(r));
1365 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1366 r = GetLastResult();
1367 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1369 memset(tmpName, 0, _MAX_ISSUER_SUBJECT_NAME_SIZE);
1370 memcpy(tmpName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1372 len = pTempBuf->GetRemaining();
1373 _Base64::Decode(tmpName, len, reinterpret_cast< byte* >(pCertRecord->serialNo), len);
1375 r = pEnum->GetIntAt(13, pCertRecord->serialNoLen);
1376 pCertRecord->serialNoLen = _Base64::GetDecodedSize(pCertRecord->serialNoLen);
1377 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 13.", GetErrorMessage(r));
1383 _UserCertDbStore::GetNextRecordByCondition(byte* pCondition, UserCertRecord* pCertRecord, int curCertId)
1385 result r = E_SUCCESS;
1386 String statement(_MAX_QUERY_LEN);
1389 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Input parameters are invalid");
1390 SysTryReturnResult(NID_SEC_CERT, pCertRecord != null, E_INVALID_ARG, "Input parameters are invalid");
1392 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1393 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1395 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1396 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1398 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE %s AND certId > '%d'", pCondition, curCertId);
1399 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1400 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1402 r = pEnum->MoveNext();
1403 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1405 r = pEnum->GetIntAt(0, pCertRecord->certId);
1406 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 0.", GetErrorMessage(r));
1408 r = pEnum->GetStringAt(1, strVal);
1409 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 1.", GetErrorMessage(r));
1411 std::unique_ptr< ByteBuffer > pTempBuf(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1412 r = GetLastResult();
1413 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1415 memcpy(pCertRecord->certPubKeyHash, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1416 pCertRecord->certPubKeyHash[pTempBuf->GetRemaining()] = '\0';
1418 r = pEnum->GetIntAt(2, pCertRecord->certFormat);
1419 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 2.", GetErrorMessage(r));
1421 r = pEnum->GetStringAt(3, strVal);
1422 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 3.", GetErrorMessage(r));
1424 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1425 r = GetLastResult();
1426 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1428 memcpy(pCertRecord->fileName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1429 pCertRecord->fileName[pTempBuf->GetRemaining()] = '\0';
1431 r = pEnum->GetIntAt(4, pCertRecord->subjectNameLen);
1432 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 4.", GetErrorMessage(r));
1434 r = pEnum->GetStringAt(5, strVal);
1435 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 5.", GetErrorMessage(r));
1437 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1438 r = GetLastResult();
1439 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1441 memcpy(pCertRecord->subjectName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1442 pCertRecord->subjectName[pTempBuf->GetRemaining()] = '\0';
1444 r = pEnum->GetIntAt(6, pCertRecord->issuerNameLen);
1445 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 6.", GetErrorMessage(r));
1447 r = pEnum->GetStringAt(7, strVal);
1448 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 7.", GetErrorMessage(r));
1450 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1451 r = GetLastResult();
1452 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1454 memcpy(pCertRecord->issuerName, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1455 pCertRecord->issuerName[pTempBuf->GetRemaining()] = '\0';
1457 r = pEnum->GetStringAt(8, strVal);
1458 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 8.", GetErrorMessage(r));
1460 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1463 memcpy(pCertRecord->prvKeyPath, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1467 memset(pCertRecord->prvKeyPath, 0, _MAX_PRV_KEY_PATH_SIZE_SIZE);
1470 r = pEnum->GetIntAt(9, pCertRecord->prvKeyLen);
1471 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 9.", GetErrorMessage(r));
1473 r = pEnum->GetIntAt(10, pCertRecord->parentCa);
1474 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 10.", GetErrorMessage(r));
1476 r = pEnum->GetStringAt(11, strVal);
1477 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 11.", GetErrorMessage(r));
1479 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1480 r = GetLastResult();
1481 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1483 memcpy(pCertRecord->installed, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1484 pCertRecord->installed[pTempBuf->GetRemaining()] = '\0';
1486 r = pEnum->GetStringAt(12, strVal);
1487 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 12.", GetErrorMessage(r));
1489 pTempBuf.reset(Tizen::Base::Utility::StringUtil::StringToUtf8N(strVal));
1490 r = GetLastResult();
1491 SysTryReturn(NID_SEC_CERT, pTempBuf != null, r, r, "[%s] String to Utf8 function failed.", GetErrorMessage(r));
1493 memcpy(pCertRecord->serialNo, reinterpret_cast< const char* >(pTempBuf->GetPointer()), pTempBuf->GetRemaining());
1494 pCertRecord->serialNo[pTempBuf->GetRemaining()] = '\0';
1496 r = pEnum->GetIntAt(13, pCertRecord->serialNoLen);
1497 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database from column 13.", GetErrorMessage(r));
1503 _UserCertDbStore::GetCurrentCertId(int& curCertId)
1505 result r = E_SUCCESS;
1508 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1509 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1511 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1512 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1514 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN("SELECT seq FROM sqlite_sequence"));
1515 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1517 r = pEnum->MoveNext();
1518 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to move next.", GetErrorMessage(r));
1520 r = pEnum->GetIntAt(0, certId);
1521 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1529 _UserCertDbStore::GetCountByCondition(byte* pCondition, int& count)
1531 result r = E_SUCCESS;
1533 String statement(_MAX_QUERY_LEN);
1535 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Input parameter are invalid");
1537 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1538 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1540 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1541 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Construct fails.", GetErrorMessage(r));
1543 statement.Format(_MAX_QUERY_LEN, L"SELECT * FROM usercert WHERE %s", pCondition);
1544 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1545 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in Db.");
1547 while (pEnum->MoveNext() == E_SUCCESS)
1558 _UserCertDbStore::GetParentCaByCondition(byte* pCondition, int& parentCa)
1560 result r = E_SUCCESS;
1561 int currParentCa = 0;
1562 String statement(_MAX_QUERY_LEN);
1564 SysTryReturnResult(NID_SEC_CERT, pCondition != null, E_INVALID_ARG, "Input parameter are invalid");
1566 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1567 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1569 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1570 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1572 statement.Format(_MAX_QUERY_LEN, L"SELECT parentCa FROM usercert WHERE %s", pCondition);
1573 std::unique_ptr< DbEnumerator > pEnum(pDatabase->QueryN(statement));
1574 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1576 if (pEnum->MoveNext() == E_SUCCESS)
1578 r = pEnum->GetIntAt(10, currParentCa);
1579 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Unable to get data from database.", GetErrorMessage(r));
1582 parentCa = currParentCa;
1588 _UserCertDbStore::SelectUserCertificateBycertId(int certId, UserCertRecord* pCertRecord)
1590 byte condition[_MAX_TYPE_CONST_SIZE] = {0, };
1592 return _UserCertDbStore::GetNextRecordByCondition(static_cast< byte* >(condition), pCertRecord, certId);
1597 _UserCertDbStore::RemoveCertificateById(int certId)
1599 result r = E_SUCCESS;
1602 SysTryReturnResult(NID_SEC_CERT, certId > 0, E_INVALID_ARG, "Invalid input certificate id.");
1604 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1605 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1607 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1608 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1610 r = pDatabase->BeginTransaction();
1611 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1613 statement.Append(L"DELETE FROM usercert WHERE certId = ?");
1614 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
1615 SysTryReturn(NID_SEC_CERT, pStmt, GetLastResult(), GetLastResult(), "[%s] Failed to create statement.", GetErrorMessage(GetLastResult()));
1617 r = pStmt->BindInt(0, certId);
1618 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to bind colmun in database statement.", GetErrorMessage(r));
1620 pDatabase->ExecuteStatementN(*pStmt);
1622 r = pDatabase->CommitTransaction();
1623 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
1629 _UserCertDbStore::RemoveAllCertificates(void)
1631 result r = E_SUCCESS;
1634 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1635 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1637 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_WRITE, 0);
1638 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1640 r = pDatabase->BeginTransaction();
1641 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to begin transaction.", GetErrorMessage(r));
1643 statement.Append(L"DELETE from usercert");
1644 r = pDatabase->ExecuteSql(statement, true);
1645 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to execute sql.", GetErrorMessage(r));
1647 r = pDatabase->CommitTransaction();
1648 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to commit transaction.", GetErrorMessage(r));
1654 _UserCertDbStore::GetNumberOfCertificates(int& count)
1656 result r = E_SUCCESS;
1660 std::unique_ptr< Database > pDatabase(new (std::nothrow) Database());
1661 SysTryReturnResult(NID_SEC_CERT, pDatabase != null, E_OUT_OF_MEMORY, "Failed to allocate memory");
1663 r = pDatabase->Construct(_CERT_USER_CERT_TABLE, DB_OPEN_READ_ONLY, 0);
1664 SysTryReturn(NID_SEC_CERT, !IsFailed(r), r, r, "[%s] Failed to construct database instance.", GetErrorMessage(r));
1666 statement.Append(L"SELECT * FROM usercert");
1668 std::unique_ptr< DbStatement > pStmt(pDatabase->CreateStatementN(statement));
1669 SysTryReturnResult(NID_SEC_CERT, pStmt != null, E_DATA_NOT_FOUND, "Failed to create statement for user certifcates.");
1671 std::unique_ptr< DbEnumerator > pEnum(pDatabase->ExecuteStatementN(*pStmt.get()));
1672 SysTryReturnResult(NID_SEC_CERT, pEnum != null, E_DATA_NOT_FOUND, "No certificate found in database.");
1674 while (pEnum->MoveNext() == E_SUCCESS)
1684 } } } //Tizen::Security::Cert