// loopSize is unknown.  door loopSize != card loopSize
        // Left public for unit tests
        public LoopResult FindLoopResults()
        {
            LoopResult result = new LoopResult();

            result.DoorLoopSize = FindLoopSize(_doorPublic);
            result.CardLoopSize = FindLoopSize(_cardPublic);

            return(result);
        }
        public long CrackEncryptionKey()
        {
            LoopResult loopResult        = FindLoopResults();
            long       cardEncryptionKey = TransformNumber(loopResult.CardLoopSize, _doorPublic);
            long       doorEncryptionKey = TransformNumber(loopResult.DoorLoopSize, _cardPublic);

            if (cardEncryptionKey != doorEncryptionKey)
            {
                throw new Exception("If done right, the calculated encryption keys should be the same.");
            }

            return(cardEncryptionKey);
        }