| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
April 25, 2014 AES encryption with openssl bindings | ||||
|---|---|---|---|---|
| ||||
hi everyone.
I'm trying to symmetrically encrypt some text using the openssl bindings. My code compiles and fails silently. Clearly there is something very wrong with it - it could be my novice D skills, or my misuse of the openssl binding.
auto chunk = new ubyte[](16);
foreach(ref x; chunk) x = uniform!"[]"(ubyte.min, ubyte.max);
AES_KEY wctx;
AES_set_encrypt_key(chunk.ptr,128,&wctx);
string s = "virident";
ubyte[] b;
b = cast(ubyte[]) s;
ubyte[] e;
AES_encrypt(b.ptr,e.ptr,&wctx);
ubyte[] d;
AES_decrypt(e.ptr,d.ptr,&wctx);
writefln("%s",d);
Any clues? I am a D novice, so any spoonfeeding you could provide would be helpful :)
thanks!
Brad
| ||||
April 25, 2014 Re: AES encryption with openssl bindings | ||||
|---|---|---|---|---|
| ||||
Posted in reply to brad clawsie | On Fri, 25 Apr 2014 19:06:31 +0000, brad clawsie wrote:
> hi everyone.
>
> I'm trying to symmetrically encrypt some text using the openssl bindings. My code compiles and fails silently. Clearly there is something very wrong with it - it could be my novice D skills, or my misuse of the openssl binding.
>
> auto chunk = new ubyte[](16);
> foreach(ref x; chunk) x = uniform!"[]"(ubyte.min, ubyte.max);
> AES_KEY wctx;
> AES_set_encrypt_key(chunk.ptr,128,&wctx);
>
> string s = "virident";
> ubyte[] b;
> b = cast(ubyte[]) s;
> ubyte[] e;
> AES_encrypt(b.ptr,e.ptr,&wctx);
> ubyte[] d;
> AES_decrypt(e.ptr,d.ptr,&wctx);
> writefln("%s",d);
>
>
> Any clues? I am a D novice, so any spoonfeeding you could provide would be helpful :)
>
> thanks!
> Brad
It doesn't look like you're allocating space for `e` or `d`, e.g. `auto e = new ubyte[](256);`, so those arrays have a length of 0, in which case the encrypt/decrypt functions are just trashing their way through memory.
| |||
April 25, 2014 Re: AES encryption with openssl bindings | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Justin Whear | Justin Whear: > brad clawsie: >> b = cast(ubyte[]) s; Better to use std.string.representation. > It doesn't look like you're allocating space for `e` or `d`, e.g. `auto e > = new ubyte[](256);`, so those arrays have a length of 0, in which case > the encrypt/decrypt functions are just trashing their way through memory. Thankfully we have slices in D. So better to write little wrapper functions, make them the only public functions in a module and use them only. Bye, bearophile | |||
April 26, 2014 Re: AES encryption with openssl bindings | ||||
|---|---|---|---|---|
| ||||
Posted in reply to brad clawsie | AES_set_decrypt_key is needed before AES_decrypt.
AES_set_decrypt_key(chunk.ptr, 128, &wctx);
| |||
April 26, 2014 Re: AES encryption with openssl bindings | ||||
|---|---|---|---|---|
| ||||
Posted in reply to brad clawsie | On Friday, 25 April 2014 at 19:06:33 UTC, brad clawsie wrote:
> My code compiles and fails silently.
How do you want it to fail? C code doesn't throw exceptions.
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply