summaryrefslogtreecommitdiff
path: root/rsa/common.py
blob: 7c852b60460bd0a16f79bf5a8fd90d7c2c4caf20 (plain)
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
'''Common functionality shared by several modules.'''

import math

def bit_size(number):
    '''Returns the number of bits required to hold a specific long number.

    >>> bit_size(1023)
    10
    >>> bit_size(1024)
    10
    >>> bit_size(1025)
    11

    '''

    if number < 0:
        raise ValueError('Only nonnegative numbers possible: %s' % number)

    if number == 0:
        return 1
    
    return int(math.ceil(math.log(number, 2)))

def byte_size(number):
    """Returns the number of bytes required to hold a specific long number.
    
    The number of bytes is rounded up.
    """

    return int(math.ceil(bit_size(number) / 8.0))