Added Encrypt/Decrypt functions for doing blowfish CBC - also added some base64 wrapper functions

git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@535 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
prozacx
2005-09-26 06:20:52 +00:00
parent a88cea430b
commit 5e4ba2e39f
2 changed files with 68 additions and 5 deletions

View File

@@ -473,6 +473,16 @@ CString CString::Format(const CString& sFormatStr, ...) {
return "";
}
bool CString::Base64Encode(unsigned int uWrap) {
CString sCopy(*this);
return sCopy.Base64Encode(*this, uWrap);
}
unsigned long CString::Base64Decode() {
CString sCopy(*this);
return sCopy.Base64Decode(*this);
}
CString CString::Base64Encode_n(unsigned int uWrap) const {
CString sRet;
Base64Encode(sRet, uWrap);
@@ -611,6 +621,51 @@ CString CString::MD5() const {
return (const char*) CMD5(*this);
}
CString CString::Encrypt_n(const CString& sPass, const CString& sIvec) {
CString sRet;
sRet.Encrypt(sPass, sIvec);
return sRet;
}
CString CString::Decrypt_n(const CString& sPass, const CString& sIvec) {
CString sRet;
sRet.Decrypt(sPass, sIvec);
return sRet;
}
void CString::Encrypt(const CString& sPass, const CString& sIvec) {
Crypt(sPass, true, sIvec);
}
void CString::Decrypt(const CString& sPass, const CString& sIvec) {
Crypt(sPass, false, sIvec);
}
void CString::Crypt(const CString& sPass, bool bEncrypt, const CString& sIvec) {
unsigned char szIvec[8] = {0,0,0,0,0,0,0,0};
BF_KEY bKey;
if (sIvec.length() >= 8) {
memcpy(szIvec, sIvec.data(), 8);
}
BF_set_key(&bKey, sPass.length(), (unsigned char*) sPass.data());
unsigned int uPad = (length() % 8);
if (uPad) {
uPad = 8 - uPad;
append(uPad, '\0');
}
size_t uLen = length();
unsigned char* szBuff = (unsigned char*) malloc(uLen);
BF_cbc_encrypt((const unsigned char*) data(), szBuff, uLen, &bKey, szIvec, ((bEncrypt) ? BF_ENCRYPT : BF_DECRYPT));
clear();
append((const char*) szBuff, uLen);
free(szBuff);
}
CString CString::ToString(char c) { stringstream s; s << c; return s.str(); }
CString CString::ToString(unsigned char c) { stringstream s; s << c; return s.str(); }
CString CString::ToString(short i) { stringstream s; s << i; return s.str(); }