X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=gemtag%2Fgemtag.c;h=e674d4989c2f33b338d75adb9f819610b3adb6e6;hb=refs%2Fheads%2Forigin;hp=d6191ba3bb42beed1720f97aeafd7e9ded005635;hpb=d78e768b132a7fe1e87410cc07daf555271c018b;p=rfid%2Flibrfid.git diff --git a/gemtag/gemtag.c b/gemtag/gemtag.c index d6191ba..e674d49 100644 --- a/gemtag/gemtag.c +++ b/gemtag/gemtag.c @@ -1,5 +1,6 @@ /* - * (C) 2006 by Frank Zirkelbach + * (C) 2006 by Harald Welte + * Frank Zirkelbach * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 @@ -25,21 +26,20 @@ #include "gemtag.h" int asciidump(unsigned char *data,int len) { + int i; for(i=0;i0x19)&&(data[i]<0x7f)) printf("%c",data[i]); - else printf("."); - //printf("\n"); + printf("%c",(data[i]>0x19)&&(data[i]<0x7f)?data[i]:'.'); return 0; } int hexdump(unsigned char *data,int len) { + int i; for(i=0;iserial,4); + buf[5]=0; + buf[6]=sector; + ret=gemtag_transceive(gh,GEMTAG_CMD_PICC_AUTH_E2,buf,7,buf,&len); + if(ret) return -AUTH_E2_FAILED; + + return 0; + +} + int gemtag_auth_mifare_key(struct gemtag_handle *gh, - unsigned char *key6,int sector) { + unsigned char *key6,int sector) { unsigned char key12[12]; unsigned char buf[32]; @@ -289,12 +315,12 @@ int gemtag_write16(struct gemtag_handle *gh,int sector,unsigned char *data) { unsigned char buf[32]; int ret,len; - buf[0]=GEMTAG_PICC_WRITE16; - buf[1]=sector; - memcpy(buf+2,data,16); - ret=gemtag_transceive(gh,GEMTAG_CMD_COMMON_WRITE,buf,18,buf,&len); + buf[0]=sector; + memcpy(buf+1,data,16); + ret=gemtag_transceive(gh,GEMTAG_CMD_PICC_WRITE,buf,17,buf,&len); + if(ret) return -WRITE_FAILED; - return ret; + return 0; } int gemtag_select_picc(struct gemtag_handle *gh) { @@ -333,14 +359,6 @@ int main(int argc, char **argv) { gh->caps|=GEMTAG_CAP_CRC; //gh->caps|=GEMTAG_CAP_VERB_TRANSMIT; - /* - printf("Device:\n"); - gemtag_transceive(gh,GEMTAG_CMD_GET_FW_VERSION, - NULL,0,buf,&buflen); - asciidump(buf,buflen); - printf("\n"); - */ - if(gemtag_select_picc(gh)) { printf("no card found!\n"); return -NO_PICC; @@ -351,7 +369,7 @@ int main(int argc, char **argv) { gh->serial[3],gh->serial[2],gh->serial[1],gh->serial[0]); i=0; while(!gemtag_auth_mifare_key(gh,key6,i)) { - gemtag_read16(gh,i,buf); + ret=gemtag_read16(gh,i,buf); printf("%02x: ",i); hexdump(buf,16); printf(" | "); @@ -361,18 +379,6 @@ int main(int argc, char **argv) { } printf("\n"); - /* try to write some data - printf("write some data to the 5th sector:\n"); - for(i=0;i<16;i++) buf[i]=i; - i=4; - ret=gemtag_write16(gh,i,buf); - printf("return = %d\n",ret); - gemtag_read16(gh,i,buf); - printf("%02x: ",i); - hexdump(buf,16); - printf("\n"); - */ - gemtag_close(gh); return 0;