{"action":"created","comment":{"url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/comments/241411758","pull_request_review_id":184676268,"id":241411758,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0MTQxMTc1OA==","diff_hunk":"@@ -186,512 +186,618 @@ typedef struct mbedtls_mpi\n mbedtls_mpi;\n \n /**\n- * \\brief           Initialize one MPI (make internal references valid)\n- *                  This just makes it ready to be set or freed,\n+ * \\brief           Initialize an MPI context.\n+ *\n+ *                  This makes the MPI ready to be set or freed,\n  *                  but does not define a value for the MPI.\n  *\n- * \\param X         One MPI to initialize.\n+ * \\param X         The MPI context to initialize. Must not be \\c NULL.\n  */\n void mbedtls_mpi_init( mbedtls_mpi *X );\n \n /**\n- * \\brief          Unallocate one MPI\n+ * \\brief          Clear an MPI context.\n  *\n- * \\param X        One MPI to unallocate.\n+ * \\param X        The MPI context to be cleared. May be \\c NULL,\n+ *                 in which case this function is a no-op.\n  */\n void mbedtls_mpi_free( mbedtls_mpi *X );\n \n /**\n- * \\brief          Enlarge to the specified number of limbs\n+ * \\brief          Enlarge an MPI to the specified number of limbs.\n  *\n- *                 This function does nothing if the MPI is already large enough.\n+ * \\note           This function does nothing if the MPI is\n+ *                 already large enough.\n  *\n- * \\param X        MPI to grow\n- * \\param nblimbs  The target number of limbs\n+ * \\param X        The MPI to grow. Must point to an initialized MPI.\n+ * \\param nblimbs  The target number of limbs.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed.\n+ * \\return         Another negative error code on other kinds of failure.\n  */\n int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs );\n \n /**\n- * \\brief          Resize down, keeping at least the specified number of limbs\n+ * \\brief          Resize down, keeping at least the specified number of limbs.\n  *\n  *                 If \\c X is smaller than \\c nblimbs, it is resized up\n  *                 instead.\n  *\n- * \\param X        MPI to shrink\n- * \\param nblimbs  The minimum number of limbs to keep\n+ * \\param X        The MPI to shrink. Must point to an initialized MPI.\n+ * \\param nblimbs  The minimum number of limbs to keep.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n  *                 (this can only happen when resizing up).\n+ * \\return         Another negative error code on other kinds of failure.\n  */\n int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs );\n \n /**\n- * \\brief          Copy the contents of Y into X\n+ * \\brief          Make a copy of an MPI.\n+ *\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param Y        The source MPI.\n  *\n- * \\param X        Destination MPI. It is enlarged if necessary.\n- * \\param Y        Source MPI.\n+ * \\note           The limb-buffer in the destination MPI is enlarged\n+ *                 if necessary to hold the value in the source MPI.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed.\n+ * \\return         Another negative error code on other kinds of failure.\n  */\n int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y );\n \n /**\n- * \\brief          Swap the contents of X and Y\n+ * \\brief          Swap the contents of two MPIs.\n  *\n- * \\param X        First MPI value\n- * \\param Y        Second MPI value\n+ * \\param X        The first MPI. Must not be \\c NULL.\n+ * \\param Y        The second MPI. Must not be \\c NULL.\n  */\n void mbedtls_mpi_swap( mbedtls_mpi *X, mbedtls_mpi *Y );\n \n /**\n- * \\brief          Safe conditional assignement X = Y if assign is 1\n- *\n- * \\param X        MPI to conditionally assign to\n- * \\param Y        Value to be assigned\n- * \\param assign   1: perform the assignment, 0: keep X's original value\n+ * \\brief          Safe conditional copy of MPI which doesn't\n+ *                 reveal whether the conditional was true or not.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed,\n+ * \\param X        The MPI to conditionally assign to.\n+ * \\param Y        The MPI to be assigned from.\n+ * \\param assign   The conditional deciding whether to perform the\n+ *                 assignment or not. Possible values:\n+ *                 * \\c 1: Perform the assignment `X = Y`.\n+ *                 * \\c 0: Keep the original value of \\p X.\n  *\n  * \\note           This function is equivalent to\n- *                      if( assign ) mbedtls_mpi_copy( X, Y );\n+ *                      `if( assign ) mbedtls_mpi_copy( X, Y );`\n  *                 except that it avoids leaking any information about whether\n  *                 the assignment was done or not (the above code may leak\n  *                 information through branch prediction and/or memory access\n  *                 patterns analysis).\n+ *\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed.\n+ * \\return         Another negative error code on other kinds of failure.\n  */\n int mbedtls_mpi_safe_cond_assign( mbedtls_mpi *X, const mbedtls_mpi *Y, unsigned char assign );\n \n /**\n- * \\brief          Safe conditional swap X <-> Y if swap is 1\n- *\n- * \\param X        First mbedtls_mpi value\n- * \\param Y        Second mbedtls_mpi value\n- * \\param assign   1: perform the swap, 0: keep X and Y's original values\n+ * \\brief          Safe conditional swap which doesn't\n+ *                 reveal whether the conditional was true or not.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed,\n+ * \\param X        The first MPI.\n+ * \\param Y        The second MPI.\n+ * \\param assign   The conditional deciding whether to perform\n+ *                 the swap or not Possible values:\n+ *                 * \\c 1: Swap the values of \\p X and \\p Y.\n+ *                 * \\c 0: Keep the original values of \\p X and \\p Y.\n  *\n  * \\note           This function is equivalent to\n  *                      if( assign ) mbedtls_mpi_swap( X, Y );\n  *                 except that it avoids leaking any information about whether\n  *                 the assignment was done or not (the above code may leak\n  *                 information through branch prediction and/or memory access\n  *                 patterns analysis).\n+ *\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed.\n+ * \\return         Another negative error code on other kinds of failure.\n+ *\n  */\n int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char assign );\n \n /**\n- * \\brief          Set value from integer\n+ * \\brief          Store integer value in MPI.\n  *\n- * \\param X        MPI to set\n- * \\param z        Value to use\n+ * \\param X        The MPI to set.\n+ * \\param z        The value to use.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed.\n+ * \\return         Another negative error code on other kinds of failure.\n  */\n int mbedtls_mpi_lset( mbedtls_mpi *X, mbedtls_mpi_sint z );\n \n /**\n- * \\brief          Get a specific bit from X\n+ * \\brief          Get a specific bit from an MPI.\n  *\n- * \\param X        MPI to use\n- * \\param pos      Zero-based index of the bit in X\n+ * \\param X        The MPI to query.\n+ * \\param pos      Zero-based index of the bit to query.\n  *\n- * \\return         Either a 0 or a 1\n+ * \\return         \\c 0 or \\c 1 on success, depending on whether bit \\c pos\n+ *                 of \\c X is unset resp. set.\n+ * \\return         A negative error code on failure.\n  */\n int mbedtls_mpi_get_bit( const mbedtls_mpi *X, size_t pos );\n \n /**\n- * \\brief          Set a bit of X to a specific value of 0 or 1\n+ * \\brief          Modify a specific bit in an MPI.\n  *\n- * \\note           Will grow X if necessary to set a bit to 1 in a not yet\n- *                 existing limb. Will not grow if bit should be set to 0\n+ * \\note           This function will grow the target MPI if necessary to set a\n+ *                 bit to \\c 1 in a not yet existing limb. It will not grow if\n+ *                 the bit should be set to \\c 0.\n  *\n- * \\param X        MPI to use\n- * \\param pos      Zero-based index of the bit in X\n- * \\param val      The value to set the bit to (0 or 1)\n+ * \\param X        The MPI to modify.\n+ * \\param pos      Zero-based index of the bit to modify.\n+ * \\param val      The desired value of bit \\c pos: \\c 0 or \\c 1.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed,\n- *                 MBEDTLS_ERR_MPI_BAD_INPUT_DATA if val is not 0 or 1\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed.\n+ * \\return         Another negative error code on other kinds of failure.\n  */\n int mbedtls_mpi_set_bit( mbedtls_mpi *X, size_t pos, unsigned char val );\n \n /**\n- * \\brief          Return the number of zero-bits before the least significant\n- *                 '1' bit\n+ * \\brief          Return the number of zero-bits before the\n+ *                 least significant 1-bit\n  *\n- * Note: Thus also the zero-based index of the least significant '1' bit\n+ * \\note           This is the same as the zero-based index of\n+ *                 the least significant '1' bit.\n  *\n- * \\param X        MPI to use\n+ * \\param X        The MPI to query.\n+ *\n+ * \\return         The number of zero-bits before the least significant\n+ *                 1-bit in \\p X.\n  */\n size_t mbedtls_mpi_lsb( const mbedtls_mpi *X );\n \n /**\n  * \\brief          Return the number of bits up to and including the most\n- *                 significant '1' bit'\n+ *                 significant 1-bit.\n+ *\n+ * * \\note         This is same as the one-based index of the most\n+ *                 significant 1-bit.\n  *\n- * Note: Thus also the one-based index of the most significant '1' bit\n+ * \\param X        The MPI to query. Must point to an initialized MPI.\n  *\n- * \\param X        MPI to use\n+ * \\return         The number of bits up to and including the most\n+ *                 significant 1-bit.\n  */\n size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X );\n \n /**\n- * \\brief          Return the total size in bytes\n+ * \\brief          Return the total size an MPI value in bytes.\n  *\n- * \\param X        MPI to use\n+ * \\param X        The MPI to use. Must point to an initialized MPI.\n+ *\n+ * \\note           The value returned by this function may be less than\n+ *                 the number of bytes used to store \\p X internally.\n+ *                 This happens if and only if there are trailing zero-bytes.\n+ *\n+ * \\return         The least number of bytes capable of storing\n+ *                 the absolute value of \\p X.\n  */\n size_t mbedtls_mpi_size( const mbedtls_mpi *X );\n \n /**\n- * \\brief          Import from an ASCII string\n+ * \\brief          Import an MPI from an ASCII string.\n  *\n- * \\param X        Destination MPI\n- * \\param radix    Input numeric base\n- * \\param s        Null-terminated string buffer\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param radix    The numeric base of the input string.\n+ * \\param s        Null-terminated string buffer.\n  *\n- * \\return         0 if successful, or a MBEDTLS_ERR_MPI_XXX error code\n+ * \\return         \\c 0 if successful.\n+ * \\return         A negative error code on failure.\n  */\n int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s );\n \n /**\n- * \\brief          Export into an ASCII string\n+ * \\brief          Export an MPI into an ASCII string.\n  *\n- * \\param X        Source MPI\n- * \\param radix    Output numeric base\n- * \\param buf      Buffer to write the string to\n- * \\param buflen   Length of buf\n- * \\param olen     Length of the string written, including final NUL byte\n+ * \\param X        The source MPI. Must point to an initialized MPI.\n+ * \\param radix    The numeric base of the output string.\n+ * \\param buf      Buffer to write the string to. Must be writable of\n+ *                 length \\p buflen Bytes. May be \\c NULL if `buflen == 0`.\n+ * \\param buflen   The available size in Bytes of \\p buf.\n+ * \\param olen     Address at which to store the length of the string written,\n+ *                 including final \\c NULL byte. Must not be \\c NULL.\n  *\n- * \\return         0 if successful, or a MBEDTLS_ERR_MPI_XXX error code.\n- *                 *olen is always updated to reflect the amount\n- *                 of data that has (or would have) been written.\n+ * \\note           Call this function with `buflen == 0` to obtain the\n+ *                 minimum required buffer size in `*olen`.\n  *\n- * \\note           Call this function with buflen = 0 to obtain the\n- *                 minimum required buffer size in *olen.\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if the target buffer \\p buf\n+ *                 is too small to hold the value of \\p X in the desired base.\n+ *                 In this case, `*olen` is nonetheless updated to contain the\n+ *                 size of \\p buf required for a successful call.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix,\n                               char *buf, size_t buflen, size_t *olen );\n \n #if defined(MBEDTLS_FS_IO)\n /**\n- * \\brief          Read MPI from a line in an opened file\n- *\n- * \\param X        Destination MPI\n- * \\param radix    Input numeric base\n- * \\param fin      Input file handle\n+ * \\brief          Read an MPI from a line in an opened file.\n  *\n- * \\return         0 if successful, MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if\n- *                 the file read buffer is too small or a\n- *                 MBEDTLS_ERR_MPI_XXX error code\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param radix    The numeric base of the string representation used\n+ *                 in the source line.\n+ * \\param fin      The input file handle to use. Must not be \\c NULL.\n  *\n  * \\note           On success, this function advances the file stream\n  *                 to the end of the current line or to EOF.\n  *\n- *                 The function returns 0 on an empty line.\n+ *                 The function returns \\c 0 on an empty line.\n  *\n  *                 Leading whitespaces are ignored, as is a\n- *                 '0x' prefix for radix 16.\n+ *                 '0x' prefix for radix \\c 16.\n  *\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if the file read buffer\n+ *                 is too small.\n+ * \\return         Another negative error code on failure.\n  */\n int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin );\n \n /**\n- * \\brief          Write X into an opened file, or stdout if fout is NULL\n+ * \\brief          Export an MPI into an opened file.\n  *\n- * \\param p        Prefix, can be NULL\n- * \\param X        Source MPI\n- * \\param radix    Output numeric base\n- * \\param fout     Output file handle (can be NULL)\n+ * \\param p        A string prefix to emit prior to the MPI data.\n+ *                 For example, this might be a label, or \"0x\" when\n+ *                 printing in base 16. May be \\c NULL if no prefix\n+ *                 is needed.\n+ * \\param X        The source MPI. Must point to an initialized MPI.\n+ * \\param radix    The numeric base to be used in the emitted string.\n+ * \\param fout     The output file handle. May be \\c NULL, in which case\n+ *                 the output is written to `stdout`.\n  *\n- * \\return         0 if successful, or a MBEDTLS_ERR_MPI_XXX error code\n- *\n- * \\note           Set fout == NULL to print X on the console.\n+ * \\return         \\c 0 if successful.\n+ * \\return         A negative error code on failure.\n  */\n-int mbedtls_mpi_write_file( const char *p, const mbedtls_mpi *X, int radix, FILE *fout );\n+int mbedtls_mpi_write_file( const char *p, const mbedtls_mpi *X,\n+                            int radix, FILE *fout );\n #endif /* MBEDTLS_FS_IO */\n \n /**\n- * \\brief          Import X from unsigned binary data, big endian\n+ * \\brief          Import an MPI from unsigned big endian binary data.\n  *\n- * \\param X        Destination MPI\n- * \\param buf      Input buffer\n- * \\param buflen   Input buffer size\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param buf      The input buffer. Must be a readable buffer of length\n+ *                 \\p buflen Bytes.\n+ * \\param buflen   The length of the input buffer \\p p in Bytes.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n-int mbedtls_mpi_read_binary( mbedtls_mpi *X, const unsigned char *buf, size_t buflen );\n+int mbedtls_mpi_read_binary( mbedtls_mpi *X, const unsigned char *buf,\n+                             size_t buflen );\n \n /**\n- * \\brief          Export X into unsigned binary data, big endian.\n- *                 Always fills the whole buffer, which will start with zeros\n- *                 if the number is smaller.\n+ * \\brief          Export an MPI into unsigned big endian binary data\n+ *                 of fixed size.\n  *\n- * \\param X        Source MPI\n- * \\param buf      Output buffer\n- * \\param buflen   Output buffer size\n+ * \\param X        The source MPI. Must point to an initialized MPI.\n+ * \\param buf      The output buffer. Must be a writable buffer of length\n+ *                 \\p buflen Bytes.\n+ * \\param buflen   The size of the output buffer \\p buf in Bytes.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if buf isn't large enough\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if \\p buf isn't\n+ *                 large enoguh to hold the value of \\p X.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n-int mbedtls_mpi_write_binary( const mbedtls_mpi *X, unsigned char *buf, size_t buflen );\n+int mbedtls_mpi_write_binary( const mbedtls_mpi *X, unsigned char *buf,\n+                              size_t buflen );\n \n /**\n- * \\brief          Left-shift: X <<= count\n+ * \\brief          Perform a left-shift on an MPI: X <<= count\n  *\n- * \\param X        MPI to shift\n- * \\param count    Amount to shift\n+ * \\param X        The MPI to shift. Must point to an initialized MPI.\n+ * \\param count    The amount to shift, in bits.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count );\n \n /**\n- * \\brief          Right-shift: X >>= count\n+ * \\brief          Perform a right-shift on an MPI: X >>= count\n  *\n- * \\param X        MPI to shift\n- * \\param count    Amount to shift\n+ * \\param X        The MPI to shift. Must point to an initialized MPI.\n+ * \\param count    The amount to shift, in bits.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count );\n \n /**\n- * \\brief          Compare unsigned values\n+ * \\brief          Compare the absolute values of two MPIs.\n  *\n- * \\param X        Left-hand MPI\n- * \\param Y        Right-hand MPI\n+ * \\param X        The left-hand MPI. Must point to an initialized MPI.\n+ * \\param Y        The right-hand MPI. Must point to an initialized MPI.\n  *\n- * \\return         1 if |X| is greater than |Y|,\n- *                -1 if |X| is lesser  than |Y| or\n- *                 0 if |X| is equal to |Y|\n+ * \\return         \\c 1 if `|X|` is greater than `|Y|`.\n+ * \\return         \\c -1 if `|X|` is lesser than `|Y|`.\n+ * \\return         \\c 0 if `|X|` is equal than `|Y|`.\n  */\n int mbedtls_mpi_cmp_abs( const mbedtls_mpi *X, const mbedtls_mpi *Y );\n \n /**\n- * \\brief          Compare signed values\n+ * \\brief          Compare two MPIs.\n  *\n- * \\param X        Left-hand MPI\n- * \\param Y        Right-hand MPI\n+ * \\param X        The left-hand MPI. Must point to an initialized MPI.\n+ * \\param Y        The right-hand MPI. Must point to an initialized MPI.\n  *\n- * \\return         1 if X is greater than Y,\n- *                -1 if X is lesser  than Y or\n- *                 0 if X is equal to Y\n+ * \\return         \\c 1 if `X` is greater than `Y`.\n+ * \\return         \\c -1 if `X` is lesser than `Y`.\n+ * \\return         \\c 0 if `X` is equal than `Y`.\n  */\n int mbedtls_mpi_cmp_mpi( const mbedtls_mpi *X, const mbedtls_mpi *Y );\n \n /**\n- * \\brief          Compare signed values\n+ * \\brief          Compare an MPI with an integer.\n  *\n- * \\param X        Left-hand MPI\n- * \\param z        The integer value to compare to\n+ * \\param X        The left-hand MPI. Must point to an initialized MPI.\n+ * \\param z        The integer value to compare \\p X to.\n  *\n- * \\return         1 if X is greater than z,\n- *                -1 if X is lesser  than z or\n- *                 0 if X is equal to z\n+ * \\return         \\c 1 if `X` is greater than `z`.\n+ * \\return         \\c -1 if `X` is lesser than `z`.\n+ * \\return         \\c 0 if `X` is equal than `z`.\n  */\n int mbedtls_mpi_cmp_int( const mbedtls_mpi *X, mbedtls_mpi_sint z );\n \n /**\n- * \\brief          Unsigned addition: X = |A| + |B|\n+ * \\brief          Perform an unsigned addition of MPIs: X = |A| + |B|\n  *\n- * \\param X        Destination MPI\n- * \\param A        Left-hand MPI\n- * \\param B        Right-hand MPI\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param A        The first summand. Must point to an initialized MPI.\n+ * \\param B        The second summand. Must point to an initialized MPI.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n-int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B );\n+int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A,\n+                         const mbedtls_mpi *B );\n \n /**\n- * \\brief          Unsigned subtraction: X = |A| - |B|\n+ * \\brief          Perform an unsigned subtraction of MPIs: X = |A| - |B|\n+ *\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param A        The minuend. Must point to an initialized MPI.\n+ * \\param B        The subtrahend. Must point to an initialized MPI.\n  *\n- * \\param X        Destination MPI\n- * \\param A        Left-hand MPI\n- * \\param B        Right-hand MPI\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_NEGATIVE_VALUE if \\p B is greater than \\p A.\n+ * \\return         Another negative error code on different kinds of failure.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_NEGATIVE_VALUE if B is greater than A\n  */\n-int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B );\n+int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A,\n+                         const mbedtls_mpi *B );\n \n /**\n- * \\brief          Signed addition: X = A + B\n+ * \\brief          Perform a signed addition of MPIs: X = A + B\n  *\n- * \\param X        Destination MPI\n- * \\param A        Left-hand MPI\n- * \\param B        Right-hand MPI\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param A        The first summand. Must point to an initialized MPI.\n+ * \\param B        The second summand. Must point to an initialized MPI.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n-int mbedtls_mpi_add_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B );\n+int mbedtls_mpi_add_mpi( mbedtls_mpi *X, const mbedtls_mpi *A,\n+                         const mbedtls_mpi *B );\n \n /**\n- * \\brief          Signed subtraction: X = A - B\n+ * \\brief          Perform a signed subtraction of MPIs: X = A - B\n  *\n- * \\param X        Destination MPI\n- * \\param A        Left-hand MPI\n- * \\param B        Right-hand MPI\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param A        The minuend. Must point to an initialized MPI.\n+ * \\param B        The subtrahend. Must point to an initialized MPI.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n-int mbedtls_mpi_sub_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B );\n+int mbedtls_mpi_sub_mpi( mbedtls_mpi *X, const mbedtls_mpi *A,\n+                         const mbedtls_mpi *B );\n \n /**\n- * \\brief          Signed addition: X = A + b\n+ * \\brief          Perform a signed addition of an MPI and an integer: X = A + b\n  *\n- * \\param X        Destination MPI\n- * \\param A        Left-hand MPI\n- * \\param b        The integer value to add\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param A        The first summand. Must point to an initialized MPI.\n+ * \\param b        The second summand.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n-int mbedtls_mpi_add_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b );\n+int mbedtls_mpi_add_int( mbedtls_mpi *X, const mbedtls_mpi *A,\n+                         mbedtls_mpi_sint b );\n \n /**\n- * \\brief          Signed subtraction: X = A - b\n+ * \\brief          Perform a signed subtraction of an MPI and an integer:\n+ *                 X = A - b\n  *\n- * \\param X        Destination MPI\n- * \\param A        Left-hand MPI\n- * \\param b        The integer value to subtract\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param A        The minuend. Must point to an initialized MPI.\n+ * \\param B        The subtrahend.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n-int mbedtls_mpi_sub_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b );\n+int mbedtls_mpi_sub_int( mbedtls_mpi *X, const mbedtls_mpi *A,\n+                         mbedtls_mpi_sint b );\n \n /**\n- * \\brief          Baseline multiplication: X = A * B\n+ * \\brief          Perform a multiplication of two MPIs: X = A * B\n  *\n- * \\param X        Destination MPI\n- * \\param A        Left-hand MPI\n- * \\param B        Right-hand MPI\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param A        The first factor. Must point to an initialized MPI.\n+ * \\param B        The second factor. Must point to an initialized MPI.\n+ *\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n  */\n-int mbedtls_mpi_mul_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B );\n+int mbedtls_mpi_mul_mpi( mbedtls_mpi *X, const mbedtls_mpi *A,\n+                         const mbedtls_mpi *B );\n \n /**\n- * \\brief          Baseline multiplication: X = A * b\n+ * \\brief          Perform a multiplication of an MPI with an unsigned integer:\n+ *                 X = A * b\n  *\n- * \\param X        Destination MPI\n- * \\param A        Left-hand MPI\n- * \\param b        The unsigned integer value to multiply with\n+ * \\param X        The destination MPI. Must point to an initialized MPI.\n+ * \\param A        The first factor. Must point to an initialized MPI.\n+ * \\param b        The second factor.\n  *\n- * \\note           b is unsigned\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed.\n+ * \\return         Another negative error code on different kinds of failure.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed\n  */\n-int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint b );\n+int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A,\n+                         mbedtls_mpi_uint b );\n \n /**\n- * \\brief          Division by mbedtls_mpi: A = Q * B + R\n- *\n- * \\param Q        Destination MPI for the quotient\n- * \\param R        Destination MPI for the rest value\n- * \\param A        Left-hand MPI\n- * \\param B        Right-hand MPI\n+ * \\brief          Perform a division with remainder of two MPIs:\n+ *                 A = Q * B + R\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed,\n- *                 MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if B == 0\n+ * \\param Q        The destination MPI for the quotient.\n+ *                 May be \\c NULL is the value of the quotient is not needed.\n+ * \\param R        The destination MPI for the remainder value.\n+ *                 May be \\c NULL if the value of the remainder is not needed.\n+ * \\param A        The divident. Must point to an initialized MPi.\n+ * \\param B        The divisor. Must point to an initialized MPI.\n  *\n- * \\note           Either Q or R can be NULL.\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed.\n+ * \\return         #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if `B == 0`.\n+ * \\return         Another negative error code on different kinds of failure.\n  */\n-int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, const mbedtls_mpi *B );\n+int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A,\n+                         const mbedtls_mpi *B );\n \n /**\n- * \\brief          Division by int: A = Q * b + R\n+ * \\brief          Perform a division with remainder of an MPI by an integer:\n+ *                 A = Q * b + R\n  *\n- * \\param Q        Destination MPI for the quotient\n- * \\param R        Destination MPI for the rest value\n- * \\param A        Left-hand MPI\n- * \\param b        Integer to divide by\n+ * \\param Q        The destination MPI for the quotient.\n+ *                 May be \\c NULL is the value of the quotient is not needed.\n+ * \\param R        The destination MPI for the remainder value.\n+ *                 May be \\c NULL if the value of the remainder is not needed.\n+ * \\param A        The divident. Must point to an initialized MPi.\n+ * \\param b        The divisor.\n  *\n- * \\return         0 if successful,\n- *                 MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed,\n- *                 MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if b == 0\n- *\n- * \\note           Either Q or R can be NULL.\n+ * \\return         \\c 0 if successful.\n+ * \\return         #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed.\n+ * \\return         #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if `b == 0`.\n+ * \\return         Another negative error code on different kinds of failure.","path":"include/mbedtls/bignum.h","position":754,"original_position":751,"commit_id":"86b315b5cd0817bda7b72957cfbfd833303117ed","original_commit_id":"d760583afc239c5aa18e6a886d828d6e808c782d","user":{"login":"hanno-arm","id":26892988,"node_id":"MDQ6VXNlcjI2ODkyOTg4","avatar_url":"https://avatars1.githubusercontent.com/u/26892988?v=4","gravatar_id":"","url":"https://api.github.com/users/hanno-arm","html_url":"https://github.com/hanno-arm","followers_url":"https://api.github.com/users/hanno-arm/followers","following_url":"https://api.github.com/users/hanno-arm/following{/other_user}","gists_url":"https://api.github.com/users/hanno-arm/gists{/gist_id}","starred_url":"https://api.github.com/users/hanno-arm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hanno-arm/subscriptions","organizations_url":"https://api.github.com/users/hanno-arm/orgs","repos_url":"https://api.github.com/users/hanno-arm/repos","events_url":"https://api.github.com/users/hanno-arm/events{/privacy}","received_events_url":"https://api.github.com/users/hanno-arm/received_events","type":"User","site_admin":false},"body":"As above.","created_at":"2018-12-13T14:08:28Z","updated_at":"2018-12-13T14:08:29Z","html_url":"https://github.com/ARMmbed/mbedtls/pull/2274#discussion_r241411758","pull_request_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/2274","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/comments/241411758"},"html":{"href":"https://github.com/ARMmbed/mbedtls/pull/2274#discussion_r241411758"},"pull_request":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/2274"}},"in_reply_to_id":241070899},"pull_request":{"url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/2274","id":237699884,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM3Njk5ODg0","html_url":"https://github.com/ARMmbed/mbedtls/pull/2274","diff_url":"https://github.com/ARMmbed/mbedtls/pull/2274.diff","patch_url":"https://github.com/ARMmbed/mbedtls/pull/2274.patch","issue_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues/2274","number":2274,"state":"open","locked":false,"title":"Add parameter validation for bignum module","user":{"login":"hanno-arm","id":26892988,"node_id":"MDQ6VXNlcjI2ODkyOTg4","avatar_url":"https://avatars1.githubusercontent.com/u/26892988?v=4","gravatar_id":"","url":"https://api.github.com/users/hanno-arm","html_url":"https://github.com/hanno-arm","followers_url":"https://api.github.com/users/hanno-arm/followers","following_url":"https://api.github.com/users/hanno-arm/following{/other_user}","gists_url":"https://api.github.com/users/hanno-arm/gists{/gist_id}","starred_url":"https://api.github.com/users/hanno-arm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hanno-arm/subscriptions","organizations_url":"https://api.github.com/users/hanno-arm/orgs","repos_url":"https://api.github.com/users/hanno-arm/repos","events_url":"https://api.github.com/users/hanno-arm/events{/privacy}","received_events_url":"https://api.github.com/users/hanno-arm/received_events","type":"User","site_admin":false},"body":"__Summary:__ Based on #1643, this PR adds parameter validation to the bignum module.","created_at":"2018-12-11T14:30:09Z","updated_at":"2018-12-13T14:08:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e61c2d860b8186c9da48e441dea5c557bf2d641b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":937148743,"node_id":"MDU6TGFiZWw5MzcxNDg3NDM=","url":"https://api.github.com/repos/ARMmbed/mbedtls/labels/component:%20Crypto","name":"component: Crypto","color":"F5F6CE","default":false},{"id":19280386,"node_id":"MDU6TGFiZWwxOTI4MDM4Ng==","url":"https://api.github.com/repos/ARMmbed/mbedtls/labels/enhancement","name":"enhancement","color":"84b6eb","default":true},{"id":408190313,"node_id":"MDU6TGFiZWw0MDgxOTAzMTM=","url":"https://api.github.com/repos/ARMmbed/mbedtls/labels/mbed%20TLS%20team","name":"mbed TLS team","color":"66e0ff","default":false},{"id":1076631801,"node_id":"MDU6TGFiZWwxMDc2NjMxODAx","url":"https://api.github.com/repos/ARMmbed/mbedtls/labels/needs:%20preceding%20PR","name":"needs: preceding PR","color":"fbca04","default":false},{"id":705358813,"node_id":"MDU6TGFiZWw3MDUzNTg4MTM=","url":"https://api.github.com/repos/ARMmbed/mbedtls/labels/needs:%20review","name":"needs: review","color":"fbca04","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/2274/commits","review_comments_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/2274/comments","review_comment_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues/2274/comments","statuses_url":"https://api.github.com/repos/ARMmbed/mbedtls/statuses/86b315b5cd0817bda7b72957cfbfd833303117ed","head":{"label":"hanno-arm:parameter_validation_bignum","ref":"parameter_validation_bignum","sha":"86b315b5cd0817bda7b72957cfbfd833303117ed","user":{"login":"hanno-arm","id":26892988,"node_id":"MDQ6VXNlcjI2ODkyOTg4","avatar_url":"https://avatars1.githubusercontent.com/u/26892988?v=4","gravatar_id":"","url":"https://api.github.com/users/hanno-arm","html_url":"https://github.com/hanno-arm","followers_url":"https://api.github.com/users/hanno-arm/followers","following_url":"https://api.github.com/users/hanno-arm/following{/other_user}","gists_url":"https://api.github.com/users/hanno-arm/gists{/gist_id}","starred_url":"https://api.github.com/users/hanno-arm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hanno-arm/subscriptions","organizations_url":"https://api.github.com/users/hanno-arm/orgs","repos_url":"https://api.github.com/users/hanno-arm/repos","events_url":"https://api.github.com/users/hanno-arm/events{/privacy}","received_events_url":"https://api.github.com/users/hanno-arm/received_events","type":"User","site_admin":false},"repo":{"id":87815731,"node_id":"MDEwOlJlcG9zaXRvcnk4NzgxNTczMQ==","name":"mbedtls","full_name":"hanno-arm/mbedtls","private":false,"owner":{"login":"hanno-arm","id":26892988,"node_id":"MDQ6VXNlcjI2ODkyOTg4","avatar_url":"https://avatars1.githubusercontent.com/u/26892988?v=4","gravatar_id":"","url":"https://api.github.com/users/hanno-arm","html_url":"https://github.com/hanno-arm","followers_url":"https://api.github.com/users/hanno-arm/followers","following_url":"https://api.github.com/users/hanno-arm/following{/other_user}","gists_url":"https://api.github.com/users/hanno-arm/gists{/gist_id}","starred_url":"https://api.github.com/users/hanno-arm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hanno-arm/subscriptions","organizations_url":"https://api.github.com/users/hanno-arm/orgs","repos_url":"https://api.github.com/users/hanno-arm/repos","events_url":"https://api.github.com/users/hanno-arm/events{/privacy}","received_events_url":"https://api.github.com/users/hanno-arm/received_events","type":"User","site_admin":false},"html_url":"https://github.com/hanno-arm/mbedtls","description":"An open source, portable, easy to use, readable and flexible SSL library","fork":true,"url":"https://api.github.com/repos/hanno-arm/mbedtls","forks_url":"https://api.github.com/repos/hanno-arm/mbedtls/forks","keys_url":"https://api.github.com/repos/hanno-arm/mbedtls/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hanno-arm/mbedtls/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hanno-arm/mbedtls/teams","hooks_url":"https://api.github.com/repos/hanno-arm/mbedtls/hooks","issue_events_url":"https://api.github.com/repos/hanno-arm/mbedtls/issues/events{/number}","events_url":"https://api.github.com/repos/hanno-arm/mbedtls/events","assignees_url":"https://api.github.com/repos/hanno-arm/mbedtls/assignees{/user}","branches_url":"https://api.github.com/repos/hanno-arm/mbedtls/branches{/branch}","tags_url":"https://api.github.com/repos/hanno-arm/mbedtls/tags","blobs_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/refs{/sha}","trees_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hanno-arm/mbedtls/statuses/{sha}","languages_url":"https://api.github.com/repos/hanno-arm/mbedtls/languages","stargazers_url":"https://api.github.com/repos/hanno-arm/mbedtls/stargazers","contributors_url":"https://api.github.com/repos/hanno-arm/mbedtls/contributors","subscribers_url":"https://api.github.com/repos/hanno-arm/mbedtls/subscribers","subscription_url":"https://api.github.com/repos/hanno-arm/mbedtls/subscription","commits_url":"https://api.github.com/repos/hanno-arm/mbedtls/commits{/sha}","git_commits_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/commits{/sha}","comments_url":"https://api.github.com/repos/hanno-arm/mbedtls/comments{/number}","issue_comment_url":"https://api.github.com/repos/hanno-arm/mbedtls/issues/comments{/number}","contents_url":"https://api.github.com/repos/hanno-arm/mbedtls/contents/{+path}","compare_url":"https://api.github.com/repos/hanno-arm/mbedtls/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hanno-arm/mbedtls/merges","archive_url":"https://api.github.com/repos/hanno-arm/mbedtls/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hanno-arm/mbedtls/downloads","issues_url":"https://api.github.com/repos/hanno-arm/mbedtls/issues{/number}","pulls_url":"https://api.github.com/repos/hanno-arm/mbedtls/pulls{/number}","milestones_url":"https://api.github.com/repos/hanno-arm/mbedtls/milestones{/number}","notifications_url":"https://api.github.com/repos/hanno-arm/mbedtls/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hanno-arm/mbedtls/labels{/name}","releases_url":"https://api.github.com/repos/hanno-arm/mbedtls/releases{/id}","deployments_url":"https://api.github.com/repos/hanno-arm/mbedtls/deployments","created_at":"2017-04-10T13:44:55Z","updated_at":"2017-04-10T13:45:00Z","pushed_at":"2018-12-13T10:04:38Z","git_url":"git://github.com/hanno-arm/mbedtls.git","ssh_url":"git@github.com:hanno-arm/mbedtls.git","clone_url":"https://github.com/hanno-arm/mbedtls.git","svn_url":"https://github.com/hanno-arm/mbedtls","homepage":"https://tls.mbed.org","size":34796,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"development"}},"base":{"label":"ARMmbed:development","ref":"development","sha":"01b34fb316a5d8c37244719be3f11ccf2ae85e41","user":{"login":"ARMmbed","id":8916057,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg5MTYwNTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8916057?v=4","gravatar_id":"","url":"https://api.github.com/users/ARMmbed","html_url":"https://github.com/ARMmbed","followers_url":"https://api.github.com/users/ARMmbed/followers","following_url":"https://api.github.com/users/ARMmbed/following{/other_user}","gists_url":"https://api.github.com/users/ARMmbed/gists{/gist_id}","starred_url":"https://api.github.com/users/ARMmbed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ARMmbed/subscriptions","organizations_url":"https://api.github.com/users/ARMmbed/orgs","repos_url":"https://api.github.com/users/ARMmbed/repos","events_url":"https://api.github.com/users/ARMmbed/events{/privacy}","received_events_url":"https://api.github.com/users/ARMmbed/received_events","type":"Organization","site_admin":false},"repo":{"id":6687936,"node_id":"MDEwOlJlcG9zaXRvcnk2Njg3OTM2","name":"mbedtls","full_name":"ARMmbed/mbedtls","private":false,"owner":{"login":"ARMmbed","id":8916057,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg5MTYwNTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8916057?v=4","gravatar_id":"","url":"https://api.github.com/users/ARMmbed","html_url":"https://github.com/ARMmbed","followers_url":"https://api.github.com/users/ARMmbed/followers","following_url":"https://api.github.com/users/ARMmbed/following{/other_user}","gists_url":"https://api.github.com/users/ARMmbed/gists{/gist_id}","starred_url":"https://api.github.com/users/ARMmbed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ARMmbed/subscriptions","organizations_url":"https://api.github.com/users/ARMmbed/orgs","repos_url":"https://api.github.com/users/ARMmbed/repos","events_url":"https://api.github.com/users/ARMmbed/events{/privacy}","received_events_url":"https://api.github.com/users/ARMmbed/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/ARMmbed/mbedtls","description":"An open source, portable, easy to use, readable and flexible SSL library","fork":false,"url":"https://api.github.com/repos/ARMmbed/mbedtls","forks_url":"https://api.github.com/repos/ARMmbed/mbedtls/forks","keys_url":"https://api.github.com/repos/ARMmbed/mbedtls/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ARMmbed/mbedtls/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ARMmbed/mbedtls/teams","hooks_url":"https://api.github.com/repos/ARMmbed/mbedtls/hooks","issue_events_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues/events{/number}","events_url":"https://api.github.com/repos/ARMmbed/mbedtls/events","assignees_url":"https://api.github.com/repos/ARMmbed/mbedtls/assignees{/user}","branches_url":"https://api.github.com/repos/ARMmbed/mbedtls/branches{/branch}","tags_url":"https://api.github.com/repos/ARMmbed/mbedtls/tags","blobs_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/refs{/sha}","trees_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ARMmbed/mbedtls/statuses/{sha}","languages_url":"https://api.github.com/repos/ARMmbed/mbedtls/languages","stargazers_url":"https://api.github.com/repos/ARMmbed/mbedtls/stargazers","contributors_url":"https://api.github.com/repos/ARMmbed/mbedtls/contributors","subscribers_url":"https://api.github.com/repos/ARMmbed/mbedtls/subscribers","subscription_url":"https://api.github.com/repos/ARMmbed/mbedtls/subscription","commits_url":"https://api.github.com/repos/ARMmbed/mbedtls/commits{/sha}","git_commits_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/commits{/sha}","comments_url":"https://api.github.com/repos/ARMmbed/mbedtls/comments{/number}","issue_comment_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues/comments{/number}","contents_url":"https://api.github.com/repos/ARMmbed/mbedtls/contents/{+path}","compare_url":"https://api.github.com/repos/ARMmbed/mbedtls/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ARMmbed/mbedtls/merges","archive_url":"https://api.github.com/repos/ARMmbed/mbedtls/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ARMmbed/mbedtls/downloads","issues_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues{/number}","pulls_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls{/number}","milestones_url":"https://api.github.com/repos/ARMmbed/mbedtls/milestones{/number}","notifications_url":"https://api.github.com/repos/ARMmbed/mbedtls/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ARMmbed/mbedtls/labels{/name}","releases_url":"https://api.github.com/repos/ARMmbed/mbedtls/releases{/id}","deployments_url":"https://api.github.com/repos/ARMmbed/mbedtls/deployments","created_at":"2012-11-14T13:13:13Z","updated_at":"2018-12-13T07:04:01Z","pushed_at":"2018-12-13T13:50:33Z","git_url":"git://github.com/ARMmbed/mbedtls.git","ssh_url":"git@github.com:ARMmbed/mbedtls.git","clone_url":"https://github.com/ARMmbed/mbedtls.git","svn_url":"https://github.com/ARMmbed/mbedtls","homepage":"https://tls.mbed.org","size":32598,"stargazers_count":1688,"watchers_count":1688,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":989,"mirror_url":null,"archived":false,"open_issues_count":589,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":989,"open_issues":589,"watchers":1688,"default_branch":"development"}},"_links":{"self":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/2274"},"html":{"href":"https://github.com/ARMmbed/mbedtls/pull/2274"},"issue":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/issues/2274"},"comments":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/issues/2274/comments"},"review_comments":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/2274/comments"},"review_comment":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/2274/commits"},"statuses":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/statuses/86b315b5cd0817bda7b72957cfbfd833303117ed"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"hanno-arm"}}