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); }); }
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; } } }
protected override void Dispose(bool disposing) { if (disposing) { _impl.Dispose(); } base.Dispose(disposing); }
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; } }
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; } }
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); }); }
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; } }