openssl: Add helper function to convert BIGNUMs to chunks

This commit is contained in:
Tobias Brunner
2013-09-13 15:23:49 +02:00
parent a3232fa802
commit b5cc7053c8
2 changed files with 27 additions and 0 deletions
@@ -123,6 +123,24 @@ bool openssl_bn_split(chunk_t chunk, BIGNUM *a, BIGNUM *b)
return TRUE;
}
/**
* Described in header.
*/
bool openssl_bn2chunk(BIGNUM *bn, chunk_t *chunk)
{
*chunk = chunk_alloc(BN_num_bytes(bn));
if (BN_bn2bin(bn, chunk->ptr) == chunk->len)
{
if (chunk->len && chunk->ptr[0] & 0x80)
{ /* if MSB is set, prepend a zero to make it non-negative */
*chunk = chunk_cat("cm", chunk_from_chars(0x00), *chunk);
}
return TRUE;
}
chunk_free(chunk);
return FALSE;
}
/**
* Described in header.
*/
@@ -66,6 +66,15 @@ bool openssl_bn_cat(int len, BIGNUM *a, BIGNUM *b, chunk_t *chunk);
*/
bool openssl_bn_split(chunk_t chunk, BIGNUM *a, BIGNUM *b);
/**
* Exports the given bignum (assumed to be a positive number) to a chunk in
* two's complement format (i.e. a zero byte is added if the MSB is set).
*
* @param bn the BIGNUM to export
* @param chunk the chunk (data gets allocated)
* @return TRUE on success, FALSE otherwise
*/
bool openssl_bn2chunk(BIGNUM *bn, chunk_t *chunk);
/**
* Allocate a chunk using the i2d function of a given object