X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/8857f8eb568017bfe4a1f884c89d000eb64e9627..d34decd2b2b88240cf4ca68a2a5feb7bf36de6e7:/mp-io.c diff --git a/mp-io.c b/mp-io.c index 1592269..c510649 100644 --- a/mp-io.c +++ b/mp-io.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: mp-io.c,v 1.2 1999/11/19 13:19:06 mdw Exp $ + * $Id: mp-io.c,v 1.4 2000/06/17 11:45:09 mdw Exp $ * * Loading and storing of multiprecision integers * @@ -30,6 +30,14 @@ /*----- Revision history --------------------------------------------------* * * $Log: mp-io.c,v $ + * Revision 1.4 2000/06/17 11:45:09 mdw + * Major memory management overhaul. Added arena support. Use the secure + * arena for secret integers. Replace and improve the MP management macros + * (e.g., replace MP_MODIFY by MP_DEST). + * + * Revision 1.3 1999/11/21 22:13:02 mdw + * Add mp version of MPX_BITS. + * * Revision 1.2 1999/11/19 13:19:06 mdw * Set flags on results correctly. * @@ -61,6 +69,23 @@ size_t mp_octets(const mp *m) return (sz); } +/* --- @mp_bits@ --- * + * + * Arguments: @const mp *m@ = a multiprecision integer + * + * Returns: The number of bits required to represent @m@. + * + * Use: Calculates the external storage required for a multiprecision + * integer. + */ + +unsigned long mp_bits(const mp *m) +{ + unsigned long bits; + MPX_BITS(bits, m->v, m->vl); + return (bits); +} + /* --- @mp_loadl@ --- * * * Arguments: @mp *d@ = destination @@ -77,7 +102,7 @@ size_t mp_octets(const mp *m) mp *mp_loadl(mp *d, const void *pv, size_t sz) { - MP_MODIFY(d, MPW_RQ(sz)); + MP_DEST(d, MPW_RQ(sz), MP_UNDEF); mpx_loadl(d->v, d->vl, pv, sz); d->f &= ~(MP_UNDEF | MP_NEG); mp_shrink(d); @@ -122,7 +147,7 @@ void mp_storel(const mp *m, void *pv, size_t sz) mp *mp_loadb(mp *d, const void *pv, size_t sz) { - MP_MODIFY(d, MPW_RQ(sz)); + MP_DEST(d, MPW_RQ(sz), MP_UNDEF); mpx_loadb(d->v, d->vl, pv, sz); d->f &= ~(MP_UNDEF | MP_NEG); mp_shrink(d);