Keyple Card Calypso C++ Library 2.2.2
Reference Terminal Reader API for C++
CommonSignatureVerificationDataAdapter.h
Go to the documentation of this file.
1/**************************************************************************************************
2 * Copyright (c) 2022 Calypso Networks Association https://calypsonet.org/ *
3 * *
4 * See the NOTICE file(s) distributed with this work for additional information regarding *
5 * copyright ownership. *
6 * *
7 * This program and the accompanying materials are made available under the terms of the Eclipse *
8 * Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0 *
9 * *
10 * SPDX-License-Identifier: EPL-2.0 *
11 **************************************************************************************************/
12
13#pragma once
14
15#include <memory>
16
17/* Calypsonet Terminal Calypso */
18#include "CommonSignatureVerificationData.h"
19
20/* Keyple Core Util */
21#include "IllegalStateException.h"
22
23namespace keyple {
24namespace card {
25namespace calypso {
26
27using namespace calypsonet::terminal::calypso::transaction;
28using namespace keyple::core::util::cpp::exception;
29
37template <typename T>
38class CommonSignatureVerificationDataAdapter : virtual public CommonSignatureVerificationData<T> {
39public:
45 T& setData(const std::vector<uint8_t>& data,
46 const std::vector<uint8_t>& signature,
47 const uint8_t kif,
48 const uint8_t kvc) override
49 {
50 mData = data;
51 mSignature = signature;
52 mKif = kif;
53 mKvc = kvc;
54
55 return dynamic_cast<T&>(*this);
56 }
57
63 T& setKeyDiversifier(const std::vector<uint8_t>& diversifier) override
64 {
65 mKeyDiversifier = diversifier;
66 mIsKeyDiversifierSet = true;
67
68 return dynamic_cast<T&>(*this);
69 }
70
76 bool isSignatureValid() const override
77 {
78 if (mIsSignatureValid == nullptr) {
79 throw IllegalStateException("The command has not yet been processed");
80 }
81
82 return *mIsSignatureValid;
83 }
84
91 virtual const std::vector<uint8_t>& getData() const
92 {
93 return mData;
94 }
95
103 virtual const std::vector<uint8_t>& getSignature() const
104 {
105 return mSignature;
106 }
107
114 virtual uint8_t getKif() const
115 {
116 return mKif;
117 }
118
125 virtual uint8_t getKvc() const
126 {
127 return mKvc;
128 }
129
137 virtual void setSignatureValid(const bool isSignatureValid)
138 {
139 mIsSignatureValid = std::make_shared<bool>(isSignatureValid);
140 }
141
148 virtual const std::vector<uint8_t>& getKeyDiversifier() const
149 {
150 return mKeyDiversifier;
151 }
152
157 {
158 return mIsKeyDiversifierSet;
159 }
160
161private:
165 std::vector<uint8_t> mData;
166
170 std::vector<uint8_t> mSignature;
171
175 uint8_t mKif;
176
180 uint8_t mKvc;
181
185 std::vector<uint8_t> mKeyDiversifier;
186
190 bool mIsKeyDiversifierSet = false;
191
195 std::shared_ptr<bool> mIsSignatureValid = nullptr;
196};
197
198}
199}
200}
T & setKeyDiversifier(const std::vector< uint8_t > &diversifier) override
T & setData(const std::vector< uint8_t > &data, const std::vector< uint8_t > &signature, const uint8_t kif, const uint8_t kvc) override