diff options
Diffstat (limited to 'easytool/mifare_classic.c')
-rw-r--r-- | easytool/mifare_classic.c | 16 |
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; +} |