add MP_BUF error
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
diff --git a/bn_mp_pack.c b/bn_mp_pack.c
index 6b90c1e..48da1b2 100644
--- a/bn_mp_pack.c
+++ b/bn_mp_pack.c
@@ -16,7 +16,7 @@ mp_err mp_pack(void *rop, size_t maxcount, size_t *writtencount, mp_order order,
mp_int t;
if (maxcount == 0u) {
- return MP_VAL;
+ return MP_BUF;
}
if ((err = mp_init_copy(&t, op)) != MP_OKAY) {
@@ -38,8 +38,8 @@ mp_err mp_pack(void *rop, size_t maxcount, size_t *writtencount, mp_order order,
for (i = 0u; i < count; ++i) {
if (i >= maxcount) {
- err = MP_VAL;
- break;
+ err = MP_BUF;
+ break;
}
for (j = 0u; j < size; ++j) {
unsigned char *byte = (unsigned char *)rop +
diff --git a/bn_mp_to_radix.c b/bn_mp_to_radix.c
index 3793a6f..e0613b4 100644
--- a/bn_mp_to_radix.c
+++ b/bn_mp_to_radix.c
@@ -16,14 +16,11 @@ mp_err mp_to_radix(const mp_int *a, char *str, size_t maxlen, size_t *written, i
mp_digit d;
char *_s = str;
-
- /* If we want to fill a bucket we need a bucket in the first place. */
- if (str == NULL) {
- return MP_VAL;
- }
-
/* check range of radix and size*/
- if ((maxlen < 2u) || (radix < 2) || (radix > 64)) {
+ if (maxlen < 2u) {
+ return MP_BUF;
+ }
+ if ((radix < 2) || (radix > 64)) {
return MP_VAL;
}
@@ -57,9 +54,7 @@ mp_err mp_to_radix(const mp_int *a, char *str, size_t maxlen, size_t *written, i
while (!MP_IS_ZERO(&t)) {
if (--maxlen < 1u) {
/* no more room */
- /* TODO: It could mimic mp_to_radix_n if that is not an error
- or at least not this error (MP_ITER or a new one?). */
- err = MP_VAL;
+ err = MP_BUF;
break;
}
if ((err = mp_div_d(&t, (mp_digit)radix, &t, &d)) != MP_OKAY) {
diff --git a/bn_mp_to_sbin.c b/bn_mp_to_sbin.c
index e28dcce..3e194ca 100644
--- a/bn_mp_to_sbin.c
+++ b/bn_mp_to_sbin.c
@@ -8,7 +8,7 @@ mp_err mp_to_sbin(const mp_int *a, unsigned char *buf, size_t maxlen, size_t *wr
{
mp_err err;
if (maxlen == 0u) {
- return MP_VAL;
+ return MP_BUF;
}
if ((err = mp_to_ubin(a, buf + 1, maxlen - 1u, written)) != MP_OKAY) {
diff --git a/bn_mp_to_ubin.c b/bn_mp_to_ubin.c
index 797cd1a..cfa391a 100644
--- a/bn_mp_to_ubin.c
+++ b/bn_mp_to_ubin.c
@@ -11,7 +11,7 @@ mp_err mp_to_ubin(const mp_int *a, unsigned char *buf, size_t maxlen, size_t *wr
mp_int t;
if (maxlen == 0u) {
- return MP_VAL;
+ return MP_BUF;
}
if ((err = mp_init_copy(&t, a)) != MP_OKAY) {
@@ -21,7 +21,7 @@ mp_err mp_to_ubin(const mp_int *a, unsigned char *buf, size_t maxlen, size_t *wr
x = 0u;
while (!MP_IS_ZERO(&t)) {
if (maxlen == 0u) {
- err = MP_VAL;
+ err = MP_BUF;
goto LBL_ERR;
}
maxlen--;
diff --git a/demo/test.c b/demo/test.c
index c306d50..8cad788 100644
--- a/demo/test.c
+++ b/demo/test.c
@@ -1260,8 +1260,6 @@ static int test_mp_read_radix(void)
if (mp_init_multi(&a, NULL)!= MP_OKAY) goto LTM_ERR;
if ((err = mp_read_radix(&a, "123456", 10)) != MP_OKAY) goto LTM_ERR;
- /* Must fail */
- if ((err = mp_to_radix(&a, NULL, SIZE_MAX, NULL, 10)) != MP_VAL) goto LTM_ERR;
if ((err = mp_to_radix(&a, buf, SIZE_MAX, &written, 10)) != MP_OKAY) goto LTM_ERR;
printf(" '123456' a == %s, length = %zu\n", buf, written);
diff --git a/tommath.h b/tommath.h
index f5c9250..deb042a 100644
--- a/tommath.h
+++ b/tommath.h
@@ -117,24 +117,25 @@ typedef uint64_t private_mp_word;
#ifdef MP_USE_ENUMS
typedef enum {
- MP_ZPOS = 0,
- MP_NEG = 1
+ MP_ZPOS = 0, /* positive */
+ MP_NEG = 1 /* negative */
} mp_sign;
typedef enum {
- MP_LT = -1,
- MP_EQ = 0,
- MP_GT = 1
+ MP_LT = -1, /* less than */
+ MP_EQ = 0, /* equal */
+ MP_GT = 1 /* greater than */
} mp_ord;
typedef enum {
MP_NO = 0,
MP_YES = 1
} mp_bool;
typedef enum {
- MP_OKAY = 0,
- MP_ERR = -1,
- MP_MEM = -2,
- MP_VAL = -3,
- MP_ITER = -4
+ MP_OKAY = 0, /* no error */
+ MP_ERR = -1, /* unknown error */
+ MP_MEM = -2, /* out of mem */
+ MP_VAL = -3, /* invalid input */
+ MP_ITER = -4, /* maximum iterations reached */
+ MP_BUF = -5, /* buffer overflow, supplied buffer too small */
} mp_err;
typedef enum {
MP_LSB_FIRST = -1,
@@ -154,15 +155,16 @@ typedef int mp_ord;
#define MP_EQ 0 /* equal to */
#define MP_GT 1 /* greater than */
typedef int mp_bool;
-#define MP_YES 1 /* yes response */
-#define MP_NO 0 /* no response */
+#define MP_YES 1
+#define MP_NO 0
typedef int mp_err;
-#define MP_OKAY 0 /* ok result */
+#define MP_OKAY 0 /* no error */
#define MP_ERR -1 /* unknown error */
#define MP_MEM -2 /* out of mem */
#define MP_VAL -3 /* invalid input */
#define MP_RANGE (MP_DEPRECATED_PRAGMA("MP_RANGE has been deprecated in favor of MP_VAL") MP_VAL)
-#define MP_ITER -4 /* Max. iterations reached */
+#define MP_ITER -4 /* maximum iterations reached */
+#define MP_BUF -5 /* buffer overflow, supplied buffer too small */
typedef int mp_order;
#define MP_LSB_FIRST -1
#define MP_MSB_FIRST 1