7#ifndef LOGICALACCESS_SAMKEYENTRY_HPP
8#define LOGICALACCESS_SAMKEYENTRY_HPP
88template <
typename T,
typename S>
95 memset(&d_keyentryinformation, 0x00,
sizeof(d_keyentryinformation));
98 explicit SAMKeyEntry(
const std::string &str,
const std::string &str1 =
"",
99 const std::string &str2 =
"")
102 memset(&d_keyentryinformation, 0x00,
sizeof(d_keyentryinformation));
108 memset(&d_keyentryinformation, 0x00,
sizeof(d_keyentryinformation));
125 return !operator==(key);
130 memcpy(d_keyentryinformation.set, t,
sizeof(*t));
136 char *x = (
char *)&set;
138 unsigned char set_save[2];
141 memcpy(set_save, d_keyentryinformation.set, 2);
143 for (
char i = 7; i >= 0; --i)
145 if ((set_save[j] & 0x80) == 0x80)
149 set_save[j] = set_save[j] << 1;
150 if (i == 0 && j == 0)
162 char *x = (
char *)&t;
163 memset(d_keyentryinformation.set, 0, 2);
165 for (
char i = 7; i >= 0; --i)
167 d_keyentryinformation.set[j] += (char)x[i + j * 8];
168 if (i == 0 && j == 0)
174 d_keyentryinformation.set[j] = d_keyentryinformation.set[j] << 1;
180 return d_keyentryinformation;
184 d_keyentryinformation = t;
189 unsigned char keytype = 0x38 & d_keyentryinformation.set[0];
190 size_t oldsize = getLength();
202 unsigned char *tmp =
new unsigned char[getLength()];
203 if (getLength() < oldsize)
204 oldsize = getLength();
205 memcpy(tmp, &*d_key, oldsize);
212 d_keyentryinformation.set[0] =
213 d_keyentryinformation.set[0] - (0x38 & d_keyentryinformation.set[0]);
220 case SAM_KEY_AES: d_keyentryinformation.set[0] |= 0x20;
break;
226 SAMBasicKeyEntry::setKeysData(keys, type);
227 setSETKeyTypeFromKeyType();
A SAMBasicKeyEntry Key class.
Definition: sambasickeyentry.hpp:73
A SAMKeyEntry class.
Definition: samkeyentry.hpp:90
SAMKeyEntry(const void **buf, size_t buflen, char numberkey)
Definition: samkeyentry.hpp:105
void setKeyEntryInformation(const T &t)
Definition: samkeyentry.hpp:182
void setSET(unsigned char *t)
Definition: samkeyentry.hpp:128
SAMKeyEntry()
Definition: samkeyentry.hpp:92
T d_keyentryinformation
Definition: samkeyentry.hpp:231
S getSETStruct()
Definition: samkeyentry.hpp:133
bool operator!=(const SAMKeyEntry &key) const
Inequality operator.
Definition: samkeyentry.hpp:123
void setSETKeyTypeFromKeyType()
Definition: samkeyentry.hpp:210
void setKeyTypeFromSET()
Definition: samkeyentry.hpp:187
void setSET(const S &t)
Definition: samkeyentry.hpp:160
SAMKeyEntry(const std::string &str, const std::string &str1="", const std::string &str2="")
Definition: samkeyentry.hpp:98
T & getKeyEntryInformation()
Definition: samkeyentry.hpp:178
void setKeysData(std::vector< ByteVector > keys, SAMKeyType type) override
Set the keys data.
Definition: samkeyentry.hpp:224
~SAMKeyEntry()
Destructor.
Definition: samkeyentry.hpp:114
SAMKeyType
The SAM key type.
Definition: sambasickeyentry.hpp:33
@ SAM_KEY_AES
Definition: sambasickeyentry.hpp:33
@ SAM_KEY_DES
Definition: sambasickeyentry.hpp:33
@ SAM_KEY_3K3DES
Definition: sambasickeyentry.hpp:33
struct logicalaccess::s_KeyEntryAV1Information KeyEntryAV1Information
struct logicalaccess::s_KeyEntryAV2Information KeyEntryAV2Information
struct logicalaccess::s_EXTSET ExtSETStruct
struct logicalaccess::s_SETAV2 SETAV2
struct logicalaccess::s_SETAV1 SETAV1
Definition: samkeyentry.hpp:51
unsigned char keyclass[3]
Definition: samkeyentry.hpp:52
unsigned char dumpsessionkey
Definition: samkeyentry.hpp:53
unsigned char rfu[2]
Definition: samkeyentry.hpp:55
unsigned char diversifieduse
Definition: samkeyentry.hpp:54
Definition: samkeyentry.hpp:59
unsigned char verc
Definition: samkeyentry.hpp:68
unsigned char desfireAid[3]
Definition: samkeyentry.hpp:60
unsigned char cekno
Definition: samkeyentry.hpp:62
unsigned char vera
Definition: samkeyentry.hpp:66
unsigned char desfirekeyno
Definition: samkeyentry.hpp:61
unsigned char kuc
Definition: samkeyentry.hpp:64
unsigned char set[2]
Definition: samkeyentry.hpp:65
unsigned char verb
Definition: samkeyentry.hpp:67
unsigned char cekv
Definition: samkeyentry.hpp:63
Definition: samkeyentry.hpp:72
unsigned char desfirekeyno
Definition: samkeyentry.hpp:74
unsigned char ExtSET
Definition: samkeyentry.hpp:82
unsigned char cekno
Definition: samkeyentry.hpp:75
unsigned char desfireAid[3]
Definition: samkeyentry.hpp:73
unsigned char verc
Definition: samkeyentry.hpp:81
unsigned char kuc
Definition: samkeyentry.hpp:77
unsigned char set[2]
Definition: samkeyentry.hpp:78
unsigned char verb
Definition: samkeyentry.hpp:80
unsigned char vera
Definition: samkeyentry.hpp:79
unsigned char cekv
Definition: samkeyentry.hpp:76
Definition: samkeyentry.hpp:17
unsigned char keepIV
Definition: samkeyentry.hpp:20
unsigned char rfu[2]
Definition: samkeyentry.hpp:22
unsigned char disablewritekeytopicc
Definition: samkeyentry.hpp:26
unsigned char disablegeneratemac
Definition: samkeyentry.hpp:30
unsigned char disableencryption
Definition: samkeyentry.hpp:28
unsigned char dumpsessionkey
Definition: samkeyentry.hpp:18
unsigned char hostauthenticationafterreset
Definition: samkeyentry.hpp:25
unsigned char disablekeyentry
Definition: samkeyentry.hpp:24
unsigned char keytype[3]
Definition: samkeyentry.hpp:21
unsigned char allowcrypto
Definition: samkeyentry.hpp:19
unsigned char hightcommandsecurity
Definition: samkeyentry.hpp:23
unsigned char disabledecryption
Definition: samkeyentry.hpp:27
unsigned char disableverifymac
Definition: samkeyentry.hpp:29
Definition: samkeyentry.hpp:34
unsigned char authkey
Definition: samkeyentry.hpp:40
unsigned char lockkey
Definition: samkeyentry.hpp:42
unsigned char disabledecryption
Definition: samkeyentry.hpp:44
unsigned char disablegeneratemac
Definition: samkeyentry.hpp:47
unsigned char keytype[3]
Definition: samkeyentry.hpp:38
unsigned char disablewritekeytopicc
Definition: samkeyentry.hpp:43
unsigned char dumpsessionkey
Definition: samkeyentry.hpp:35
unsigned char disableverifymac
Definition: samkeyentry.hpp:46
unsigned char allowcrypto
Definition: samkeyentry.hpp:36
unsigned char keepIV
Definition: samkeyentry.hpp:37
unsigned char disableencryption
Definition: samkeyentry.hpp:45
unsigned char rfu[2]
Definition: samkeyentry.hpp:39
unsigned char disablekeyentry
Definition: samkeyentry.hpp:41