void CPhysicalLinkHelper::BaseConstructL() { LOG_FUNC // create Proxy telling it the possible PHY iBTProxySAP = CBTProxySAP::NewL(iLinkMgr, &iLink); iBTProxySAP->SetNotify(this); TCallBack ecb(EventReceivedCallBack, this); iEventReceivedCallBack = new (ELeave)CAsyncCallBack(ecb, EActiveHighPriority); }
int main(int argc, char** args) { if(argc!=5 || (strcmp(args[1], "cbc") && strcmp(args[1], "ecb")) || (strcmp(args[2], "encrypt") && strcmp(args[2], "decrypt"))) { printf("uzycie: des cbc/ecb encrypt/decrypt plik.in plik.key\ndane wyjsciowe przekierowywane sa do pliku plik.out\n"); return 1; } FILE* in = fopen(args[3], "r"); if(!in) { printf("blad przy otwieraniu pliku...\n"); return 1; } FILE* key; if(strcmp(args[2], "encrypt")) key = fopen(args[4], "r"); else key = fopen(args[4], "w"); DES_key_schedule klucz; DES_cblock sekwencja; DES_random_key(&sekwencja); if(DES_set_key_checked(&sekwencja, &klucz)<0) { printf("blad przy generacji klucza!\n"); return 1; } if(strcmp(args[1], "cbc")) { if(strcmp(args[2], "encrypt")) ecb(in, key, klucz, 0); else ecb(in, key, klucz, 1); } else { if(strcmp(args[2], "encrypt")) cbc(in, key, klucz, 0); else cbc(in, key, klucz, 1); } fclose(in); fclose(key); return 0; }
void Token::coumpute_authcode(BYTE challenge[8], BYTE rte_data[20]){ BYTE static_rte64[64], response[8], //result data[64], rte_data64[64], digest[20], key_3des_24[24], magic_sum_out64[64]; int pass_len = strlen(this->upass), pass_len_u = 2 * (pass_len + 1); //in UTF-8 BYTE *token_pass_u = new BYTE[pass_len_u]; memset(token_pass_u, 0, pass_len_u); for (int i = 0; i < pass_len; i++){ token_pass_u[i * 2] = 0; token_pass_u[i * 2 + 1] = this->upass[i]; } token_pass_u[pass_len * 2] = token_pass_u[pass_len * 2 + 1] = 0; //cout << "token_pass_u "; showarr(token_pass_u, pass_len_u, ':'); //DEBUG for (int i = 0; i < 64; i++){ static_rte64[i] = 0x03; data[i] = token_pass_u[i % pass_len_u]; rte_data64[i] = rte_data[i % 20]; } //cout << "rte_data64 "; showarr(rte_data64, 64, ':'); //DEBUG //cout << "static_rte64 "; showarr(static_rte64, 64, ':'); //DEBUG //cout << "data "; showarr(data, 64, ':'); //DEBUG CryptoPP::SHA1 h; h.Update(static_rte64, 64); h.Update(rte_data64, 64); h.Update(data, 64); h.Final(digest); //cout << "1st digest "; showarr(digest, 20, ':'); //DEBUG for (int i = 0; i < 998; i++){ CryptoPP::SHA1 h_cycle; h_cycle.Update(digest, 20); h_cycle.Final(digest); } memcpy(key_3des_24, digest, 20); //now we have 20 bytes of key, we need 4 bytes more h.Restart(); h.Update(static_rte64, 64); this->magic_sum64(magic_sum_out64, digest, rte_data64); h.Update(magic_sum_out64, 64); this->magic_sum64(magic_sum_out64, digest, data); h.Update(magic_sum_out64, 64); h.Final(digest); for (int i = 0; i < 998; i++){ CryptoPP::SHA1 h_cycle; h_cycle.Update(digest, 20); h_cycle.Final(digest); } memcpy(key_3des_24 + 20, digest, 4); //add remaining 4 bytes, now we have complete key //cout << "DES-EDE24 key "; showarr(key_3des_24, 24, ':'); //DEBUG //DES-EDE24 //CryptoPP::DES_EDE3::Encryption e(key_3des_24, CryptoPP::DES_EDE3::DEFAULT_KEYLENGTH); //CryptoPP::ECB_Mode_ExternalCipher::Encryption ecb(e); CryptoPP::ECB_Mode<CryptoPP::DES_EDE3>::Encryption ecb(key_3des_24, CryptoPP::DES_EDE3::DEFAULT_KEYLENGTH); ecb.ProcessData(response, challenge, 8); memcpy(challenge, response, 8); delete[] token_pass_u; }