I am having an issue in which I encrypt my data, and it seems to be
working; however, when I attempt to decrypt the data it returns
gibberish after a 0x00 value. For instance I *send in a byte[256]
that contains all 0x61, with several 0x00* interjected. I am doing
this as a proof of concept, being that I would like to use the GCM
model to encrypt data that may contain 0x00. I have verified my key,
iv, and const byte *in (including mac) and all seems to go threw
encrypt to decrypt correctly.
The issue I have is that the data after any 0x00 is gibberish from the
statement:
if (n > 0) { df.Get(out, n); }
Is this not supported? Am I implementing it incorrectly for this type
of execution?
My Encryption:
int encrypt(byte iv[12], const byte *in, int *size, byte *out)
{
string messageData = (char*)in;
string tempOut;
try
{
GCM<AES>::Encryption e;
e.SetKeyWithIv(key, 32, iv, 12);
AuthenticatedEncryptionFilter ef(e, new StringSink(tempOut),
false, 4);
ef.ChannelPut("", (const byte*)messageData.data(), *size);
ef.ChannelMessageEnd("");
memcpy(out, tempOut.data(), *size - 4);
*size -= 4;
}
catch
{
... // print exception; return failure
}
return (1); // success
}
My Decryption:
int decrypt(byte iv[12], const byte *in, int *size, byte *out)
{
string ciper = (char*)in;
try
{
GCM<AES>::Decryption d;
d.SetKeyWithIV(key, 32, iv, 12);
string enc = cipher.substr(0, *size - 4);
string mac = cipher.substr(*size - 4);
AuthenticatedDecryptionFilter df(d, NULL,
AuthenticatedDecryptionFilter::MAC_AT_END ||
AuthenticatedDecryptionFilter::THROW_EXCEPTION, 4);
df.ChannelPut("", (const byte*)enc.data(), enc.size());
df.ChannelPut("", (const byte*)mac.data(), mac.size());
df.ChannelMessageEnd("");
bool b = false;
b = df.GetLastResult();
assert(true == b);
size_t n = (size_t)-1;
df.SetRetrievalChannel("");
n = (size_t)df.MaxRetrievable();
if (n > 0) { df.Get(out, n); }
}
catch
{
... // print exception; return failure
}
return(1); // success
}
--
You received this message because you are subscribed to the "Crypto++ Users"
Google Group.
To unsubscribe, send an email to [email protected].
More information about Crypto++ and this group is available at
http://www.cryptopp.com.