2 * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
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 * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
22 #include <data-type.h>
28 : m_dataType(BINARY_DATA)
31 DataType::DataType(Type data)
35 ThrowMsg(Exception::OutOfRange, "Invalid conversion from DataType to DBDataType");
38 DataType::DataType(KeyType key) {
40 case KeyType::KEY_RSA_PUBLIC: m_dataType = DataType::KEY_RSA_PUBLIC; break;
41 case KeyType::KEY_RSA_PRIVATE: m_dataType = DataType::KEY_RSA_PRIVATE; break;
42 case KeyType::KEY_DSA_PUBLIC: m_dataType = DataType::KEY_DSA_PUBLIC; break;
43 case KeyType::KEY_DSA_PRIVATE: m_dataType = DataType::KEY_DSA_PRIVATE; break;
44 case KeyType::KEY_ECDSA_PUBLIC: m_dataType = DataType::KEY_ECDSA_PUBLIC; break;
45 case KeyType::KEY_ECDSA_PRIVATE: m_dataType = DataType::KEY_ECDSA_PRIVATE; break;
46 case KeyType::KEY_AES: m_dataType = DataType::KEY_AES; break;
48 ThrowMsg(Exception::OutOfRange, "Invalid conversion from KeyType to DBDataType");
52 DataType::DataType(AlgoType algorithmType) {
53 switch(algorithmType) {
54 case AlgoType::AES_CTR:
55 case AlgoType::AES_CBC:
56 case AlgoType::AES_GCM:
57 case AlgoType::AES_CFB: m_dataType = DataType::KEY_AES; break;
58 case AlgoType::RSA_GEN: m_dataType = DataType::KEY_RSA_PUBLIC; break;
59 case AlgoType::DSA_GEN: m_dataType = DataType::KEY_DSA_PUBLIC; break;
60 case AlgoType::ECDSA_GEN: m_dataType = DataType::KEY_ECDSA_PUBLIC; break;
62 ThrowMsg(Exception::OutOfRange, "Invalid conversion from AlgoType to DBDataType");
66 DataType::DataType(int data)
67 : m_dataType(static_cast<Type>(data))
70 ThrowMsg(Exception::OutOfRange, "Invalid conversion from int to DBDataType");
73 DataType::operator int () const {
74 return static_cast<int>(m_dataType);
77 DataType::operator KeyType () const {
79 case DataType::KEY_RSA_PUBLIC: return KeyType::KEY_RSA_PUBLIC;
80 case DataType::KEY_RSA_PRIVATE: return KeyType::KEY_RSA_PRIVATE;
81 case DataType::KEY_DSA_PUBLIC: return KeyType::KEY_DSA_PUBLIC;
82 case DataType::KEY_DSA_PRIVATE: return KeyType::KEY_DSA_PRIVATE;
83 case DataType::KEY_ECDSA_PRIVATE: return KeyType::KEY_ECDSA_PRIVATE;
84 case DataType::KEY_ECDSA_PUBLIC: return KeyType::KEY_ECDSA_PUBLIC;
85 case DataType::KEY_AES: return KeyType::KEY_AES;
87 ThrowMsg(Exception::OutOfRange, "Invalid conversion from DBDataType to KeyType");
91 bool DataType::operator==(const DataType &second) const {
92 return m_dataType == second.m_dataType;
95 bool DataType::isKey() const {
96 if (DB_KEY_FIRST <= m_dataType && DB_KEY_LAST >= m_dataType)
101 bool DataType::isSKey() const {
102 return (KEY_AES == m_dataType);
105 bool DataType::isChainCert() const {
106 if (DB_CHAIN_FIRST <= m_dataType && DB_CHAIN_LAST >= m_dataType)
111 bool DataType::isKeyPrivate() const {
112 switch (m_dataType) {
113 case KEY_RSA_PRIVATE:
114 case KEY_DSA_PRIVATE:
115 case KEY_ECDSA_PRIVATE:
122 bool DataType::isKeyPublic() const {
123 switch (m_dataType) {
126 case KEY_ECDSA_PUBLIC:
133 bool DataType::isCertificate() const {
134 return m_dataType == CERTIFICATE;
137 bool DataType::isBinaryData() const {
138 return m_dataType == BINARY_DATA;
141 bool DataType::isInRange(int data) {
142 if (data < static_cast<int>(DB_FIRST))
144 if (data > static_cast<int>(DB_LAST))
149 DataType DataType::getChainDatatype(unsigned int index)
151 DataType result(static_cast<int>(index) + DB_CHAIN_FIRST);
153 if ( !result.isChainCert() )
154 ThrowMsg(Exception::OutOfRange, "Certificate number is out of range");