Hi,

I would like to ask you, how I should work with large numbers. I need to generate number bigger than 2^160 a work with it bit by bit and then hash it. I searched for some information but I’ve found only main data types and data structures. Is there any structure or data type to represent such a large number and work with it?

Thanks

# Reprezentation of large numbers in cryptographical application

**majzlik**#1

`BigInt`

is probably what you need:

**majzlik**#3

I’m trying to create number 2^160 using:

```
BigInt(2^160) => result 0
```

but I’m still limited by size of Int -> 2^64 = 0, so I got result 0 for BigInt also. Everything alse works fine, I can sum or multiply number which cross that 2^64 border.

```
BigInt(2^62) ^ 2 => works
BigInt(2^124) => does not work
```

Did I miss anything?

**Paethon**#4

The problem with this is, that 2^160 would have to be an Int before it is converted to a BigInt (which obviously does not work). So you can e.g. write big(2)^big(160)

**Keno**#5

Please note that `BigInt`

is in general not appropriate for production cryptographic implementations because the operations on it are not constant time, so you need to make sure not to expose side timing side channels.

**majzlik**#6

Is it only matter of time why it is not suitable? I’m working on elliptic curve generation according to this article:

1030_Buchmann

Then I’m gonna test a few algorithms to solve ECDLP, so I think that this issue is not connected to my work.

**Keno**#7

It’s just fine for doing cryptography research, all I wanted to point out is that writing secure implementations of real-world cryptographic protocols is more difficult than getting the math right, and BigInt is not suitable for that purpose.