2 using System.Collections.Generic;
5 using System.Threading.Tasks;
7 using Org.BouncyCastle.Math;
12 /// Wrapper for bouncycastle's Biginteger class.
17 /// Internal coby of Biginteger object.
19 private BigInteger bn;
22 public BigNum(BigInteger bnValue)
27 public BigNum(byte[] dataBytes)
29 bn = new BigInteger(dataBytes);
32 public BigNum(ulong ulongValue)
34 bn = new BigInteger(BitConverter.GetBytes(ulongValue));
37 public BigNum(uint256 uint256Value)
39 bn = new BigInteger(uint256Value);
43 #region Basic arithmetics
44 public static BigNum operator +(BigNum a, ulong b)
46 var bnValueToAdd = new BigInteger(BitConverter.GetBytes(b));
47 return new BigNum(a.bn.Add(bnValueToAdd));
50 public static BigNum operator -(BigNum a, ulong b)
52 var bnValueToSubstract = new BigInteger(BitConverter.GetBytes(b));
53 return new BigNum(a.bn.Subtract(bnValueToSubstract));
56 public static BigNum operator +(BigNum a, uint256 b)
58 var bnValueToAdd = new BigInteger(b);
59 return new BigNum(a.bn.Add(bnValueToAdd));
62 public static BigNum operator -(BigNum a, uint256 b)
64 var bnValueToSubstract = new BigInteger(b);
65 return new BigNum(a.bn.Subtract(bnValueToSubstract));
68 public static BigNum operator +(BigNum a, BigNum b)
70 return new BigNum(a.bn.Add(b.bn));
73 public static BigNum operator -(BigNum a, BigNum b)
75 return new BigNum(a.bn.Subtract(b.bn));
78 public static BigNum operator /(BigNum a, ulong b)
80 var bnDivider = new BigInteger(BitConverter.GetBytes(b));
81 return new BigNum(a.bn.Divide(bnDivider));
84 public static BigNum operator /(BigNum a, uint256 b)
86 var bnDivider = new BigInteger(b);
87 return new BigNum(a.bn.Divide(bnDivider));
90 public static BigNum operator /(BigNum a, BigNum b)
92 return new BigNum(a.bn.Divide(b.bn));
95 public static BigNum operator *(BigNum a, ulong b)
97 var bnMultiplier = new BigInteger(BitConverter.GetBytes(b));
98 return new BigNum(a.bn.Multiply(bnMultiplier));
101 public static BigNum operator *(BigNum a, uint256 b)
103 var bnMultiplier = new BigInteger(b);
104 return new BigNum(a.bn.Multiply(bnMultiplier));
107 public static BigNum operator *(BigNum a, BigNum b)
109 return new BigNum(a.bn.Multiply(b.bn));
113 #region Cast operators
114 public static implicit operator BigNum(BigInteger bnValue)
116 return new BigNum(bnValue);
119 public static implicit operator BigNum(ulong ulongValue)
121 return new BigNum(ulongValue);
124 public static implicit operator BigNum(uint256 uint256Value)
126 return new BigNum(uint256Value);
129 public static implicit operator ulong (BigNum a)
131 return (ulong)a.bn.LongValue;