X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/709665b5d1abddd92403082c23f13e8cddfcd508..ad8a18e66ed0b72e7844a34fea8bdc760327dbf8:/client/cmdlfviking.c diff --git a/client/cmdlfviking.c b/client/cmdlfviking.c index b3ea51ca..fa073df1 100644 --- a/client/cmdlfviking.c +++ b/client/cmdlfviking.c @@ -47,8 +47,8 @@ int usage_lf_viking_sim(void) { uint64_t getVikingBits(uint32_t id) { //calc checksum - uint8_t checksum = (id>>24) ^ ((id>>16) & 0xFF) ^ ((id>>8) & 0xFF) ^ (id & 0xFF) ^ 0xF2 ^ 0xA8; - return (0xF2 << 56) | (id << 8) | checksum; + uint8_t checksum = ((id>>24) & 0xFF) ^ ((id>>16) & 0xFF) ^ ((id>>8) & 0xFF) ^ (id & 0xFF) ^ 0xF2 ^ 0xA8; + return ((uint64_t)0xF2 << 56) | ((uint64_t)id << 8) | checksum; } //by marshmellow //see ASKDemod for what args are accepted @@ -66,16 +66,16 @@ int CmdVikingClone(const char *Cmd) { uint64_t rawID = 0; bool Q5 = false; char cmdp = param_getchar(Cmd, 0); - if (strlen(Cmd) < 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_clone(); + if (strlen(Cmd) == 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_clone(); - id = param_get32ex(Cmd, 0, 0, 16) + id = param_get32ex(Cmd, 0, 0, 16); if (id == 0) return usage_lf_viking_clone(); if (param_getchar(Cmd, 1)=='Q' || param_getchar(Cmd, 1)=='q') Q5 = true; rawID = getVikingBits(id); - - UsbCommand c = {CMD_VIKING_CLONE_TAG,{rawID >> 32, rawID & 0xFFFF, Q5}}; + PrintAndLog("Cloning - ID: %08X, Raw: %08X%08X",id,(uint32_t)(rawID >> 32),(uint32_t) (rawID & 0xFFFFFFFF)); + UsbCommand c = {CMD_VIKING_CLONE_TAG,{rawID >> 32, rawID & 0xFFFFFFFF, Q5}}; clearCommandBuffer(); SendCommand(&c); //check for ACK @@ -83,13 +83,14 @@ int CmdVikingClone(const char *Cmd) { return 0; } -int CmdVikingSim(static char *Cmd) { +int CmdVikingSim(const char *Cmd) { uint32_t id = 0; uint64_t rawID = 0; uint8_t clk = 32, encoding = 1, separator = 0, invert = 0; + char cmdp = param_getchar(Cmd, 0); - if (strlen(Cmd) < 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_sim(); - id = param_get32ex(Cmd, 0, 0, 16) + if (strlen(Cmd) == 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_viking_sim(); + id = param_get32ex(Cmd, 0, 0, 16); if (id == 0) return usage_lf_viking_sim(); rawID = getVikingBits(id); @@ -104,6 +105,7 @@ int CmdVikingSim(static char *Cmd) { num_to_bytebits(rawID, 64, c.d.asBytes); clearCommandBuffer(); SendCommand(&c); + return 0; } static command_t CommandTable[] = {