typedef unsigned char unit; typedef unit *unitptr; extern short global_precision; typedef __SIZE_TYPE__ size_t; extern void *memcpy (void *dest, const void *src, size_t n); short mp_compare(const unit* r1, const unit* r2) { register short precision; precision = global_precision; (r1) = ((r1)+(precision)-1); (r2) = ((r2)+(precision)-1); do { if (*r1 < *r2) return(-1); if (*((r1)--) > *((r2)--)) return(1); } while (--precision); } static unit modulus[((1280+(2*8))/8)]; static unit d_data[((1280+(2*8))/8)*2]; int upton_modmult (unitptr prod, unitptr multiplicand, unitptr multiplier) { unitptr d = d_data; while (mp_compare(d,modulus) > 0) memcpy((void*)(prod), (const void*)(d), (global_precision)); }