openssl: Add helper function to convert BIGNUMs to chunks
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user