From 53a10fa0f8ef7b4748c83cdf5476112dfd2d1661 Mon Sep 17 00:00:00 2001 From: "atul.jha" Date: Thu, 21 May 2020 18:16:12 +0200 Subject: [PATCH] added CDID function. fix bug is CDID wrapper --- trial1/layer1.c | 130 +++++++++++++++++++++++++++++++++++++---------- trial1/layer1.h | 2 +- trial1/layer2.c | 20 ++++++-- trial1/out/main2 | Bin 13264 -> 13480 bytes 4 files changed, 121 insertions(+), 31 deletions(-) diff --git a/trial1/layer1.c b/trial1/layer1.c index 5845e53..59dcacb 100644 --- a/trial1/layer1.c +++ b/trial1/layer1.c @@ -1,10 +1,13 @@ #include "layer1.h" -//Layer 1 functions +//ROM functions #define UDSFILE "./out/RANDFILE" #define UDSsize 8 //bytes +#define FW_file "layer1.c" +#define FW_size 1000 +////need to find a way to determine file size using BIO tools int createUDS() @@ -80,53 +83,128 @@ int readFWID(uint8_t * FW_M) //1. Read layer1.c into memory //2. Calcualte hash into arg - printf("in readFWID\n"); - - uint8_t * source = NULL; + //uint8_t * source; + //FW_size shoudl not be static. + //Use indefinite array or determine FW_size + uint8_t* source = calloc(1,sizeof(uint8_t)*(FW_size)); BIO *fp, *out; - int filesize = 0; + int buf_size = 0; int i; out = BIO_new_fp(stdout, BIO_NOCLOSE); - fp = BIO_new_file("layer1.c", "r"); -printf("in 2readFWID\n"); + fp = BIO_new_file(FW_file, "r"); + if(!fp) perror("Opening FW to read failed\n"); if(BIO_eof(fp)) perror("File empty\n"); -printf("in 3readFWID\n"); //SEG FAULT! - while(!BIO_eof(fp)) - { - BIO_read(fp, source[filesize], 1); - filesize++; //filesize includes EOF - } -printf("in 4readFWID\n"); - if(SHA256(source, filesize -1, FW_M) == NULL) + + while(!BIO_eof(fp) && (buf_size < FW_size)) + { + BIO_read(fp, source[buf_size], 1); + buf_size++; //buf_size includes EOF + //break; + } + + if(SHA256(source, buf_size -1, FW_M) == NULL) perror("FW measurement failed\n"); //print block -printf("in 5readFWID\n"); BIO_printf(out,"FW digest : "); for(i = 0; i < SHA256_dig_t; i++) BIO_printf(out,"%x",FW_M[i]); BIO_printf(out, "\n"); - //free(source); + free(source); BIO_free(fp); BIO_free(out); return 1; } -// int calcCDID(uint8_t * UDS_M, uint8_t * FW_M, uint8_t * CDID) -// { -// //0. internally call readUDS and readFWID? abstraction of UDS against layer2 +int calcCDID(uint8_t * UDS_M, uint8_t * FW_M, uint8_t * CDID) +{ + //0. internally call readUDS and readFWID? abstraction of UDS against layer2 -// //1. create sha256 context -// //2. add UDS hash -// //3. add FW hash -// //4. calc composite hash into CDID arg -// return 1; -// } \ No newline at end of file + //1. create sha256 context + //2. add UDS hash + //3. add FW hash + //4. calc composite hash into CDID arg + + BIO * out = BIO_new_fp(stdout, BIO_NOCLOSE); + + SHA256_CTX *ctx; + if(!SHA256_Init(ctx)) + perror("SHA init failed\n"); + + if(!SHA256_Update(ctx, UDS_M, UDSsize)) + perror("SHA update failed\n"); + if(!SHA256_Update(ctx, FW_M, FW_size)) + perror("SHA update2 failed\n"); + + if(!SHA256_Final(CDID, ctx)) + perror("SHA close failed\n"); + + //print block + + BIO_printf(out,"UDID_M : "); + for(int i = 0; i < SHA256_dig_t; i++) + BIO_printf(out,"%x",UDS_M[i]); + BIO_printf(out, "\n"); + + BIO_printf(out,"FWID_M : "); + for(int i = 0; i < SHA256_dig_t; i++) + BIO_printf(out,"%x",FW_M[i]); + BIO_printf(out, "\n"); + + BIO_printf(out,"CDI : "); + for(int i = 0; i < SHA256_dig_t; i++) + BIO_printf(out,"%x",CDID[i]); + BIO_printf(out, "\n"); + BIO_free(out); + + return 1; +} + +int _calcCDID(uint8_t * _CDID) +{ + + BIO * out = BIO_new_fp(stdout, BIO_NOCLOSE); + BIO_printf(out, "\n");BIO_printf(out, "\n");BIO_printf(out, "\n"); + + //step 1 : Derive Device ID + uint8_t* UDS_ID = calloc(1,sizeof(uint8_t)*SHA256_dig_t); + readUDS(UDS_ID); + + //step 2 : Derive Firmware ID + uint8_t* FW_ID = calloc(1,sizeof(uint8_t)*SHA256_dig_t); + readFWID(FW_ID); + + //step3 : call calcCDID + calcCDID(UDS_ID,FW_ID,_CDID); + calcCDID(UDS_ID,FW_ID,_CDID); + calcCDID(UDS_ID,FW_ID,_CDID); + + + + BIO_printf(out,"_UDID : "); + for(int i = 0; i < SHA256_dig_t; i++) + BIO_printf(out,"%x",UDS_ID[i]); + BIO_printf(out, "\n"); + + BIO_printf(out,"_FWID : "); + for(int i = 0; i < SHA256_dig_t; i++) + BIO_printf(out,"%x",FW_ID[i]); + BIO_printf(out, "\n"); + + + BIO_printf(out,"_CDI : "); + for(int i = 0; i < SHA256_dig_t; i++) + BIO_printf(out,"%x",_CDID[i]); + BIO_printf(out, "\n"); + BIO_free(out); + + return 1; +} \ No newline at end of file diff --git a/trial1/layer1.h b/trial1/layer1.h index 58e26a1..7587675 100644 --- a/trial1/layer1.h +++ b/trial1/layer1.h @@ -11,5 +11,5 @@ int readUDS(uint8_t* UDSdigest); int createUDS(); int readFWID(uint8_t * FW_M); int calcCDID(uint8_t * UDS_M, uint8_t * FW_M, uint8_t * CDID); - +int _calcCDID(uint8_t * CDID); diff --git a/trial1/layer2.c b/trial1/layer2.c index 21c77fd..0a248b7 100644 --- a/trial1/layer2.c +++ b/trial1/layer2.c @@ -9,19 +9,31 @@ void startProtocol() uint8_t* UDS_ID = calloc(1,sizeof(uint8_t)*SHA256_dig_t); readUDS(UDS_ID); + // for(int i = 0; i < SHA256_dig_t; i++) + // printf("%x",UDS_ID[i]); + // printf("\n"); + //step 2 : Derive Firmware ID uint8_t* FW_ID = calloc(1,sizeof(uint8_t)*SHA256_dig_t); readFWID(FW_ID); + // for(int i = 0; i < SHA256_dig_t; i++) + // printf("%x",FW_ID[i]); + // printf("\n"); - // //setp 3 : Derive Composite Device ID - // uint8_t* CD_ID = calloc(1,sizeof(uint8_t)*SHA256_dig_t); - // calcCDID(CD_ID); + //setp 3 : Derive Composite Device ID + uint8_t* CD_ID = calloc(1,sizeof(uint8_t)*SHA256_dig_t); + calcCDID(UDS_ID,FW_ID,CD_ID); + + + uint8_t* _CD_ID = calloc(1,sizeof(uint8_t)*SHA256_dig_t); + _calcCDID(_CD_ID); //End block free(UDS_ID); free(FW_ID); - // free(CD_ID); + free(CD_ID); + free(_CD_ID); } diff --git a/trial1/out/main2 b/trial1/out/main2 index 23b30d6af4259357de503e72eeca6072309e80c6..57c11f5e4c3c99b0410eec365631fe99f8f678d8 100755 GIT binary patch literal 13480 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 a4Vj6{Wo$Y!J{2kI`i#=J%!-=&?f)BEil1Tt delta 3915 zcmZ`+4Qx}_6~6B|Ken+GJ0Y>1F8C!RAq5gAA&`|St&@@LWn#sYpU^D@B5>LOEszE= zs<8yzP)wRBaI|S^y9yZUDALr>Oe5`98ek=X!IYqBpb3o#rIo#v4YrCJ7Vyrw?_Sqo z+O^*O?)lES=bn4+&wD=JKK4StJFDBmc<~#+`sW{<`)*xDwjoMnOyh)tbs9eYd@dqt zydiN+HTVf|DlTV0SOtVt0G?3R6)bfcHjiS9L9-V4P+3;+|3(-VBMigi>i5gS`#gW^ z%pWzccxTPdy*uCk_Tk7icE8a*0~XKY0B%XS+>q z7)o&~Z@@{DFZBj?EQE0-8yv_T&iQlIEV982*%S@CrC~u zxu45NNv16v?dI~EBva0!+qis)WJ+>$J(mxVOlKq-;PPIQX-%SjF273h43aBo{CIH( z5jG+;Zm@}DJIM|%lY_Q?lzFMV)f66ItA}sup~>5Ul}r0ltr(o%X9tW~@2mYBt>QV0 zu+Nv7-X)xR4uw^EU+Qv1{fU?!{;bo3$<52v;A3lv#Y1%8!mM2Q!s=DWbHF~Mc?ruWvKKq+F!xFR}M=TqOyftDG?U0xhKQt~h!AEF>5g_uu_#YL<` zvd^C*FSxP}RArHBA*#X+Q=#2c@f|iKZA5k>+1oG`K958$5{AbU4}|Xv(o2ON-hJ&f zCH@oTkS(Rljs5g+Lj-4bYo^9dQy_YHBr<_Lk-yDN(dW-Fw#a5A!wr*vuSeoC5mxHm z+i)8bag~A(kBFJbaU)OTe5H?-)Mbw0BeZ*x{a{G{PT#^))UmJjo1}cw7&WGccE=c> z+!3OW5#9S;46-5i5yh^D|42bDMZRZv7bW4X6u4}2XIz~^%bsE0bzchn+cvkUgZ#_D zo<)7AVL}P*o=E@EA4KRYk}WF8gE6JrWZpdmZT8}oDaqXAe-hrj32&d_F-eSf7A??Q zgrdzgJmXFpiENUiV0$gxu;;en98O@*$ote|q#;5JG14$WfNK-YN?M!iWP)phS$EQ4 zeYHQNom z4FSV^5KU;f$nbsIY7?P|qHh@0dskgECdgOh*Qk^Ezk~NjWP#y(irTM}(n#$+loLsM z`aW!S6nD)_=4PO6s9_QpYVzyU+LA4z_qaEn&Yw%qn9hUP9-^x(vF9D9H55M~F0z6w zDR&eHT03wd4D}YSuQv2C)N{|b_|`LQuO*Fm3ETY_&b4KFUqiQy)iu|xZVF$mTUCdb zOYuWHzdOnZSJZ_cG==XjeVh)lSwHi@6iL4~_|KWmN$WO0w`wZfO@13nW3>>V(kPti2R$ePu^S@TK6(omyLK`eew%OSJLhzMN zZLx-NDvz0-T!TngYxP(0_%XzySUi4-WW-Lyr*LkQh?@~plv2h{VxtJt^DA7;C5W$L zQZ^z^BEE*W60dp3n9!>&q-INyn!;zz z6x?^$n<>a{G=)|zdvLvH)Fi82s#Ct{{o;+U!1w}JC4Dhap*IQ@{%%5~Hwu+wnFe|c zV1C$>?^Sd-lJ6@RN-;=!-BFR>PGSI-2Y2#)&VYDn;~wTE0F|@6PB*<1u?RrFt+SRX z3{Il%3f|*XF#B5xO|ab4tOUSWm<OdwOEq=$d7dNC+buovgNf#V{4BJawO>dz#3ukklriFzcKE(F~Um@}vHQiNA!j%2T{v&Ff82Q0iK|9lbe|B9t4fM~renj8ewOU~G`bOgnV2qjb9p@ww+9 zInbAh5 zT;!BzMB0qs1WHFZ-2wr&C%WVGz@)!!s