예제 #1
0
        public GroupElement(GE groupElement)
        {
            if (groupElement.IsInfinity)
            {
                LazyGe = new Lazy <GE>(() => GE.Infinity);
            }
            else
            {
                Guard.True($"{nameof(groupElement)}.{nameof(groupElement.IsValidVariable)}", groupElement.IsValidVariable);
                LazyGe = new Lazy <GE>(() => new GE(groupElement.x.Normalize(), groupElement.y.Normalize()));
            }

            Gej = Ge.ToGroupElementJacobian();             // eagerly initialize Ge property
        }
예제 #2
0
        // Since GEJ.IsValidVariable, this constructor is private
        private GroupElement(GEJ groupElementJacobian)
        {
            if (groupElementJacobian.IsInfinity)
            {
                LazyGe = new Lazy <GE>(() => GE.Infinity);
                Gej    = Ge.ToGroupElementJacobian();              // eagerly initialize Ge property
            }
            else
            {
                GE ComputeAffineCoordinates()
                {
                    var groupElement = groupElementJacobian.ToGroupElement();

                    return(new GE(groupElement.x.Normalize(), groupElement.y.Normalize()));
                }

                LazyGe = new Lazy <GE>(ComputeAffineCoordinates);                // avoid computing affine coordinates until needed
                Gej    = groupElementJacobian;
            }
        }