B Ðñ¢dJã@s¸dZddlZGdd„deƒZeedœdd„Zeedœd d „Zeeed œd d „Zeeejeeefdœdd„Z eeedœdd„Z ej eej eedœdd„Z e dkr´ddlZe ¡dS)z/Common functionality shared by several modules.éNcs,eZdZdeeeeddœ‡fdd„ Z‡ZS)ÚNotRelativePrimeErrorÚN)ÚaÚbÚdÚmsgÚreturncs0tƒ |pd|||f¡||_||_||_dS)Nz.%d and %d are not relatively prime, divider=%i)ÚsuperÚ__init__rrr)Úselfrrrr)Ú __class__©ú1/tmp/pip-target-jj3kjtpb/lib/python/rsa/common.pyr szNotRelativePrimeError.__init__)r)Ú__name__Ú __module__Ú __qualname__ÚintÚstrr Ú __classcell__r r )r rrsr)Únumrc CsBy| ¡Stk r<}ztdt|ƒƒ|‚Wdd}~XYnXdS)a÷ Number of bits needed to represent a integer excluding any prefix 0 bits. Usage:: >>> bit_size(1023) 10 >>> bit_size(1024) 11 >>> bit_size(1025) 11 :param num: Integer value. If num is 0, returns 0. Only the absolute value of the number is considered. Therefore, signed integers will be abs(num) before the number's bit length is determined. :returns: Returns the number of bits in the integer. z,bit_size(num) only supports integers, not %rN)Ú bit_lengthÚAttributeErrorÚ TypeErrorÚtype)rÚexr r rÚbit_sizesr)ÚnumberrcCs|dkr dStt|ƒdƒS)a” Returns the number of bytes required to hold a specific long number. The number of bytes is rounded up. Usage:: >>> byte_size(1 << 1023) 128 >>> byte_size((1 << 1024) - 1) 128 >>> byte_size(1 << 1024) 129 :param number: An unsigned integer :returns: The number of bytes required to hold a specific long number. réé)Úceil_divr)rr r rÚ byte_size8sr )rÚdivrcCst||ƒ\}}|r|d7}|S)av Returns the ceiling function of a division between `num` and `div`. Usage:: >>> ceil_div(100, 7) 15 >>> ceil_div(100, 10) 10 >>> ceil_div(1, 4) 1 :param num: Division's numerator, a number :param div: Division's divisor, a number :return: Rounded up result of the division between the parameters. r)Údivmod)rr!ÚquantaÚmodr r rrQsr)rrrc CsŠd}d}d}d}|}|}xF|dkr^||}|||}}||||}}||||}}qW|dkrp||7}|dkr€||7}|||fS)z@Returns a tuple (r, i, j) such that r = gcd(a, b) = ia + jb rrr ) rrÚxÚyÚlxZlyZoaÚobÚqr r rÚ extended_gcdis  r*)r%ÚnrcCs(t||ƒ\}}}|dkr$t|||ƒ‚|S)z‘Returns the inverse of x % n under multiplication, a.k.a x^-1 (mod n) >>> inverse(7, 4) 3 >>> (inverse(143, 4) * 143) % 4 1 r)r*r)r%r+ÚdividerÚinvÚ_r r rÚinverse‚s  r/)Úa_valuesÚ modulo_valuesrc Cs`d}d}x|D] }||9}qWx>> crt([2, 3], [3, 5]) 8 >>> crt([2, 3, 2], [3, 5, 7]) 23 >>> crt([2, 3, 0], [7, 11, 15]) 135 rr)Úzipr/) r0r1Úmr%ZmoduloZm_iZa_iZM_ir-r r rÚcrt“s   r4Ú__main__)Ú__doc__ÚtypingÚ ValueErrorrrrr rÚTupler*r/ÚIterabler4rÚdoctestÚtestmodr r r rÚs#