00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
#ifndef HBCICARD_H
00030
#define HBCICARD_H
00031
00032
struct s_card_id;
00033
class HBCICard;
00034
00035
00036 #define k_HBCICARD_TYPE_UNKNOWN 0
00037 #define k_HBCICARD_TYPE_0 1
00038 #define k_HBCICARD_TYPE_1 2
00039
00040
00041
#include <string>
00042
#include <chipcard/cterror.h>
00043
00044
00045
00055 class CHIPCARD_API HBCICard :
public CTProcessorCard {
00056
private:
00057
00058
int _type;
00059 string _cid;
00060 string _cmdPutInstData;
00061 string _cmdVerifyPin;
00062 string _cmdSecureVerifyPin;
00063
00064 s_card_id *_make_card_id(string &data);
00065
00070
CTError _checkType();
00071
00073
bool _hash2mac0(string &hash, string &mac);
00074
00076
bool _hash2mac1(string &hash, string &mac);
00077
00078
bool _getKeyVersion0(
int key,
int &kv);
00079
bool _getKeyVersion1(
int key,
int &kv);
00080
00081
CTError _getCID(string &cid);
00082
00083
public:
00088 class CHIPCARD_API CardData {
00089
private:
00090
unsigned char _cardtype;
00091
unsigned char _industrialkey;
00092
unsigned int _shortinstcode;
00093 string _cardnumber;
00094
unsigned char _bestuntil_year;
00095
unsigned char _bestuntil_month;
00096
unsigned char _active_year;
00097
unsigned char _active_month;
00098
unsigned char _active_day;
00099
unsigned short _countrycode;
00100 string _currency;
00101
00102
public:
00103 CardData();
00104 CardData(
const string &s,
int cardtype);
00105 ~CardData();
00106
00111 int cardType()
const {
return _cardtype;};
00116 int industrialKey()
const {
return _industrialkey;};
00120 unsigned int shortInstituteCode()
const {
return _shortinstcode;};
00124 const string &cardNumber()
const {
return _cardnumber;};
00128 int bestuntil_year()
const {
return _bestuntil_year;};
00132 int bestuntil_month()
const {
return _bestuntil_month;};
00136 int active_year()
const {
return _active_year;};
00140 int active_month()
const {
return _active_month;};
00144 int active_day()
const {
return _active_day;};
00148 int countryCode()
const {
return _countrycode;};
00152 const string ¤cy()
const {
return _currency;};
00153 };
00154
00159 class CHIPCARD_API instituteData {
00160
private:
00161 string _name;
00162 string _code;
00163
char _service;
00164 string _addr;
00165 string _addr_suffix;
00166
int _country;
00167 string _user;
00168
00169
public:
00173 const string &name()
const {
return _name;};
00177 const string &code()
const {
return _code;};
00178 void setCode(
const string &c) { _code=c;};
00179
00183 char service()
const {
return _service;};
00184 void setService(
char s) { _service=s;};
00185
00189 const string &address()
const {
return _addr;};
00190 void setAddress(
const string &a) { _addr=a;};
00191
00195 const string &addressSuffix()
const {
return _addr_suffix;};
00196 void setAddrSuffix(
const string &s) { _addr_suffix=s;};
00197
00201 int country()
const {
return _country;};
00202 void setCountry(
int i) { _country=i;};
00203
00207 const string &user()
const {
return _user;};
00208 void setUser(
const string &u) { _user=u;};
00209
00210 instituteData(
const string &data);
00211 instituteData();
00212 ~instituteData();
00213
00214
CTError fromString(
const string &data);
00215 string toString() const;
00216
00217 string dump();
00218 };
00219
00220
00226 HBCICard(const
CTCard &c);
00227
00228 ~HBCICard();
00230
00249 virtual
CTError reopenCard();
00250
00262 virtual
CTError openCard();
00263
00271 virtual
CTError closeCard(
bool force=false);
00273
00284 virtual string cardType();
00285
00294 virtual string cardTypes();
00295
00301 string cardNumber();
00303
00316 CardData getCardId();
00317
00325
CTError getCID(string &cid);
00327
00341 instituteData getInstituteData(
int num);
00342
00346
CTError getInstituteData(
int num, instituteData &idata);
00347
00355
CTError putInstituteData(
int num, const instituteData &d);
00357
00370
CTError verifyPin(const string &pin);
00371
00376
CTError verifyPin();
00378
00392
bool getKeyVersion(
int key,
int &kv);
00393
00399
bool getCryptKeyNumber(
int &kn);
00400
00406
bool getSignKeyNumber(
int &kn);
00408
00423
bool hash2MAC(string &hash, string &mac);
00424
00430
bool getRandom(string &d);
00431
00441
bool cryptBlock(string &src, string &dst);
00443
00457
bool readSEQ(
unsigned int &d);
00458
00465
bool writeSEQ(
unsigned int d);
00467
00468 };
00469
00470
00471 #endif
00472
00473
00474
00475
00476
00477