Example #1
0
 private static void DeserializeFrom(BinaryReader reader, out FiniteFieldPolynomial x, out FiniteFieldPolynomial y)
 {
     int x_i = (int)reader.ReadVarInt();
     int expectedByteCount = (int)reader.ReadVarInt();
     byte[] y_b = reader.ReadBytes(expectedByteCount);
     IrreduciblePolynomial irp = new IrreduciblePolynomial(expectedByteCount * 8);
     x = new FiniteFieldPolynomial(irp, x_i);
     y = new FiniteFieldPolynomial(irp, y_b.ToBigIntegerFromBigEndianUnsignedBytes());
 }
        private static void DeserializeFrom(BinaryReader reader, out FiniteFieldPolynomial x, out FiniteFieldPolynomial y)
        {
            int x_i = (int)reader.ReadVarInt(int.MaxValue);

            byte[] y_b = reader.ReadVarBytes();
            IrreduciblePolynomial irp = new IrreduciblePolynomial(y_b.Length * 8);

            x = new FiniteFieldPolynomial(irp, x_i);
            y = new FiniteFieldPolynomial(irp, y_b.ToBigIntegerFromBigEndianUnsignedBytes());
        }
        public FiniteFieldPolynomial(IrreduciblePolynomial primePolynomial, params int[] setCoefficients)
        {
            _PrimePolynomial = primePolynomial;

            _PolynomialSetCoefficients = BigInteger.Zero;
            for (int i = 0; i < setCoefficients.Length; i++)
            {
                _PolynomialSetCoefficients = _PolynomialSetCoefficients.SetBit(setCoefficients[i]);
            }
        }
Example #4
0
        public FiniteFieldPolynomial(IrreduciblePolynomial primePolynomial, params int[] setCoefficients)
        {
            _PrimePolynomial = primePolynomial;

            _PolynomialSetCoefficients = BigInteger.Zero;
            for (int i = 0; i < setCoefficients.Length; i++)
            {
                _PolynomialSetCoefficients = _PolynomialSetCoefficients.SetBit(setCoefficients[i]);
            }
        }
Example #5
0
        private static IEnumerable<FiniteFieldPolynomial> GetRandomPolynomials(IrreduciblePolynomial irreduciblePolynomial, int total)
        {
            var rng = RandomNumberGenerator.Create();

            for (int i = 0; i < total; i++)
            {
                var randomCoefficientBytes = new byte[irreduciblePolynomial.SizeInBytes];
                rng.GetBytes(randomCoefficientBytes);
                yield return new FiniteFieldPolynomial(irreduciblePolynomial, randomCoefficientBytes.ToBigIntegerFromLittleEndianUnsignedBytes());
            }
        }
Example #6
0
        private static void DeserializeFrom(BinaryReader reader, out FiniteFieldPolynomial x, out FiniteFieldPolynomial y)
        {
            int x_i = (int)reader.ReadVarInt();
            int expectedByteCount = (int)reader.ReadVarInt();

            byte[] y_b = reader.ReadBytes(expectedByteCount);
            IrreduciblePolynomial irp = new IrreduciblePolynomial(expectedByteCount * 8);

            x = new FiniteFieldPolynomial(irp, x_i);
            y = new FiniteFieldPolynomial(irp, y_b.ToBigIntegerFromBigEndianUnsignedBytes());
        }
Example #7
0
        public static bool TryParse(string s, out FiniteFieldPoint result)
        {
            var match = Regex.Match(s, @"(?<x>[0-9]+)-(?<y>[0-9a-fA-F]+)");

            if (!match.Success)
            {
                result = null;
                return false;
            }

            try
            {
                var xString = match.Groups["x"].Value.ToLowerInvariant();
                var yString = match.Groups["y"].Value.ToLowerInvariant();

                // Each hex letter makes up 4 bits, so to get the degree in bits
                // we multiply by 4

                int polynomialDegree = yString.Length * 4;

                var irp = new IrreduciblePolynomial(polynomialDegree);

                var x = new FiniteFieldPolynomial(irp, BigInteger.Parse(xString));

                // get bytes
                var bigEndianBytes = new byte[yString.Length / 2];
                for (int i = 0; i < yString.Length; i += 2)
                {
                    bigEndianBytes[i / 2] = Byte.Parse(yString.Substring(i, 2), NumberStyles.HexNumber);
                }
                var y = new FiniteFieldPolynomial(irp, bigEndianBytes.ToBigIntegerFromBigEndianUnsignedBytes());

                result = new FiniteFieldPoint(x, y);
                return true;
            }
            catch
            {
                result = null;
                return false;
            }
        }
        public static bool TryParse(string s, out FiniteFieldPoint result)
        {
            var match = Regex.Match(s, @"(?<x>[0-9]+)-(?<y>[0-9a-fA-F]+)");

            if (!match.Success)
            {
                result = null;
                return(false);
            }

            try
            {
                var xString = match.Groups["x"].Value.ToLowerInvariant();
                var yString = match.Groups["y"].Value.ToLowerInvariant();

                // Each hex letter makes up 4 bits, so to get the degree in bits
                // we multiply by 4

                int polynomialDegree = yString.Length * 4;

                var irp = new IrreduciblePolynomial(polynomialDegree);

                var x = new FiniteFieldPolynomial(irp, BigInteger.Parse(xString));

                // get bytes
                var bigEndianBytes = new byte[yString.Length / 2];
                for (int i = 0; i < yString.Length; i += 2)
                {
                    bigEndianBytes[i / 2] = Byte.Parse(yString.Substring(i, 2), NumberStyles.HexNumber);
                }
                var y = new FiniteFieldPolynomial(irp, bigEndianBytes.ToBigIntegerFromBigEndianUnsignedBytes());

                result = new FiniteFieldPoint(x, y);
                return(true);
            }
            catch
            {
                result = null;
                return(false);
            }
        }
Example #9
0
 public void Deserialize(BinaryReader reader)
 {
     int x = (int)reader.ReadVarInt();
     int expectedByteCount = (int)reader.ReadVarInt();
     byte[] y = reader.ReadBytes(expectedByteCount);
     IrreduciblePolynomial irp = new IrreduciblePolynomial(expectedByteCount * 8);
     this.X = new FiniteFieldPolynomial(irp, x);
     this.Y = new FiniteFieldPolynomial(irp, y.ToBigIntegerFromBigEndianUnsignedBytes());
 }
 public FiniteFieldPolynomial(IrreduciblePolynomial primePolynomial, BigInteger polynomial)
 {
     _PrimePolynomial = primePolynomial;
     _PolynomialSetCoefficients = polynomial;
 }
Example #11
0
 public FiniteFieldPolynomial(IrreduciblePolynomial primePolynomial, BigInteger polynomial)
 {
     _PrimePolynomial           = primePolynomial;
     _PolynomialSetCoefficients = polynomial;
 }
Example #12
0
 public SplitSecret(int threshold, IrreduciblePolynomial irreduciblePolynomial, FiniteFieldPolynomial[] allCoefficients)
 {
     Threshold = threshold;
     _IrreduciblePolynomial = irreduciblePolynomial;
     _AllCoefficients = allCoefficients;
 }