Max 5 API Reference
00001 /* 00002 jit.cp.c 00003 00004 Copyright 2001-2005 - Cycling '74 00005 Joshua Kit Clayton jkc@cycling74.com 00006 00007 */ 00008 00009 00010 00011 #include "jit.common.h" 00012 #include "ext_path.h" 00013 00014 #if (0) // NOT USED 00015 00016 #include <Gestalt.h> 00017 #include <Errors.h> 00018 #include <NameRegistry.h> 00019 #include <stdio.h> 00020 #include <Strings.h> 00021 #include <OpenTransport.h> 00022 #include <OpenTptLinks.h> 00023 #include <OpenTptConfig.h> 00024 00025 struct Address8022 00026 { 00027 OTAddressType fAddrFamily; 00028 UInt8 fHWAddr[k48BitAddrLength]; 00029 UInt16 fSAP; 00030 UInt8 fSNAP[k8022SNAPLength]; 00031 }; 00032 typedef struct Address8022 Address8022; 00033 00034 #endif // NOT USED 00035 00036 //cp1 00037 static long malibu(char c) 00038 { 00039 switch (c) { 00040 case 'P': return 0; 00041 case '9': return 1; 00042 case 'G': return 2; 00043 case 'E': return 3; 00044 case 'Q': return 4; 00045 case '3': return 5; 00046 case 'N': return 6; 00047 case 'F': return 7; 00048 case '2': return 8; 00049 case 'K': return 9; 00050 case '4': return 10; 00051 case '8': return 11; 00052 case '7': return 12; 00053 case 'Y': return 13; 00054 case 'S': return 14; 00055 case 'U': return 15; 00056 default: return -1; 00057 } 00058 } 00059 00060 static char beach(long c) 00061 { 00062 switch (c%16) { 00063 case 0: return 'P'; 00064 case 1: return '9'; 00065 case 2: return 'G'; 00066 case 3: return 'E'; 00067 case 4: return 'Q'; 00068 case 5: return '3'; 00069 case 6: return 'N'; 00070 case 7: return 'F'; 00071 case 8: return '2'; 00072 case 9: return 'K'; 00073 case 10: return '4'; 00074 case 11: return '8'; 00075 case 12: return '7'; 00076 case 13: return 'Y'; 00077 case 14: return 'S'; 00078 case 15: return 'U'; 00079 default: return -1; 00080 } 00081 } 00082 00083 //cp2 00084 static long little(char c) 00085 { 00086 switch (c) { 00087 case 'W': return 0; 00088 case 'C': return 1; 00089 case '6': return 2; 00090 case '3': return 3; 00091 case '4': return 4; 00092 case 'A': return 5; 00093 case 'X': return 6; 00094 case 'E': return 7; 00095 case 'L': return 8; 00096 case '2': return 9; 00097 case 'J': return 10; 00098 case '7': return 11; 00099 case 'R': return 12; 00100 case 'Z': return 13; 00101 case 'M': return 14; 00102 case '5': return 15; 00103 default: return -1; 00104 } 00105 } 00106 00107 static char pony(long c) 00108 { 00109 switch (c%16) { 00110 case 0: return 'W'; 00111 case 1: return 'C'; 00112 case 2: return '6'; 00113 case 3: return '3'; 00114 case 4: return '4'; 00115 case 5: return 'A'; 00116 case 6: return 'X'; 00117 case 7: return 'E'; 00118 case 8: return 'L'; 00119 case 9: return '2'; 00120 case 10: return 'J'; 00121 case 11: return '7'; 00122 case 12: return 'R'; 00123 case 13: return 'Z'; 00124 case 14: return 'M'; 00125 case 15: return '5'; 00126 default: return -1; 00127 } 00128 } 00129 00130 //cp3 00131 static long satin(char c) 00132 { 00133 switch (c) { 00134 case '2': return 0; 00135 case 'K': return 1; 00136 case '9': return 2; 00137 case '5': return 3; 00138 case 'Z': return 4; 00139 case '3': return 5; 00140 case 'B': return 6; 00141 case 'N': return 7; 00142 case '4': return 8; 00143 case 'S': return 9; 00144 case 'T': return 10; 00145 case 'M': return 11; 00146 case '6': return 12; 00147 case '8': return 13; 00148 case 'C': return 14; 00149 case 'W': return 15; 00150 default: return -1; 00151 } 00152 } 00153 00154 static char skies(long c) 00155 { 00156 switch (c%16) { 00157 case 0: return '2'; 00158 case 1: return 'K'; 00159 case 2: return '9'; 00160 case 3: return '5'; 00161 case 4: return 'Z'; 00162 case 5: return '3'; 00163 case 6: return 'B'; 00164 case 7: return 'N'; 00165 case 8: return '4'; 00166 case 9: return 'S'; 00167 case 10: return 'T'; 00168 case 11: return 'M'; 00169 case 12: return '6'; 00170 case 13: return '8'; 00171 case 14: return 'C'; 00172 case 15: return 'W'; 00173 default: return -1; 00174 } 00175 } 00176 00177 //cp4 00178 static long cotton(char c) 00179 { 00180 switch (c) { 00181 case 'X': return 0; 00182 case '3': return 1; 00183 case 'F': return 2; 00184 case 'G': return 3; 00185 case 'A': return 4; 00186 case 'H': return 5; 00187 case 'R': return 6; 00188 case 'W': return 7; 00189 case '6': return 8; 00190 case '9': return 9; 00191 case '4': return 10; 00192 case '2': return 11; 00193 case 'M': return 12; 00194 case 'E': return 13; 00195 case '5': return 14; 00196 case '7': return 15; 00197 default: return -1; 00198 } 00199 } 00200 00201 static char candy(long c) 00202 { 00203 switch (c%16) { 00204 case 0: return 'X'; 00205 case 1: return '3'; 00206 case 2: return 'F'; 00207 case 3: return 'G'; 00208 case 4: return 'A'; 00209 case 5: return 'H'; 00210 case 6: return 'R'; 00211 case 7: return 'W'; 00212 case 8: return '6'; 00213 case 9: return '9'; 00214 case 10: return '4'; 00215 case 11: return '2'; 00216 case 12: return 'M'; 00217 case 13: return 'E'; 00218 case 14: return '5'; 00219 case 15: return '7'; 00220 default: return -1; 00221 } 00222 } 00223 00224 //one of four(based on last) 00225 static long jiminy(long a, char b) 00226 { 00227 long t; 00228 00229 switch(a%4) { 00230 case 0: t = malibu(b); break; 00231 case 1: t = little(b); break; 00232 case 2: t = satin(b); break; 00233 case 3: t = cotton(b); break; 00234 default: return -1; 00235 } 00236 00237 if (t<0) return -1; 00238 00239 t -= a%16; 00240 if (t<0) t += 16; 00241 00242 return t; 00243 } 00244 00245 static char cricket(long a, long b) 00246 { 00247 switch(a%4) { 00248 case 0: return beach(a+b); 00249 case 1: return pony(a+b); 00250 case 2: return skies(a+b); 00251 case 3: return candy(a+b); 00252 default: return -1; 00253 } 00254 } 00255 00256 void creepy(char *a, uchar *b) //decode 00257 { 00258 long t0,t1,t2,t3; 00259 long v0,v1; 00260 00261 t0 = malibu(a[0]); //always starts with malibu 00262 t1 = jiminy(t0,a[1]); 00263 t2 = jiminy(t1,a[2]); 00264 t3 = jiminy(t2,a[3]); 00265 00266 //funky stuff 00267 v0 = jiminy(t0*t1+t1+t2,a[4]); 00268 v1 = jiminy(t1*t2+v0,a[5]); 00269 00270 b[0] = ((v0<<4L)|v1); 00271 00272 v0 = jiminy(t0+t3,a[6]); 00273 v1 = jiminy(t1+t2+v0,a[7]); 00274 00275 b[1] = ((v0<<4L)|v1); 00276 00277 v0 = jiminy(t2*t3+t1+t2,a[8]); 00278 v1 = jiminy(t1*t3+v0,a[9]); 00279 00280 b[2] = ((v0<<4L)|v1); 00281 00282 v0 = jiminy(t2+t3,a[10]); 00283 v1 = jiminy(t0+t3+v0,a[11]); 00284 00285 b[3] = ((v0<<4L)|v1); 00286 00287 v0 = jiminy(t1*t3+t1+t2,a[12]); 00288 v1 = jiminy(t0*t2+v0,a[13]); 00289 00290 b[4] = ((v0<<4L)|v1); 00291 00292 v0 = jiminy(t1+t2,a[14]); 00293 v1 = jiminy(t1+t3+v0,a[15]); 00294 00295 b[5] = ((v0<<4L)|v1); 00296 00297 } 00298 00299 void crawly(uchar *a, char *b) //inverse 00300 { 00301 uchar t0,t1,t2,t3; 00302 00303 jit_rand_setseed(0); 00304 jit_rand(); //once for good measure 00305 00306 t0 = (jit_rand()>>16L)%16; 00307 b[0] = beach(t0); //always starts with malibu 00308 t1 = (jit_rand()>>16L)%16; 00309 b[1] = cricket(t0,t1); 00310 t2 = (jit_rand()>>16L)%16; 00311 b[2] = cricket(t1,t2); 00312 t3 = (jit_rand()>>16L)%16; 00313 b[3] = cricket(t2,t3); 00314 00315 //funky stuff 00316 b[4] = cricket(t0*t1+t1+t2,a[0]>>4L); 00317 b[5] = cricket(t1*t2+(a[0]>>4L),a[0]&0x0f); 00318 00319 b[6] = cricket(t0+t3,a[1]>>4L); 00320 b[7] = cricket(t1+t2+(a[1]>>4L),a[1]&0x0f); 00321 00322 b[8] = cricket(t2*t3+t1+t2,a[2]>>4L); 00323 b[9] = cricket(t1*t3+(a[2]>>4L),a[2]&0x0f); 00324 00325 b[10] = cricket(t2+t3,a[3]>>4L); 00326 b[11] = cricket(t0+t3+(a[3]>>4L),a[3]&0x0f); 00327 00328 b[12] = cricket(t1*t3+t1+t2,a[4]>>4L); 00329 b[13] = cricket(t0*t2+(a[4]>>4L),a[4]&0x0f); 00330 00331 b[14] = cricket(t1+t2,a[5]>>4L); 00332 b[15] = cricket(t1+t3+(a[5]>>4L),a[5]&0x0f); 00333 00334 } 00335 00336 void creepy2(char *a, uchar *b) //decode 00337 { 00338 long t0,t1,t2,t3; 00339 long v0,v1; 00340 00341 t0 = cotton(a[0]); //always starts with coton 00342 t1 = jiminy(t0,a[1]); 00343 t2 = jiminy(t1,a[2]); 00344 t3 = jiminy(t2,a[3]); 00345 00346 //funky stuff 00347 v0 = jiminy(t0*t1+t1+t2,a[4]); 00348 v1 = jiminy(t1*t2+v0,a[5]); 00349 00350 b[0] = ((v0<<4L)|v1); 00351 00352 v0 = jiminy(t0+t3,a[6]); 00353 v1 = jiminy(t1+t2+v0,a[7]); 00354 00355 b[1] = ((v0<<4L)|v1); 00356 00357 v0 = jiminy(t2*t3+t1+t2,a[8]); 00358 v1 = jiminy(t1*t3+v0,a[9]); 00359 00360 b[2] = ((v0<<4L)|v1); 00361 00362 v0 = jiminy(t2+t3,a[10]); 00363 v1 = jiminy(t0+t3+v0,a[11]); 00364 00365 b[3] = ((v0<<4L)|v1); 00366 00367 v0 = jiminy(t1*t3+t1+t2,a[12]); 00368 v1 = jiminy(t0*t2+v0,a[13]); 00369 00370 b[4] = ((v0<<4L)|v1); 00371 00372 v0 = jiminy(t1+t2,a[14]); 00373 v1 = jiminy(t1+t3+v0,a[15]); 00374 00375 b[5] = ((v0<<4L)|v1); 00376 00377 } 00378 00379 void crawly2(uchar *a, char *b) 00380 { 00381 uchar t0,t1,t2,t3; 00382 00383 jit_rand_setseed(0); 00384 jit_rand(); //once for good measure 00385 00386 t0 = (jit_rand()>>16L)%16; 00387 b[0] = candy(t0); //always starts with coton 00388 t1 = (jit_rand()>>16L)%16; 00389 b[1] = cricket(t0,t1); 00390 t2 = (jit_rand()>>16L)%16; 00391 b[2] = cricket(t1,t2); 00392 t3 = (jit_rand()>>16L)%16; 00393 b[3] = cricket(t2,t3); 00394 00395 //funky stuff 00396 b[4] = cricket(t0*t1+t1+t2,a[0]>>4L); 00397 b[5] = cricket(t1*t2+(a[0]>>4L),a[0]&0x0f); 00398 00399 b[6] = cricket(t0+t3,a[1]>>4L); 00400 b[7] = cricket(t1+t2+(a[1]>>4L),a[1]&0x0f); 00401 00402 b[8] = cricket(t2*t3+t1+t2,a[2]>>4L); 00403 b[9] = cricket(t1*t3+(a[2]>>4L),a[2]&0x0f); 00404 00405 b[10] = cricket(t2+t3,a[3]>>4L); 00406 b[11] = cricket(t0+t3+(a[3]>>4L),a[3]&0x0f); 00407 00408 b[12] = cricket(t1*t3+t1+t2,a[4]>>4L); 00409 b[13] = cricket(t0*t2+(a[4]>>4L),a[4]&0x0f); 00410 00411 b[14] = cricket(t1+t2,a[5]>>4L); 00412 b[15] = cricket(t1+t3+(a[5]>>4L),a[5]&0x0f); 00413 } 00414 00415 #if (0) // NOT USED 00416 00417 OSErr AddFileID(short vrefnum, long dirID, char *name, long *fileID) 00418 { 00419 OSErr err; 00420 HParmBlkPtr h; 00421 00422 h = (HParmBlkPtr)NewPtrClear(sizeof(HParamBlockRec)); 00423 00424 h->fidParam.ioCompletion = nil; 00425 h->fidParam.ioNamePtr = name; 00426 h->fidParam.ioVRefNum = vrefnum; 00427 h->fidParam.ioSrcDirID = dirID; 00428 00429 err = PBCreateFileIDRefSync(h); 00430 *fileID = h->fidParam.ioFileID; 00431 DisposePtr((void *)h); 00432 return(err); 00433 } 00434 00435 OSErr GetFileID(short vrefnum, long dirID, char *name, long *fileID) 00436 { 00437 OSErr err; 00438 CInfoPBPtr cInfo; 00439 00440 cInfo = (CInfoPBPtr)NewPtrClear(sizeof(CInfoPBRec)); 00441 00442 cInfo->hFileInfo.ioCompletion = nil; 00443 cInfo->hFileInfo.ioNamePtr = name; 00444 cInfo->hFileInfo.ioVRefNum = vrefnum; 00445 cInfo->hFileInfo.ioFDirIndex = 0; 00446 cInfo->hFileInfo.ioDirID = dirID; 00447 00448 err = PBGetCatInfoSync(cInfo); 00449 *fileID = cInfo->hFileInfo.ioDirID; 00450 DisposePtr((void *)cInfo); 00451 return(err); 00452 } 00453 00454 static char p_tinkerbell[] = {11,'.','t','i','n','k','e','r','b','e','l','l'}; 00455 #define kOnSystemDisk -32768 00456 00457 long jit_cp_cfile_read(short vrefnum, long dirID, uchar *b) 00458 { 00459 short refnum; 00460 long count=529; 00461 OSErr err; 00462 00463 if (err=HOpenDF(vrefnum,dirID,p_tinkerbell,fsRdPerm,&refnum)) { 00464 jit_object_post((t_object *)x,"copy protection open file error: %d",err); 00465 return -1; 00466 } 00467 FSRead(refnum,&count,b); 00468 FSClose(refnum); 00469 } 00470 00471 long jit_cp_cfile_find(short *vrefnum, long *dirID, long *fileID) 00472 { 00473 OSErr err; 00474 short refnum; 00475 //find file in preferences file named .tinkerbell 00476 00477 //assuming we have findfolder capabilities(i think this is safe, no?) 00478 FindFolder(kOnSystemDisk,'pref',TRUE,vrefnum,dirID); 00479 00480 if (*dirID) { 00481 err = HOpenDF(*vrefnum,*dirID,p_tinkerbell,fsRdPerm,&refnum); 00482 if (!err) { //should test for errors which are acceptable 00483 FSClose(refnum); 00484 GetFileID(*vrefnum,*dirID,p_tinkerbell,fileID); 00485 if (*fileID==0) { 00486 jit_object_post((t_object *)x,"copy protection find file error: 1"); 00487 AddFileID(*vrefnum,*dirID,p_tinkerbell,fileID);//just in case someone makes their own file 00488 GetFileID(*vrefnum,*dirID,p_tinkerbell,fileID); 00489 } 00490 return 0; 00491 } else { 00492 // jit_object_post((t_object *)x,"copy protection find file error: %d",err); 00493 return -1; 00494 } 00495 } else { 00496 jit_object_post((t_object *)x,"copy protection find file error: 2"); 00497 return -1; 00498 } 00499 } 00500 00501 long jit_cp_cfile_get(uchar *b) 00502 { 00503 uchar b2[529]; 00504 long fileID=0; 00505 short vrefnum=0; 00506 long dirID=0; 00507 00508 if (jit_cp_cfile_find(&vrefnum,&dirID,&fileID)) 00509 return -1; 00510 00511 if (jit_cp_cfile_read(vrefnum,dirID,&b2)) 00512 return -2; 00513 00514 //key uses file id, dir id, and bytes from file 00515 b[0] = ((uchar *)(&fileID))[2]; 00516 b[1] = ((uchar *)(&fileID))[3]; 00517 b[2] = ((uchar *)(&dirID))[2]; 00518 b[3] = ((uchar *)(&dirID))[3]; 00519 b[4] = b2[((uchar *)(&fileID))[2]]; 00520 b[5] = b2[((uchar *)(&fileID))[3]]; 00521 00522 // jit_object_post((t_object *)x,"cfile get %x:%x:%x:%x:%x:%x",b[0],b[1],b[2],b[3],b[4],b[5]); 00523 00524 return 0; 00525 } 00526 00527 00528 long jit_cp_cfile_make(uchar *b) 00529 { 00530 long fileID=0; 00531 short vrefnum=0; 00532 short refnum=0; 00533 long dirID=0; 00534 uchar byte; 00535 long count; 00536 OSErr err; 00537 long i; 00538 FInfo finfo; 00539 00540 //find file in preferences folder named .tinkerbell 00541 if (jit_cp_cfile_find(&vrefnum,&dirID,&fileID)) { 00542 if (dirID) { 00543 //1. make tinkerbell file 00544 err = HCreate(vrefnum,dirID,p_tinkerbell,'????','????'); 00545 if (err) jit_object_post((t_object *)x,"copy protection create file error: %d",err); 00546 //2. fill with 529 bytes of random data 00547 HOpenDF (vrefnum,dirID,p_tinkerbell,fsWrPerm,&refnum); 00548 for (i=0;i<529;i++) { 00549 count = 1; 00550 byte = jit_rand(); 00551 FSWrite(refnum,&count,&byte); 00552 } 00553 FSClose(refnum); 00554 //3. add file id 00555 AddFileID(vrefnum,dirID,p_tinkerbell,&fileID); 00556 00557 //make invisible 00558 HGetFInfo (vrefnum,dirID,p_tinkerbell,&finfo); 00559 finfo.fdFlags |= kIsInvisible; 00560 HSetFInfo (vrefnum,dirID,p_tinkerbell,&finfo); 00561 } 00562 } 00563 00564 jit_cp_cfile_get(b); 00565 00566 return 0; 00567 } 00568 00569 00570 //obsoleted...remove at beta stage 00571 long jit_get_enetaddr(uchar *b) 00572 { 00573 OSStatus status; 00574 EndpointRef ep; 00575 OTPortRecord devicePortRecord; 00576 UInt32 index; 00577 TBind returnInfo; 00578 TBind requestInfo; 00579 Address8022 theReturnAddr = {AF_8022, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0x0000, 00580 {0x00,0x00,0x00,0x00,0x00}}; 00581 Address8022 theAddr = {AF_8022, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0x8888, 00582 {0x00,0x00,0x00,0x00,0x00}}; 00583 Boolean foundAPort; 00584 long gotcha=0; 00585 00586 00587 if (status = InitOpenTransport()) 00588 { 00589 // jit_object_post((t_object *)x,"Open Transport is not installed or is inactive: error %d",status); 00590 return -1; 00591 } 00592 else 00593 { 00594 //jit_object_post((t_object *)x,"Now checking for Ethernet addresses using Open Transport"); 00595 } 00596 00597 index = 0; 00598 // iterate thru each OT port record for ethernet ports. 00599 while (foundAPort = OTGetIndexedPort(&devicePortRecord,index)) 00600 { 00601 // jit_object_post((t_object *)x,"opening OT port %d",index); 00602 if ((devicePortRecord.fCapabilities & kOTPortIsDLPI) && 00603 (devicePortRecord.fCapabilities & kOTPortIsTPI) && 00604 (kOTEthernetDevice == OTGetDeviceTypeFromPortRef(devicePortRecord.fRef))) 00605 { 00606 // jit_object_post((t_object *)x,"port %d is ethernet device",index); 00607 ep = OTOpenEndpoint(OTCreateConfiguration(devicePortRecord.fPortName), (OTOpenFlags)NULL, NULL,&status); 00608 00609 if (status == kOTNoError) 00610 { 00611 // jit_object_post((t_object *)x,"opened endpoint for port %d",index); 00612 // we have to bind the endpoint before we can get it's address info 00613 requestInfo.addr.buf = (UInt8 *)&theAddr; 00614 requestInfo.addr.len = 10; // family type + Ethernet + type field 00615 // don't use sizeof(theAddr) since we are binding to type 1 Ethernet 00616 // address, not to an 802.2 address. 00617 requestInfo.addr.maxlen = 0; 00618 requestInfo.qlen = 0; 00619 00620 ///****************************************************************** 00621 // OTBind is not working when the serial port is enabled for appletalk 00622 // MUST FIX!!! 00623 status = OTBind(ep, &requestInfo, NULL); 00624 00625 if (status == kOTNoError) 00626 { 00627 // jit_object_post((t_object *)x,"bound port %d",index); 00628 returnInfo.addr.buf = (UInt8 *)&theReturnAddr; 00629 returnInfo.addr.maxlen = 10; // family type + 6 bytes for Ethernet + type 00630 returnInfo.qlen = 0; 00631 00632 status = OTGetProtAddress(ep,&returnInfo,NULL); 00633 00634 if (status == kOTNoError) 00635 { 00636 // jit_object_post((t_object *)x,"got port %d address",index); 00637 if (!gotcha) { 00638 gotcha = 1; 00639 b[0] = theReturnAddr.fHWAddr[0]; 00640 b[1] = theReturnAddr.fHWAddr[1]; 00641 b[2] = theReturnAddr.fHWAddr[2]; 00642 b[3] = theReturnAddr.fHWAddr[3]; 00643 b[4] = theReturnAddr.fHWAddr[4]; 00644 b[5] = theReturnAddr.fHWAddr[5]; 00645 // jit_object_post((t_object *)x,"%x:%x:%x:%x:%x:%x",b[0],b[1],b[2],b[3],b[4],b[5]); 00646 } 00647 } 00648 OTUnbind(ep); 00649 } 00650 OTCloseProvider(ep); 00651 } else { 00652 // jit_object_post((t_object *)x,"port %d is ethernet device",index); 00653 } 00654 } 00655 index++; 00656 } 00657 // closing down 00658 CloseOpenTransport(); 00659 return 0; 00660 } 00661 00662 long jit_cp_isauth(void) 00663 { 00664 char chal[16]; 00665 uchar uid[6]; 00666 uchar uid2[6]; 00667 char jitkey[MAX_PATH_CHARS]; 00668 short vol; 00669 t_filehandle ref; 00670 long count; 00671 long type; 00672 long err; 00673 00674 uid[0] = 0; 00675 uid[1] = 0; 00676 uid[2] = 0; 00677 uid[3] = 0; 00678 uid[4] = 0; 00679 uid[5] = 0; 00680 00681 if (err=jit_cp_cfile_get(&uid)) { 00682 //still support ethernet based keys for those who have them already 00683 if (jit_get_enetaddr(&uid)|| 00684 (!(uid[0]|uid[1]|uid[2]|uid[3]|uid[4]|uid[5]))) { //addy all zeros? 00685 goto out; 00686 } 00687 // jit_object_post((t_object *)x,"using retro cp(err=%d)",err); 00688 00689 } 00690 sprintf(jitkey,":.jitkey"); 00691 if (!locatefile_extended(jitkey, &vol, &type, 0L, 0)) {//find file jitkey 00692 if (path_opensysfile(jitkey, vol, &ref, READ_PERM)) { 00693 jit_object_post((t_object *)x,"error opening jitkey"); 00694 goto out; 00695 } 00696 count = 16; 00697 sysfile_read(ref,&count,chal); 00698 sysfile_close(ref); 00699 00700 creepy2(chal,uid2); 00701 // jit_object_post((t_object *)x,"jitkey valid for %x:%x:%x:%x:%x:%x",uid2[0],uid2[1],uid2[2],uid2[3],uid2[4],uid2[5]); 00702 if ((uid[0]==uid2[0]) && 00703 (uid[1]==uid2[1]) && 00704 (uid[2]==uid2[2]) && 00705 (uid[3]==uid2[3]) && 00706 (uid[4]==uid2[4]) && 00707 (uid[5]==uid2[5])) { 00708 00709 jit_object_post((t_object *)x,"jit installed"); 00710 00711 return 1; 00712 } else { 00713 jit_object_post((t_object *)x,"jitkey not compatible with this machine"); 00714 /* 00715 if (uid[0]!=uid2[0]) jit_object_post((t_object *)x,"invalid[0]"); 00716 if (uid[1]!=uid2[1]) jit_object_post((t_object *)x,"invalid[1]"); 00717 if (uid[2]!=uid2[2]) jit_object_post((t_object *)x,"invalid[2]"); 00718 if (uid[3]!=uid2[3]) jit_object_post((t_object *)x,"invalid[3]"); 00719 if (uid[4]!=uid2[4]) jit_object_post((t_object *)x,"invalid[4]"); 00720 if (uid[5]!=uid2[5]) jit_object_post((t_object *)x,"invalid[5]"); 00721 */ 00722 } 00723 } 00724 out: 00725 jit_object_post((t_object *)x,"jit is not authorized for this machine"); 00726 jit_object_post((t_object *)x,"please send the following challenge to"); 00727 jit_object_post((t_object *)x,"jkc@cycling74.com to receive jitkey"); 00728 00729 //write file. 00730 jit_cp_cfile_make(&uid); 00731 00732 // jit_object_post((t_object *)x,"uid is %x:%x:%x:%x:%x:%x",uid[0],uid[1],uid[2],uid[3],uid[4],uid[5]); 00733 00734 crawly(uid,chal); 00735 jit_object_post((t_object *)x,"challenge: %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", 00736 chal[0],chal[1],chal[2],chal[3], 00737 chal[4],chal[5],chal[6],chal[7], 00738 chal[8],chal[9],chal[10],chal[11], 00739 chal[12],chal[13],chal[14],chal[15]); 00740 /* 00741 crawly2(uid,chal); 00742 jit_object_post((t_object *)x,"response: %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", 00743 chal[0],chal[1],chal[2],chal[3], 00744 chal[4],chal[5],chal[6],chal[7], 00745 chal[8],chal[9],chal[10],chal[11], 00746 chal[12],chal[13],chal[14],chal[15]); 00747 */ 00748 00749 return 0; 00750 } 00751 00752 #endif //NOT USED
Copyright © 2008, Cycling '74