diff options
Diffstat (limited to 'crypto/src/openpgp')
-rw-r--r-- | crypto/src/openpgp/IStreamGenerator.cs | 4 | ||||
-rw-r--r-- | crypto/src/openpgp/PgpCompressedDataGenerator.cs | 45 | ||||
-rw-r--r-- | crypto/src/openpgp/PgpEncryptedDataGenerator.cs | 83 | ||||
-rw-r--r-- | crypto/src/openpgp/PgpLiteralDataGenerator.cs | 34 | ||||
-rw-r--r-- | crypto/src/openpgp/PgpUtilities.cs | 4 | ||||
-rw-r--r-- | crypto/src/openpgp/WrappedGeneratorStream.cs | 11 |
6 files changed, 100 insertions, 81 deletions
diff --git a/crypto/src/openpgp/IStreamGenerator.cs b/crypto/src/openpgp/IStreamGenerator.cs index 379213a66..df8ff75da 100644 --- a/crypto/src/openpgp/IStreamGenerator.cs +++ b/crypto/src/openpgp/IStreamGenerator.cs @@ -1,7 +1,9 @@ +using System; + namespace Org.BouncyCastle.Bcpg.OpenPgp { public interface IStreamGenerator + : IDisposable { - void Close(); } } diff --git a/crypto/src/openpgp/PgpCompressedDataGenerator.cs b/crypto/src/openpgp/PgpCompressedDataGenerator.cs index d13d7402b..271dfac7a 100644 --- a/crypto/src/openpgp/PgpCompressedDataGenerator.cs +++ b/crypto/src/openpgp/PgpCompressedDataGenerator.cs @@ -1,7 +1,6 @@ using System; using System.IO; -using Org.BouncyCastle.Utilities; using Org.BouncyCastle.Utilities.IO.Compression; using Org.BouncyCastle.Utilities.Zlib; @@ -149,21 +148,33 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp } } - /// <summary>Close the compressed object.</summary>summary> - public void Close() - { - if (dOut != null) - { - if (dOut != pkOut) - { - Platform.Dispose(dOut); - } - dOut = null; - - pkOut.Finish(); - pkOut.Flush(); - pkOut = null; - } - } + #region IDisposable + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (dOut != null) + { + if (dOut != pkOut) + { + dOut.Dispose(); + } + dOut = null; + + pkOut.Finish(); + pkOut.Flush(); + pkOut = null; + } + } + } + + #endregion } } diff --git a/crypto/src/openpgp/PgpEncryptedDataGenerator.cs b/crypto/src/openpgp/PgpEncryptedDataGenerator.cs index 69e0d5dbc..b9473a32c 100644 --- a/crypto/src/openpgp/PgpEncryptedDataGenerator.cs +++ b/crypto/src/openpgp/PgpEncryptedDataGenerator.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; -using Org.BouncyCastle.Asn1; + using Org.BouncyCastle.Asn1.Cryptlib; using Org.BouncyCastle.Asn1.EdEC; using Org.BouncyCastle.Crypto; @@ -600,52 +600,55 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp return Open(outStr, 0, buffer); } - /// <summary> - /// <p> - /// Close off the encrypted object - this is equivalent to calling Close() on the stream - /// returned by the Open() method. - /// </p> - /// <p> - /// <b>Note</b>: This does not close the underlying output stream, only the stream on top of - /// it created by the Open() method. - /// </p> - /// </summary> - public void Close() + #region IDisposable + + public void Dispose() { - if (cOut != null) + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) { - // TODO Should this all be under the try/catch block? - if (digestOut != null) + if (cOut != null) { - // - // hand code a mod detection packet - // - BcpgOutputStream bOut = new BcpgOutputStream( - digestOut, PacketTag.ModificationDetectionCode, 20); - - bOut.Flush(); - digestOut.Flush(); + // TODO Should this all be under the try/catch block? + if (digestOut != null) + { + // + // hand code a mod detection packet + // + BcpgOutputStream bOut = new BcpgOutputStream( + digestOut, PacketTag.ModificationDetectionCode, 20); + + bOut.Flush(); + digestOut.Flush(); + + // TODO + byte[] dig = DigestUtilities.DoFinal(digestOut.WriteDigest); + cOut.Write(dig, 0, dig.Length); + } - // TODO - byte[] dig = DigestUtilities.DoFinal(digestOut.WriteDigest); - cOut.Write(dig, 0, dig.Length); - } + cOut.Flush(); - cOut.Flush(); + try + { + pOut.Write(c.DoFinal()); + pOut.Finish(); + } + catch (Exception e) + { + throw new IOException(e.Message, e); + } - try - { - pOut.Write(c.DoFinal()); - pOut.Finish(); - } - catch (Exception e) - { - throw new IOException(e.Message, e); + cOut = null; + pOut = null; } - - cOut = null; - pOut = null; } - } + } + + #endregion } } diff --git a/crypto/src/openpgp/PgpLiteralDataGenerator.cs b/crypto/src/openpgp/PgpLiteralDataGenerator.cs index f9a9e7cad..fd59c1ebe 100644 --- a/crypto/src/openpgp/PgpLiteralDataGenerator.cs +++ b/crypto/src/openpgp/PgpLiteralDataGenerator.cs @@ -1,6 +1,5 @@ using System; using System.IO; -using System.Text; using Org.BouncyCastle.Utilities; using Org.BouncyCastle.Utilities.Date; @@ -163,18 +162,27 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp return Open(outStr, format, file.Name, file.Length, file.LastWriteTime); } - /// <summary> - /// Close the literal data packet - this is equivalent to calling Close() - /// on the stream returned by the Open() method. - /// </summary> - public void Close() + #region IDisposable + + public void Dispose() { - if (pkOut != null) - { - pkOut.Finish(); - pkOut.Flush(); - pkOut = null; - } - } + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (pkOut != null) + { + pkOut.Finish(); + pkOut.Flush(); + pkOut = null; + } + } + } + + #endregion } } diff --git a/crypto/src/openpgp/PgpUtilities.cs b/crypto/src/openpgp/PgpUtilities.cs index 65f011994..f400d36cc 100644 --- a/crypto/src/openpgp/PgpUtilities.cs +++ b/crypto/src/openpgp/PgpUtilities.cs @@ -449,8 +449,8 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp { Array.Clear(buf, 0, buf.Length); - Platform.Dispose(pOut); - Platform.Dispose(inputStream); + pOut.Dispose(); + inputStream.Dispose(); } } diff --git a/crypto/src/openpgp/WrappedGeneratorStream.cs b/crypto/src/openpgp/WrappedGeneratorStream.cs index 6f96dc9b8..c985a7a05 100644 --- a/crypto/src/openpgp/WrappedGeneratorStream.cs +++ b/crypto/src/openpgp/WrappedGeneratorStream.cs @@ -8,7 +8,7 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp internal sealed class WrappedGeneratorStream : FilterStream { - private IStreamGenerator m_generator; + private readonly IStreamGenerator m_generator; internal WrappedGeneratorStream(IStreamGenerator generator, Stream s) : base(s) @@ -18,14 +18,9 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp protected override void Dispose(bool disposing) { - if (m_generator != null) + if (disposing) { - if (disposing) - { - m_generator.Close(); - } - - m_generator = null; + m_generator.Dispose(); } Detach(disposing); |