private void CheckConstruction(
            LdsSecurityObject so,
            AlgorithmIdentifier digestAlgorithmIdentifier,
            DataGroupHash[]             datagroupHash)
        {
            CheckStatement(so, digestAlgorithmIdentifier, datagroupHash, null);

            so = LdsSecurityObject.GetInstance(so);

            CheckStatement(so, digestAlgorithmIdentifier, datagroupHash, null);

            Asn1Sequence seq = (Asn1Sequence)Asn1Object.FromByteArray(
                so.ToAsn1Object().GetEncoded());

            so = LdsSecurityObject.GetInstance(seq);

            CheckStatement(so, digestAlgorithmIdentifier, datagroupHash, null);
        }
        private void CheckConstruction(
            LdsSecurityObject so,
            AlgorithmIdentifier digestAlgorithmIdentifier,
            DataGroupHash[]         datagroupHash,
            LdsVersionInfo versionInfo)
        {
            if (!so.Version.Equals(BigInteger.One))
            {
                Fail("version number not 1");
            }

            CheckStatement(so, digestAlgorithmIdentifier, datagroupHash, versionInfo);

            so = LdsSecurityObject.GetInstance(so);

            CheckStatement(so, digestAlgorithmIdentifier, datagroupHash, versionInfo);

            Asn1Sequence seq = (Asn1Sequence)Asn1Object.FromByteArray(
                so.ToAsn1Object().GetEncoded());

            so = LdsSecurityObject.GetInstance(seq);

            CheckStatement(so, digestAlgorithmIdentifier, datagroupHash, versionInfo);
        }
        public override void PerformTest()
        {
            AlgorithmIdentifier algoId = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1);

            DataGroupHash[] datas = new DataGroupHash[2];

            datas[0] = new DataGroupHash(1, new DerOctetString(GenerateHash()));
            datas[1] = new DataGroupHash(2, new DerOctetString(GenerateHash()));

            LdsSecurityObject so = new LdsSecurityObject(algoId, datas);

            CheckConstruction(so, algoId, datas);

            LdsVersionInfo versionInfo = new LdsVersionInfo("Hello", "world");

            so = new LdsSecurityObject(algoId, datas, versionInfo);

            CheckConstruction(so, algoId, datas, versionInfo);

            try
            {
                LdsSecurityObject.GetInstance(null);
            }
            catch (Exception)
            {
                Fail("GetInstance() failed to handle null.");
            }

            try
            {
                LdsSecurityObject.GetInstance(new object());

                Fail("GetInstance() failed to detect bad object.");
            }
            catch (ArgumentException)
            {
                // expected
            }

            try
            {
                LdsSecurityObject.GetInstance(DerSequence.Empty);

                Fail("constructor failed to detect empty sequence.");
            }
            catch (ArgumentException)
            {
                // expected
            }

            try
            {
                new LdsSecurityObject(algoId, new DataGroupHash[1]);

                Fail("constructor failed to detect small DataGroupHash array.");
            }
            catch (ArgumentException)
            {
                // expected
            }

            try
            {
                new LdsSecurityObject(algoId, new DataGroupHash[LdsSecurityObject.UBDataGroups + 1]);

                Fail("constructor failed to out of bounds DataGroupHash array.");
            }
            catch (ArgumentException)
            {
                // expected
            }
        }