void StringParser::Base64Decode(const String &sInput, String &sOutput) { if (sInput.GetLength() == 0) { sOutput.Empty(); return; } AnsiString sInputStr = sInput; MimeCodeBase64 DeCoder; DeCoder.AddLineBreak(false); DeCoder.SetInput(sInputStr, sInputStr.GetLength(), false); AnsiString output; DeCoder.GetOutput(output); int length = output.GetLength(); // Since we're going to store the result in // a normal StdString, we can't return null // characters. for (int i = 0; i < length; i++) { if (output[i] == 0) output[i] = '\t'; } sOutput = output; }
AnsiString Base64::Decode(const char *input, int inputLength) { // base64 encode the signature. MimeCodeBase64 decoder; decoder.SetInput(input, inputLength, false); AnsiString sEncodedValue; decoder.GetOutput(sEncodedValue); // the MIME encoder will insert newlines. We don't want this // here since this is a generic base64 encoder which may be // used in none-mime environments (key encoding anyone?) sEncodedValue.Replace("\r\n", ""); return sEncodedValue; }
void StringParser::Base64Encode(const String &sInput, String &sOutput) { if (sInput.GetLength() == 0) { sOutput.Empty(); return; } AnsiString sInputStr = sInput; MimeCodeBase64 Coder; Coder.SetInput(sInputStr, sInputStr.GetLength(), true); Coder.AddLineBreak(false); AnsiString output; Coder.GetOutput(output); sOutput = output; }
AnsiString HashCreator::_GetHashRaw(const unsigned char *input, int inputLength, HashCreator::RequestedEncoding encoding) { int digestLength = 0; switch (_hashType) { case SHA1: digestLength = SHA_DIGEST_LENGTH; break; case SHA256: digestLength = SHA256_DIGEST_LENGTH; break; case MD5: digestLength = MD5_DIGEST_LENGTH; break; } unsigned char *results = new unsigned char[digestLength]; switch (_hashType) { case SHA1: { SHA_CTX context; SHA1_Init(&context); SHA1_Update(&context, input, inputLength); SHA1_Final(results, &context); break; } case MD5: { MD5_CTX context; MD5_Init(&context); MD5_Update(&context, input, inputLength); MD5_Final(results, &context); break; } case SHA256: { SHA256_CTX context; SHA256_Init(&context); SHA256_Update(&context, input, inputLength); SHA256_Final(results, &context); break; } } HM::String retVal; if (encoding == hex) { char *s = new char[digestLength*2+1]; for (int i=0; i<digestLength; i++) sprintf(s+i*2, "%02x", results[i]); s[digestLength*2]='\0'; retVal = s; delete [] s; } else if (encoding == base64) { MimeCodeBase64 encoder; encoder.SetInput((const char*) results, digestLength, true); AnsiString sEncodedValue; encoder.GetOutput(sEncodedValue); retVal = sEncodedValue; retVal = retVal.Mid(0, retVal.GetLength()-2); } delete [] results; return retVal; }