1) bcode.c and bn_check() call

bn_check(BN_zero(f));

https://github.com/openbsd/src/blob/master/usr.bin/dc/bcode.c#L389
https://github.com/openbsd/src/blob/master/usr.bin/dc/bcode.c#L807
https://github.com/openbsd/src/blob/master/usr.bin/dc/bcode.c#L891


2) mem.c is a function

https://github.com/openbsd/src/blob/master/usr.bin/dc/mem.c#L92

void
bn_check(int x) \
{
if (x == 0)
err(1, "big number failure %lx", ERR_get_error());
}

3) dc uses macro from libcrypto/bn/bn.h

https://github.com/openbsd/src/blob/master/lib/libcrypto/bn/bn.h#L335


#define BN_zero_ex(a) \
do { \
BIGNUM *_tmp_bn = (a); \
_tmp_bn->top = 0; \
_tmp_bn->neg = 0; \
} while(0)

#ifdef OPENSSL_NO_DEPRECATED
#define BN_zero(a) BN_zero_ex(a)
#else
#define BN_zero(a) (BN_set_word((a),0))
#endif


Summing up: if OPENSSL_NO_DEPRECATED is defined, then the bn_check(int
x) will be called with:

do { \
BIGNUM *_tmp_bn = (a); \
_tmp_bn->top = 0; \
_tmp_bn->neg = 0; \
}

Best regards,
Daniel

Reply via email to