Beispiel #1
0
        public static SecureBoolean operator ==(SecureWord left, SecureWord right)
        {
            if (left.Builder != right.Builder)
            {
                throw new ArgumentException("Secure words must use the same circuit builder for constructing gates.");
            }

            CircuitBuilder builder = right.Builder;

            if (left.Length != right.Length)
            {
                return(SecureBoolean.False(builder));
            }

            Wire result = left.Wires
                          .Zip(right.Wires, (leftWire, rightWire) => builder.Not(builder.Xor(leftWire, rightWire)))
                          .ToArray()
                          .AggregateDepthEfficient((x, y) => builder.And(x, y));

            return(new SecureBoolean(right.Builder, result));
        }