Example #1
0
        private void UseAfterDispose(bool importKey)
        {
            DSA key = importKey ? DSAFactory.Create(DSATestData.GetDSA1024Params()) : DSAFactory.Create(512);

            byte[] data = { 1 };
            byte[] sig;

            // Ensure the key is populated, then dispose it.
            using (key)
            {
                sig = SignData(key, data, HashAlgorithmName.SHA1);
            }

            key.Dispose();

            UseAfterDispose(key, data, sig);

            Assert.Throws <ObjectDisposedException>(() => key.ImportParameters(DSATestData.GetDSA1024Params()));

            // Either set_KeySize or SignData should throw.
            Assert.Throws <ObjectDisposedException>(
                () =>
            {
                key.KeySize = 576;
                SignData(key, data, HashAlgorithmName.SHA1);
            });
        }
Example #2
0
            private static AsymmetricAlgorithm DecodeDsaPublicKey(byte[] encodedKeyValue, byte[] encodedParameters)
            {
                SubjectPublicKeyInfoAsn spki = new SubjectPublicKeyInfoAsn
                {
                    Algorithm = new AlgorithmIdentifierAsn {
                        Algorithm = new Oid(Oids.Dsa, null), Parameters = encodedParameters
                    },
                    SubjectPublicKey = encodedKeyValue,
                };

                using (AsnWriter writer = new AsnWriter(AsnEncodingRules.DER))
                {
                    spki.Encode(writer);
                    DSA dsa = DSA.Create();
                    try
                    {
                        dsa.ImportSubjectPublicKeyInfo(writer.EncodeAsSpan(), out _);
                        return(dsa);
                    }
                    catch (Exception)
                    {
                        dsa.Dispose();
                        throw;
                    }
                }
            }
Example #3
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                _impl.Dispose();
            }

            base.Dispose(disposing);
        }
Example #4
0
            private static AsymmetricAlgorithm DecodeDsaPublicKey(byte[] encodedKeyValue, byte[] encodedParameters)
            {
                DSAParameters     dsaParameters   = new DSAParameters();
                DerSequenceReader parameterReader = new DerSequenceReader(encodedParameters);

                parameterReader.ReadSubjectPublicKeyInfo(encodedKeyValue, ref dsaParameters);

                DSA dsa = DSA.Create();

                try
                {
                    dsa.ImportParameters(dsaParameters);
                    return(dsa);
                }
                catch (Exception)
                {
                    dsa.Dispose();
                    throw;
                }
            }
Example #5
0
        public DSA?GetDSAPublicKey()
        {
            if (_oid.Value != Oids.Dsa)
            {
                return(null);
            }

            DSA dsa = DSA.Create();

            try
            {
                dsa.ImportSubjectPublicKeyInfo(ExportSubjectPublicKeyInfo(), out _);
                return(dsa);
            }
            catch
            {
                dsa.Dispose();
                throw;
            }
        }
Example #6
0
        private void UseAfterDispose(bool importKey)
        {
            DSA key = importKey ? DSAFactory.Create(DSATestData.GetDSA1024Params()) : DSAFactory.Create(1024);

            byte[] data = { 1 };
            byte[] sig;

            // Ensure the key is populated, then dispose it.
            using (key)
            {
                sig = SignData(key, data, HashAlgorithmName.SHA1);
            }

            key.Dispose();

            UseAfterDispose(key, data, sig);

            Assert.Throws <ObjectDisposedException>(() => key.ImportParameters(DSATestData.GetDSA1024Params()));

            // Either set_KeySize or SignData should throw.
            Assert.Throws <ObjectDisposedException>(
                () =>
            {
                try
                {
                    key.KeySize = 576;
                }
                catch (CryptographicException)
                {
                    // DSACryptoServiceProvider on Android only supports 1024 and does an early check for legal
                    // key sizes, since it is more restrictive than the wrapped implementation. It will throw
                    // CryptographicException. SignData should still throw ObjectDisposedException.
                    if (!PlatformDetection.IsAndroid)
                    {
                        throw;
                    }
                }

                SignData(key, data, HashAlgorithmName.SHA1);
            });
        }
Example #7
0
            private static AsymmetricAlgorithm DecodeDsaPublicKey(byte[] encodedKeyValue, byte[] encodedParameters)
            {
                DSAKeyFormatHelper.ReadDsaPublicKey(
                    encodedKeyValue,
                    new AlgorithmIdentifierAsn {
                    Parameters = encodedParameters
                },
                    out DSAParameters dsaParameters);

                DSA dsa = DSA.Create();

                try
                {
                    dsa.ImportParameters(dsaParameters);
                    return(dsa);
                }
                catch (Exception)
                {
                    dsa.Dispose();
                    throw;
                }
            }