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