void Ctrl::EventLoop0(Ctrl *ctrl) { GuiLock __; ASSERT(IsMainThread()); ASSERT(LoopLevel == 0 || ctrl); LoopLevel++; LLOG("Entering event loop at level " << LoopLevel << LOG_BEGIN); Ptr<Ctrl> ploop; if(ctrl) { ploop = LoopCtrl; LoopCtrl = ctrl; ctrl->inloop = true; } bool quit = false; int64 loopno = ++EventLoopNo; ProcessEvents(&quit); while(loopno > EndSessionLoopNo && !quit && (ctrl ? ctrl->IsOpen() && ctrl->InLoop() : GetTopCtrls().GetCount())) { // LLOG(GetSysTime() << " % " << (unsigned)msecs() % 10000 << ": EventLoop / GuiSleep"); SyncCaret(); GuiSleep(20); // LLOG(GetSysTime() << " % " << (unsigned)msecs() % 10000 << ": EventLoop / ProcessEvents"); ProcessEvents(&quit); // LLOG(GetSysTime() << " % " << (unsigned)msecs() % 10000 << ": EventLoop / after ProcessEvents"); LDUMP(loopno); LDUMP(fbEndSessionLoop); } if(ctrl) LoopCtrl = ploop; LoopLevel--; LLOG(LOG_END << "Leaving event loop "); }
bool Paragraph::ParaHeight::Put() { LDUMP(ascent); LDUMP(descent); LDUMP(external); cy += ascent + descent + external; return false; }
void FileStream::Close() { if(!IsOpen()) return; Flush(); LLOG("CLOSE " << handle); if(!CloseHandle(handle)) { LLOG("CLOSE ERROR"); LDUMP(GetLastErrorMessage()); SetLastError(); } handle = INVALID_HANDLE_VALUE; }
Ctrl *Ctrl::GetOwner() { GuiLock __; int q = FindTopCtrl(); if(q > 0 && topctrl[q]->top) { Ctrl *x = topctrl[q]->top->owner_window; LDUMP(Upp::Name(x)); return dynamic_cast<TopWindowFrame *>(x) ? x->GetOwner() : x; } return NULL; }
void cCamCryptNagra::SetCardData(unsigned int id, const unsigned char *bk, BIGNUM *exp) { cardid=id; memcpy(boxkey,bk,sizeof(boxkey)); BN_copy(camExp,exp); if(LOG(L_SC_PROC)) { unsigned char bb[4]; camExp.Put(bb,2); LDUMP(L_SC_PROC,boxkey,sizeof(boxkey),"Active card data: CARDID: %08x EXP: %02x%02x BOXKEY:",cardid,bb[0],bb[1]); } }
bool cCamCryptNagra::MakeSessionKey(unsigned char *out, const unsigned char *camdata) { if(!hasMod) return false; if(LOG(L_SC_PROC)) { unsigned char bb[64]; camMod.Put(bb,sizeof(bb)); LDUMP(L_SC_PROC,bb,sizeof(bb),"Sessionkey negotiation CAMMOD:"); } //decrypt $2A data here and prepare $2B reply if(rsa.RSA(out,camdata,64,camExp,camMod)!=64) return false; LDUMP(L_SC_PROC,out,64,"CMD 2A/26 after RSA:"); unsigned char key[16], sess[16]; InitKey(key,signature,cardid); LDUMP(L_SC_PROC,key,16,"first IDEA key: "); Signature(sess,key,out,32); memcpy(key,sess,8); memcpy(key+8,sess,8); LDUMP(L_SC_PROC,key,16,"second IDEA key:"); Signature(sess+8,key,out,32); LDUMP(L_SC_PROC,sess,16,"SESSION KEY: "); idea.SetDecKey(sess,&sessKey); if(rsa.RSA(out,out,64,camExp,camMod)!=64) return false; LDUMP(L_SC_PROC,out,64,"CMD 2B/27 data:"); return true; }
bool cCamCryptNagra::DecryptDT08(const unsigned char *dt08, unsigned int irdid, cBN *irdmod, bool fakeid) { if(LOG(L_SC_PROC)) { unsigned char bb[64]; irdmod->Put(bb,sizeof(bb)); LDUMP(L_SC_PROC,bb,sizeof(bb),"DT08 decrypt IRDID: %08x IRDMOD:",irdid); } unsigned char buff[72]; if(rsa.RSA(buff,dt08+1,64,camExp,*irdmod)!=64) return false; memcpy(buff+64,dt08+1+64,8); buff[63]|=dt08[0]&0x80; LDUMP(L_SC_PROC,buff,72,"DT08 after RSA"); unsigned char key[16]; InitKey(key,boxkey,irdid); LDUMP(L_SC_PROC,key,16,"DT08 IDEA key"); IdeaKS dks; idea.SetDecKey(key,&dks); idea.Decrypt(buff,72,&dks,0); LDUMP(L_SC_PROC,buff,72,"DT08 after IDEA"); memcpy(signature,buff,8); LDUMP(L_SC_PROC,signature,8,"signature"); BYTE4_BE(buff ,0); BYTE4_BE(buff+4,fakeid?0xFFFFFFFF:cardid); Signature(buff,key,buff,72); LDUMP(L_SC_PROC,buff,8,"check sig"); if(memcmp(signature,buff,8)) { PRINTF(L_SC_PROC,"DT08 signature failed"); return false; } BN_bin2bn(buff+8,64,camMod); hasMod=true; return true; }
One<Host> MakeBuild::CreateHost(bool sync_files) { SetupDefaultMethod(); VectorMap<String, String> bm = GetMethodVars(method); One<Host> outhost; { One<LocalHost> host = new LocalHost; VectorMap<String, String> env(Environment(), 1); host->exedirs = SplitDirs(bm.Get("PATH", "") + ';' + env.Get("PATH", "")); env.GetAdd("PATH") = Join(host->exedirs, ";"); env.GetAdd("UPP_MAIN__") = GetFileDirectory(PackagePath(GetMain())); env.GetAdd("UPP_ASSEMBLY__") = GetVar("UPP"); for(int i = 0; i < env.GetCount(); i++) { LDUMP(env.GetKey(i)); LDUMP(env[i]); host->environment << env.GetKey(i) << '=' << env[i] << '\0'; } host->environment.Cat(0); host->cmdout = &cmdout; outhost = -host; } return outhost; }
bool cIrdeto2::CalculateHash(const unsigned char *key, const unsigned char *iv, const unsigned char *data, int len) { ScheduleKey(key); unsigned char cbuff[8]; memset(cbuff,0,sizeof(cbuff)); len-=8; for(int y=0; y<len; y+=8) { if(y<len-8) { xxor(cbuff,8,cbuff,&data[y]); LDUMP(L_SYS_VERBOSE,cbuff,8,"3DES XOR in:"); } else { int l=len-y; xxor(cbuff,l,cbuff,&data[y]); xxor(cbuff+l,8-l,cbuff+l,iv+8); LDUMP(L_SYS_VERBOSE,cbuff,8,"3DES XOR(%d) in:",8-l); } DES3(cbuff,0); LDUMP(L_SYS_VERBOSE,cbuff,8,"3DES out:"); } LDUMP(L_SYS_VERBOSE,cbuff,8,"CryptBuffer:"); LDUMP(L_SYS_VERBOSE,&data[len],8,"MACBuffer:"); return memcmp(cbuff,&data[len],8)==0; }
void Ctrl::DoUpdate() { LLOG("DoUpdate"); invalid.Clear(); CursorSync(); LDUMPC(update); #if 0 FBUpdate(framebuffer.GetSize()); #else for(int i = 0; i < update.GetCount(); i++) { LDUMP(update[i]); FBUpdate(update[i]); } #endif update.Clear(); // Sleep(1000); }
bool cSmartCardNagra::DoBlkCmd(unsigned char cmd, int ilen, unsigned char res, int rlen, const unsigned char *data) { /* here we build the command related to the protocol T1 for ROM142 or T14 for ROM181 the only different that i know is the command length byte msg[4], this msg[4]+=1 by a ROM181 smartcard (_nighti_) one example for the cmd$C0 T14 protocol: 01 A0 CA 00 00 03 C0 00 06 91 T1 protocol: 21 00 08 A0 CA 00 00 02 C0 00 06 87 */ unsigned char msg[MAX_LEN+16]; static char nagra_head[] = { 0xA0,0xCA,0x00,0x00 }; memset(msg,0,sizeof(msg)); int c=0; if(!isT14Nagra) { msg[c++]=0x21; msg[c++]=block; block^=0x40; msg[c++]=ilen+6; } else { msg[c++]=0x01; } memcpy(msg+c,nagra_head,sizeof(nagra_head)); c+=sizeof(nagra_head); msg[c]=ilen; msg[c+1]=cmd; int dlen=ilen-2; if(dlen<0) { PRINTF(L_SC_ERROR,"invalid data length encountered"); return false; } msg[c+2]=dlen; if(isT14Nagra) msg[c]++; c+=3; if(data && dlen>0) { memcpy(msg+c,data,dlen); c+=dlen; } msg[c++]=rlen; msg[c]=XorSum(msg,c); c++; if(SerWrite(msg,c)==c) { LDUMP(L_CORE_SC,msg,c,"NAGRA: <-"); cCondWait::SleepMs(10); if(SerRead(buff,3,cardCfg.workTO)!=3) { PRINTF(L_SC_ERROR,"reading back reply failed"); return false; } int xlen=buff[2]+1; if(SerRead(buff+3,xlen,cardCfg.workTO)!=xlen) { PRINTF(L_SC_ERROR,"reading back information block failed"); return false; } xlen+=3; if(XorSum(buff,xlen)) { PRINTF(L_SC_ERROR,"checksum failed"); return false; } LDUMP(L_CORE_SC,buff,xlen,"NAGRA: ->"); if(buff[3]!=res) { PRINTF(L_SC_ERROR,"result not expected (%02X != %02X)",buff[3],res); return false; } if(buff[2]-2!=rlen) { PRINTF(L_SC_ERROR,"result length not expected (%d != %d)",buff[2]-2,rlen); return false; } memcpy(sb,&buff[3+rlen],2); LDUMP(L_CORE_SC,sb,2,"NAGRA: ->"); cCondWait::SleepMs(10); return true; } return false; }