bn_mp_fwrite.c 992 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "tommath_private.h"
  2. #ifdef BN_MP_FWRITE_C
  3. /* LibTomMath, multiple-precision integer library -- Tom St Denis */
  4. /* SPDX-License-Identifier: Unlicense */
  5. #ifndef MP_NO_FILE
  6. mp_err mp_fwrite(const mp_int *a, int radix, FILE *stream)
  7. {
  8. char *buf;
  9. mp_err err;
  10. int len;
  11. size_t written;
  12. /* TODO: this function is not in this PR */
  13. if (MP_HAS(MP_RADIX_SIZE_OVERESTIMATE)) {
  14. /* if ((err = mp_radix_size_overestimate(&t, base, &len)) != MP_OKAY) goto LBL_ERR; */
  15. } else {
  16. if ((err = mp_radix_size(a, radix, &len)) != MP_OKAY) {
  17. return err;
  18. }
  19. }
  20. buf = (char *) MP_MALLOC((size_t)len);
  21. if (buf == NULL) {
  22. return MP_MEM;
  23. }
  24. if ((err = mp_to_radix(a, buf, (size_t)len, &written, radix)) != MP_OKAY) {
  25. goto LBL_ERR;
  26. }
  27. if (fwrite(buf, written, 1uL, stream) != 1uL) {
  28. err = MP_ERR;
  29. goto LBL_ERR;
  30. }
  31. err = MP_OKAY;
  32. LBL_ERR:
  33. MP_FREE_BUFFER(buf, (size_t)len);
  34. return err;
  35. }
  36. #endif
  37. #endif