Eli Zaretskii <[email protected]> writes:
>> It fails the ecc-dup and ecc-add tests, in this and similar asserts:
>>
>> ASSERT (ecc->dup == ecc_dup_jj);
>>
>> Here, the right hand side is a symbol from libhogweed-x.dll, and on the
>> left hand side, ecc refers to a constant struct in the same dll.
>
> Please tell more details, perhaps showing the code which obtains the
> values of these variables. In particular, I don't understand what do
> you mean by "symbol": this is C, and C doesn't have symbols as one of
> its data types.
The "ecc" variable is a local defined like
const struct ecc_curve *ecc = ecc_curves[i];
(where ecc_curves is the array quoted below). And ecc_dup_jj is a
top-level function, declared as
void
ecc_dup_jj (const struct ecc_curve *ecc,
mp_limb_t *r, const mp_limb_t *p,
mp_limb_t *scratch);
The implementation is in the dll, so it is resolved by the dynamic
linker. I've found this stackoverflow question which also asks about
pointer equality with dlls:
https://stackoverflow.com/questions/20517589/function-pointer-values-inside-and-outside-a-dll
And by "symbol", I mean a name that is handled in the linking process.
> And what is the purpose of this assertion?
To check that the ecc_curve points to an appropriate implementation of
the point duplication function (different curves uses different
functions). To get a clearer error than just unexpected output numbers
if the wrong function is used.
But maybe value is quite small, I'll consider deleting the assert.
>> Somewhat related to this: The ecc pointer is taken from this array in
>> testutils.c:
>>
>> const struct ecc_curve * const ecc_curves[] = {
>> &_nettle_secp_192r1,
>> &_nettle_secp_224r1,
>> &_nettle_secp_256r1,
>> &_nettle_secp_384r1,
>> &_nettle_secp_521r1,
>> &_nettle_curve25519,
>> &_nettle_curve448,
>> &_nettle_gost_gc256b,
>> &_nettle_gost_gc512a,
>> NULL
>> };
>>
>> The entries are references to data objects in the dll. I'm a bit
>> surprised that works at all, is it expected to work? I had the
>> impression that dlls only exported functions.
>
> No, DLLs can export variables as well, and programs linked against it
> can import them.
Thanks, that's good to know.
Regards,
/Niels
--
Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.
_______________________________________________
nettle-bugs mailing list
[email protected]
http://lists.lysator.liu.se/mailman/listinfo/nettle-bugs