mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 22:03:42 -07:00
move some functions from cipurse to libcrypto
This commit is contained in:
parent
d2491d342d
commit
56d7efdbb5
5 changed files with 31 additions and 27 deletions
|
@ -40,11 +40,6 @@ uint8_t CipurseCSecurityLevelEnc(CipurseChannelSecurityLevel lvl) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bin_xor(uint8_t *d1, uint8_t *d2, size_t len) {
|
|
||||||
for (size_t i = 0; i < len; i++)
|
|
||||||
d1[i] = d1[i] ^ d2[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
static void bin_ext(uint8_t *dst, size_t dstlen, uint8_t *src, size_t srclen) {
|
static void bin_ext(uint8_t *dst, size_t dstlen, uint8_t *src, size_t srclen) {
|
||||||
if (srclen > dstlen)
|
if (srclen > dstlen)
|
||||||
memcpy(dst, &src[srclen - dstlen], dstlen);
|
memcpy(dst, &src[srclen - dstlen], dstlen);
|
||||||
|
@ -218,24 +213,6 @@ bool CipurseCCheckCT(CipurseContext *ctx, uint8_t *CT) {
|
||||||
return (memcmp(CT, ctx->CT, CIPURSE_AES_KEY_LENGTH) == 0);
|
return (memcmp(CT, ctx->CT, CIPURSE_AES_KEY_LENGTH) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddISO9797M2Padding(uint8_t *ddata, size_t *ddatalen, uint8_t *sdata, size_t sdatalen, size_t blocklen) {
|
|
||||||
*ddatalen = sdatalen + 1;
|
|
||||||
*ddatalen += blocklen - *ddatalen % blocklen;
|
|
||||||
memset(ddata, 0, *ddatalen);
|
|
||||||
memcpy(ddata, sdata, sdatalen);
|
|
||||||
ddata[sdatalen] = ISO9797_M2_PAD_BYTE;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t FindISO9797M2PaddingDataLen(uint8_t *data, size_t datalen) {
|
|
||||||
for (int i = datalen; i > 0; i--) {
|
|
||||||
if (data[i - 1] == 0x80)
|
|
||||||
return i - 1;
|
|
||||||
if (data[i - 1] != 0x00)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint16_t CipurseCComputeMICCRC(uint8_t *data, size_t len) {
|
static uint16_t CipurseCComputeMICCRC(uint8_t *data, size_t len) {
|
||||||
uint16_t initCRC = 0x6363;
|
uint16_t initCRC = 0x6363;
|
||||||
for (size_t i = 0; i < len; i++) {
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#define CIPURSE_MAC_LENGTH 8
|
#define CIPURSE_MAC_LENGTH 8
|
||||||
#define CIPURSE_MIC_LENGTH 4
|
#define CIPURSE_MIC_LENGTH 4
|
||||||
#define CIPURSE_POLY 0x35b088cce172UL
|
#define CIPURSE_POLY 0x35b088cce172UL
|
||||||
#define ISO9797_M2_PAD_BYTE 0x80
|
|
||||||
|
|
||||||
#define member_size(type, member) sizeof(((type *)0)->member)
|
#define member_size(type, member) sizeof(((type *)0)->member)
|
||||||
|
|
||||||
|
@ -66,9 +65,6 @@ bool CipurseCCheckCT(CipurseContext *ctx, uint8_t *CT);
|
||||||
void CipurseCChannelSetSecurityLevels(CipurseContext *ctx, CipurseChannelSecurityLevel req, CipurseChannelSecurityLevel resp);
|
void CipurseCChannelSetSecurityLevels(CipurseContext *ctx, CipurseChannelSecurityLevel req, CipurseChannelSecurityLevel resp);
|
||||||
bool isCipurseCChannelSecuritySet(CipurseContext *ctx);
|
bool isCipurseCChannelSecuritySet(CipurseContext *ctx);
|
||||||
|
|
||||||
void AddISO9797M2Padding(uint8_t *ddata, size_t *ddatalen, uint8_t *sdata, size_t sdatalen, size_t blocklen);
|
|
||||||
size_t FindISO9797M2PaddingDataLen(uint8_t *data, size_t datalen);
|
|
||||||
|
|
||||||
void CipurseCGenerateMAC(CipurseContext *ctx, uint8_t *data, size_t datalen, uint8_t *mac);
|
void CipurseCGenerateMAC(CipurseContext *ctx, uint8_t *data, size_t datalen, uint8_t *mac);
|
||||||
void CipurseCCalcMACPadded(CipurseContext *ctx, uint8_t *data, size_t datalen, uint8_t *mac);
|
void CipurseCCalcMACPadded(CipurseContext *ctx, uint8_t *data, size_t datalen, uint8_t *mac);
|
||||||
bool CipurseCCheckMACPadded(CipurseContext *ctx, uint8_t *data, size_t datalen, uint8_t *mac);
|
bool CipurseCCheckMACPadded(CipurseContext *ctx, uint8_t *data, size_t datalen, uint8_t *mac);
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <string.h> // memcpy memset
|
#include <string.h> // memcpy memset
|
||||||
#include "fileutils.h"
|
#include "fileutils.h"
|
||||||
|
|
||||||
|
#include "crypto/libpcrypto.h"
|
||||||
#include "cipurse/cipursecrypto.h"
|
#include "cipurse/cipursecrypto.h"
|
||||||
#include "cipurse/cipursecore.h"
|
#include "cipurse/cipursecore.h"
|
||||||
|
|
||||||
|
|
|
@ -536,3 +536,26 @@ exit:
|
||||||
PrintAndLogEx(NORMAL, _RED_("failed\n"));
|
PrintAndLogEx(NORMAL, _RED_("failed\n"));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bin_xor(uint8_t *d1, uint8_t *d2, size_t len) {
|
||||||
|
for (size_t i = 0; i < len; i++)
|
||||||
|
d1[i] = d1[i] ^ d2[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddISO9797M2Padding(uint8_t *ddata, size_t *ddatalen, uint8_t *sdata, size_t sdatalen, size_t blocklen) {
|
||||||
|
*ddatalen = sdatalen + 1;
|
||||||
|
*ddatalen += blocklen - *ddatalen % blocklen;
|
||||||
|
memset(ddata, 0, *ddatalen);
|
||||||
|
memcpy(ddata, sdata, sdatalen);
|
||||||
|
ddata[sdatalen] = ISO9797_M2_PAD_BYTE;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t FindISO9797M2PaddingDataLen(uint8_t *data, size_t datalen) {
|
||||||
|
for (int i = datalen; i > 0; i--) {
|
||||||
|
if (data[i - 1] == 0x80)
|
||||||
|
return i - 1;
|
||||||
|
if (data[i - 1] != 0x00)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -42,4 +42,11 @@ char *ecdsa_get_error(int ret);
|
||||||
|
|
||||||
int ecdsa_nist_test(bool verbose);
|
int ecdsa_nist_test(bool verbose);
|
||||||
|
|
||||||
|
void bin_xor(uint8_t *d1, uint8_t *d2, size_t len);
|
||||||
|
|
||||||
|
#define ISO9797_M2_PAD_BYTE 0x80
|
||||||
|
void AddISO9797M2Padding(uint8_t *ddata, size_t *ddatalen, uint8_t *sdata, size_t sdatalen, size_t blocklen);
|
||||||
|
size_t FindISO9797M2PaddingDataLen(uint8_t *data, size_t datalen);
|
||||||
|
|
||||||
|
|
||||||
#endif /* libpcrypto.h */
|
#endif /* libpcrypto.h */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue