cast to void[]
Alberto
reda at zioale.it
Mon Feb 12 02:13:20 PST 2007
I have some problem casting a struct to void[]:
const ushort RSA_ENC_LEN =256;
struct RSAEncryptedData {
ubyte encoding[RSA_ENC_LEN];
}
struct Signature {
ubyte sig[RSA_ENC_LEN];
}
class RSA {
...
Signature sign(void[] block, int type=Hash.SHA512);
bool verifySig(void[] block, Signature sig, int type=Hash.SHA512);
...
}
int main() {
ubyte[32] sessionkey;
int ret;
aes128 aes = new aes128(Bits256);
aes.setRandomKey();
sessionkey[0..$] = aes.getKey();
RSA rsatest = new RSA();
RSAEncryptedData buf = rsatest.encryptWithPublicKey(sessionkey);
// #1
Signature sig = rsatest.sign(cast(void[])buf.encoding, Hash.SHA512);
ret = rsatest.verifySig(cast(void[])buf.encoding, sig, Hash.SHA512);
assert(ret == true);
// #2
void[] a;
a.length = RSAEncryptedData.sizeof;
memcpy(cast(void *)a, cast(void *)&buf, a.length);
Signature sig2 = rsatest.sign(a, Hash.SHA512);
ret = rsatest.verifySig(a, sig2, Hash.SHA512);
assert(ret == true);
// #3
Signature sig3 =
rsatest.sign(cast(void[])((&buf)[0..RSAEncryptedData.sizeof]), Hash.SHA512);
ret =
rsatest.verifySig(cast(void[])((&buf)[0..RSAEncryptedData.sizeof]),
sig3, Hash.SHA512);
assert(ret == true);
return 0;
}
I got an Assertion failure on the 3° assert, where I have tried to cast
buf directly to void[].
In general, if I have something like this:
struct pippo {
ushort a;
ushort b;
ubyte[170] c;
uint d;
}
void do_something(void []);
What is the right way to pass pippo to do_something() ? something like #2 ?
More information about the Digitalmars-d-learn
mailing list