Thread overview | |||||
---|---|---|---|---|---|
|
April 30, 2014 how to print ubyte* | ||||
---|---|---|---|---|
| ||||
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 |
April 30, 2014 Re: how to print ubyte* | ||||
---|---|---|---|---|
| ||||
Posted in reply to brad clawsie | 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 |
April 30, 2014 Re: how to print ubyte* | ||||
---|---|---|---|---|
| ||||
Posted in reply to brad clawsie | 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 |
Copyright © 1999-2021 by the D Language Foundation