| 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
Permalink
Reply