summaryrefslogtreecommitdiff
path: root/easytool/mifare_classic.c
diff options
context:
space:
mode:
Diffstat (limited to 'easytool/mifare_classic.c')
-rw-r--r--easytool/mifare_classic.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/easytool/mifare_classic.c b/easytool/mifare_classic.c
index e516631..5f21fd5 100644
--- a/easytool/mifare_classic.c
+++ b/easytool/mifare_classic.c
@@ -1,6 +1,7 @@
#include <stdint.h>
#include <stdio.h>
#include <string.h>
+#include <errno.h>
#include "mifare_classic.h"
@@ -27,3 +28,18 @@ void mfcl_parse_acc_bits(struct acc_bits_parsed *abp, uint8_t *acc_bits)
abp->block[block] |= ABP_C3;
}
}
+
+/* apply a delta (positive or negative) to a Mifare Classic VALUE block */
+int mfcl_update_value_block(struct mfcl_value_block *mvb, int32_t delta)
+{
+ int64_t sum = mvb->value + delta;
+
+ if (sum > 0xffffffff || sum < 0)
+ return -ERANGE;
+
+ mvb->value = sum;
+ mvb->value_backup = mvb->value;
+ mvb->value_inv = ~sum;
+
+ return 0;
+}
personal git repositories of Harald Welte. Your mileage may vary