From 99979c6609e24416232979eab6be6076ff444487 Mon Sep 17 00:00:00 2001 From: merlokk <807634+merlokk@users.noreply.github.com> Date: Wed, 23 Jun 2021 19:58:37 +0300 Subject: [PATCH] added TestAuth --- client/src/cipurse/cipursetest.c | 49 ++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/client/src/cipurse/cipursetest.c b/client/src/cipurse/cipursetest.c index 11eb09853..49e3d20a6 100644 --- a/client/src/cipurse/cipursetest.c +++ b/client/src/cipurse/cipursetest.c @@ -26,13 +26,13 @@ uint8_t TestDataPadded[16] = {0x11, 0x22, 0x33, 0x44, 0x80, 0x00, 0x00, 0x00, 0x static bool TestKVV(void) { uint8_t kvv[CIPURSE_KVV_LENGTH] = {0}; CipurseCGetKVV(Key, kvv); - //PrintAndLogEx(INFO, "kvv: %s", sprint_hex(kvv, 4)); + bool res = memcmp(KeyKvv, kvv, CIPURSE_KVV_LENGTH) == 0; if (res) PrintAndLogEx(INFO, "kvv: " _GREEN_("passed")); else - PrintAndLogEx(INFO, "kvv: " _RED_("fail")); + PrintAndLogEx(ERR, "kvv: " _RED_("fail")); return res; } @@ -50,7 +50,7 @@ static bool TestISO9797M2(void) { if (res) PrintAndLogEx(INFO, "ISO9797M2: " _GREEN_("passed")); else - PrintAndLogEx(INFO, "ISO9797M2: " _RED_("fail")); + PrintAndLogEx(ERR, "ISO9797M2: " _RED_("fail")); return res; } @@ -89,6 +89,48 @@ static bool TestSMI(void) { return res; } +static bool TestAuth(void) { + CipurseContext ctx = {0}; + CipurseCClearContext(&ctx); + + bool res = (isCipurseCChannelSecuritySet(&ctx) == false); + + CipurseCSetKey(&ctx, 1, Key); + res = res && (memcmp(ctx.key, Key, 16) == 0); + res = res && (ctx.keyId == 1); + + uint8_t random[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, 0x21, 0x22}; + CipurseCSetRandomFromPICC(&ctx, random); + res = res && (memcmp(ctx.RP, random, 16) == 0); + res = res && (memcmp(ctx.rP, &random[16], 6) == 0); + + uint8_t hrandom[] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}; + CipurseCSetRandomHost(&ctx); + res = res && (memcmp(ctx.RT, hrandom, 16) == 0); + res = res && (memcmp(ctx.rT, &hrandom[16], 6) == 0); + + uint8_t authparams[16 + 16 + 6] = {0}; + CipurseCAuthenticateHost(&ctx, authparams); + uint8_t aparamstest[] = {0x12, 0xAA, 0x79, 0xA9, 0x03, 0xC5, 0xB4, 0x6A, 0x27, 0x1B, 0x13, 0xAE, 0x02, 0x50, 0x1C, 0x99, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}; + res = res && (memcmp(authparams, aparamstest, sizeof(authparams)) == 0); + + uint8_t ct[] = {0xBE, 0x10, 0x6B, 0xB9, 0xAD, 0x84, 0xBC, 0xE1, 0x9F, 0xAE, 0x0C, 0x62, 0xCC, 0xC7, 0x0D, 0x41}; + res = res && CipurseCCheckCT(&ctx, ct); + PrintAndLogEx(INFO, "SMI: %s", sprint_hex(ctx.CT, 16)); + + CipurseCChannelSetSecurityLevels(&ctx, CPSMACed, CPSMACed); + res = res && (isCipurseCChannelSecuritySet(&ctx) == true); + + if (res) + PrintAndLogEx(INFO, "Auth: " _GREEN_("passed")); + else + PrintAndLogEx(ERR, "Auth: " _RED_("fail")); + + return res; +} + + bool CIPURSETest(bool verbose) { @@ -99,6 +141,7 @@ bool CIPURSETest(bool verbose) { res = res && TestKVV(); res = res && TestISO9797M2(); res = res && TestSMI(); + res = res && TestAuth();