digitalmars.D.learn - how to print ubyte*
- brad clawsie (23/23) Apr 30 2014 hi, I'm back again with another openssl related question.
- bearophile (10/18) Apr 30 2014 Here you are casting a struct of pointer to immutable plus length
- Jonathan M Davis via Digitalmars-d-learn (10/39) Apr 30 2014 On Wed, 30 Apr 2014 07:27:23 +0000
hi, I'm back again with another openssl related question. given this program -------------- import std.stdio; import deimos.openssl.hmac; import deimos.openssl.evp; void main() { HMAC_CTX *ctx = new HMAC_CTX; HMAC_CTX_init(ctx); auto key = "123456"; auto s = "hello"; auto digest = HMAC(EVP_sha1(), cast(void *) key, cast(int) key.length, cast(ubyte*) s, cast(int) s.length, null,null); } -------------- "digest" should be of type ubyte* does anyone know how to print this out as ascii? thanks! brad
Apr 30 2014
brad clawsie:auto digest = HMAC(EVP_sha1(), cast(void *) key,Better to attach the * to void.cast(int) key.length, cast(ubyte*) s,Here you are casting a struct of pointer to immutable plus length to a mutable ubyte pointer.cast(int) s.length, null,null);This whole function call is quite bug-prone."digest" should be of type ubyte* does anyone know how to print this out as ascii?Do you mean in hex? Perhaps something like this? But hardcodes the hash function output length: writefln("%-(%02x%)", digest[0 .. 40]) Bye, bearophile
Apr 30 2014
On Wed, 30 Apr 2014 07:27:23 +0000 brad clawsie via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> wrote:hi, I'm back again with another openssl related question. given this program -------------- import std.stdio; import deimos.openssl.hmac; import deimos.openssl.evp; void main() { HMAC_CTX *ctx = new HMAC_CTX; HMAC_CTX_init(ctx); auto key = "123456"; auto s = "hello"; auto digest = HMAC(EVP_sha1(), cast(void *) key, cast(int) key.length, cast(ubyte*) s, cast(int) s.length, null,null); } -------------- "digest" should be of type ubyte* does anyone know how to print this out as ascii?If you want to print a ubyte*, then you can do something like auto str = cast(char[])digest[0 .. lengthOfDigest]; writeln(str); Slicing the pointer results in an array, and you can cast ubyte[] to char[], which will print as characters rather than their integral values. - Jonathan M Davis
Apr 30 2014