bool KviMircryptionEngine::doEncryptCBC(KviCString & plain, KviCString & encoded) { // make sure it is a multiple of 8 bytes (eventually pad with zeroes) if(plain.len() % 8) { int oldL = plain.len(); plain.setLen(plain.len() + (8 - (plain.len() % 8))); char * padB = plain.ptr() + oldL; char * padE = plain.ptr() + plain.len(); while(padB < padE) *padB++ = 0; } int ll = plain.len() + 8; unsigned char * in = (unsigned char *)KviMemory::allocate(ll); InitVectorEngine::fillRandomIV(in, 8); KviMemory::copy(in + 8, plain.ptr(), plain.len()); // encrypt unsigned char * out = (unsigned char *)KviMemory::allocate(ll); BlowFish bf((unsigned char *)m_szEncryptKey.ptr(), m_szEncryptKey.len()); bf.ResetChain(); bf.Encrypt(in, out, ll, BlowFish::CBC); KviMemory::free(in); encoded.bufferToBase64((const char *)out, ll); KviMemory::free(out); encoded.prepend('*'); // prepend the signature return true; }
bool plainMethod(KviCString & szIn, KviCString & szOut, QByteArray & baNick, QByteArray & baPass) { if(szIn=="+") { int answerLen = 2 + (2 * baNick.size()) + baPass.size(); char * answer = (char *) KviMemory::allocate(answerLen); char * answer2 = answer; memcpy(answer, baNick.data(), baNick.size()); answer+=baNick.size(); memset(answer, 0, 1); answer++; memcpy(answer, baNick.data(), baNick.size()); answer+=baNick.size(); memset(answer, 0, 1); answer++; memcpy(answer, baPass.data(), baPass.size()); szOut.bufferToBase64(answer2,answerLen); KviMemory::free(answer2); return true; } return false; }
bool KviRijndaelBase64Engine::binaryToAscii(const char * inBuffer, int len, KviCString & outBuffer) { outBuffer.bufferToBase64(inBuffer, len); return true; }