******************************************************* DidiSoft OpenPGP Library for .NET - Release History Copyright (c) 2006-2023 DidiSoft Inc ******************************************************* [*] : Bug [+] : New [-] : Removed [!] : Modification HISTORY: -------- Version 1.9.4.24 Release date: 28 March 2023 [+] .NET 7 binaries [+] PowerShell module License Agreement Version 1.9.4.22 Release date: 16 February 2023 [*] Fixed a bug in AEAD/OCB OpenPGP decryption Version 1.9.4.21 Release date: 09 February 2023 Namespace DidiSoft.Pgp [+] Support for keys stored and loaded from Azure Key Vault [+] PGPLib.AciiCommentHeaders - support for multiline "Comment:" headers in ASCII armored output [+] KeyStore.AciiCommentHeaders - support for multiline "Comment:" headers in ASCII armored output [+] KeyPairInformation.AciiCommentHeaders - support for multiline "Comment:" headers in ASCII armored output [+] RevocationLib.AciiCommentHeaders - support for multiline "Comment:" headers in ASCII armored output Version 1.9.4.13 Release date: 13 January 2023 [+] PGPLibSignAndEncryptStream - with keys as ASCII armored strings or file location Version 1.9.4.12 Release date: 23 December 2022 [*] DidiSoft.Pgp.PGPLib - valid keys were treated as expired! Version 1.9.4.11 Release date: 28 November 2022 [+] DidiSoft.Pgp.PGPLibAsync - full support for async OpenPGP cryptography Version 1.9.3.102 Release date: 29 September 2022 [*] KeyStore.GenerateDhDssKeyPair - keys with key stregth over 1024 bits will sign the subkeys with the specified key creation hash instead of SHA-256 Version 1.9.3.101 Release date: 23 September 2022 [*] KeyStore.GenerateRsaKeyPair - keys with key stregth equal or below 1024 bits will sign the subkeys with the specified key creation hash instead of SHA-1 Version 1.9.3.94 Release date: 17 July 2022 Namespace DidiSoft.Pgp.Smartcard (DidiSoft.Pgp.Smartcard.dll) [+] SmartcardPrivateKey.GetFingerprint() - returns the fingerprint of the key Version 1.9.3.93 Release date: 16 July 2022 [+] DidiSoft.Pgp.Smartcard.dll - added support for hashed PINs KDF-DO defined in the OpenPGP Card 3.4 spec Version 1.9.3.91 Release date: 30 June 2022 [+] Support for decrypting data encrypted with AEAD cipher [*] In Key Generation User ID's of RSA keys were signed with SHA1, now KeyStore.KeyCreationHash is used Version 1.9.3.81 Release date: 12 March 2022 [+] PGPLib.Encrypt - now can also enrypt with private key only [+] PGPLib.EncryptStream - public key accepted as string Version 1.9.3.73 Release date: 21 February 2022 Namespace DidiSoft.Pgp [*] KeyStore.ImportKeyRing - a bug was found for particular public sub keys without signatures Version 1.9.3.71 Release date: 14 January 2022 [+] .NET 6.0 support [*] JDK 7 compatability with odd RSA signature length Version 1.9.3.61 Release date: 14 October 2021 [*] KeypairInformation(byte[]) - input data checked to be a public or private key [*] PGPLib.EncryptStringWithPassword - stack overflow error was thrown Version 1.9.3.51 Release date: 04 October 2021 PowerShell [+] ConvertTo-PgpEncryptedFile -PgpExtension => extension for the output file(s) [+] ConvertTo-PgpSignedAndEncryptedFile -EachFile => in case of directory each file will be encrypted individually [+] ConvertTo-PgpSignedAndEncryptedFile -ForcePgpExtension => .pgp extension swaps the input file extension [+] ConvertTo-PgpSignedAndEncryptedFile -PgpExtension => extension for the output file(s) Namespace DidiSoft.Pgp.Net [+] LDAPClient.GetSingleKeyByUserId - gets the first matching key from an LDAP key server [+] LDAPClient.GetMultipleKeysByUserId - gets all matching keys from an LDAP key server Version 1.9.3.43 Release date: 03 September 2021 PowerShell [+] ConvertTo-PgpEncryptedFile - new switch parameters -EachFile and -ForcePgpExtension Version 1.9.3.41 Release date: 12 July 2021 [*] DidiSoft.Pgp.PGPLib.DetachedVerify - added cleanup code for ASCII armored signatures Version 1.9.3.31 Release date: 04 March 2021 Namespace DidiSoft.Pgp [+] KeyStore.KeyCreationCipher - the CypherAlgorithm used for storing the private key parameters at key generation time [+] KeyStore.KeyCreationHash - the HashAlgorithm used for storing the private key parameters at key generation time Version 1.9.3.11 Release date: 27 January 2021 [+] Creating keys based on Curve 25519 [+] DidiSoft.Pgp.KeyStore.GenerateEccKeyPair - added support for DidiSoft.Pgp.EcCurve.EdDsa and DidiSoft.Pgp.EcCurve.Curve25519 [+] DidiSoft.Pgp.EcCurve.Ed25519 - EdDsa over Curve 25519 [+] DidiSoft.Pgp.EcCurve.EdDsa - EdDsa over Curve 25519 (same as DidiSoft.Pgp.EcCurve.Ed25519) [!] DidiSoft.Pgp.Net.HkpClient updated to support TLS 1.3 [!] Migrated to BouncyCastle 1.8.9 Version 1.9.2.131 Release date: 21 December 2020 Namespace DidiSoft.Pgp [*] KeyPairInformation.ExportPublicKeyAsBytes - trust packets are now not exported. Version 1.9.2.122 Release date: 03 December 2020 Namespace DidiSoft.Pgp [*] KeyStore.GenerateKeyPair - encryption sub key was missing the settings of the master key Version 1.9.2.121 Release date: 26 November 2020 [!] PGPLib.DecryptStreamPBE, PGPLib.DecryptStreamWithPassword - Updated: in case of non PGP file input will throw NonPGPDataException Version 1.9.2.112 Release date: 25 November 2020 Namespace DidiSoft.Pgp [!] PGPLib.DecryptStreamPBE, PGPLib.DecryptStreamWithPassword - in case of non PGP file input will throw NonPGPDataException Namespace DidiSoft.Pgp [*] Fix in KeyStore.ImportKeyPair when importing from .skr or .pkr files Version 1.9.2.111 Release date: 18 November 2020 Namespace DidiSoft.Pgp [*] Fix in KeyStore.ImportKeyPair when importing from .skr or .pkr files Version 1.9.2.101 Release date: 11 November 2020 [*] Setup Wizard was overwriting the \Bin\NET47 folder with the DLL files from NetStandard 2.1 Version 1.9.2.93 Release date: 22 October 2020 [+] PGPLIb.DetachedSignStream - overloaded version with private key as String Version 1.9.2.91 Release date: 24 September 2020 [*] Fixed reference to netstandard in .NET 4.5+ assemblies [+] Migrated to BouncyCastle 1.8.7 Version 1.9.2.82 Release date: 17 September 2020 [*] fixed Yubikey NEO 5 error when initializing the smart card. Version 1.9.2.81 Release date: 15 September 2020 [+] Ships with a set of .NET 4.8 assemblies [-] .NET Compact Framework assemblies have been removed! Version 1.9.2.71 Release date: 18 June 2020 [+] Ships with a set of .NET Standard 2.1 assemblies Version 1.9.2.63 Release date: 21 April 2020 Namespace DidiSoft.Pgp [+] PGPLib.TempFolderLocation - File system Path string to the temp files folder. Used when encrypting multiple files Version 1.9.2.61 Release date: 03 April 2020 [+] Added missing async methods to the PGPLib and KeyStore classes Version 1.9.2.54 Release date: 10 March 2020 Namespace DidiSoft.Pgp.Smartcard [+] Added support for ECC OpenPGP keys according to OpenPGP card specification version 3.3 Version 1.9.2.53 Release date: 09 March 2020 [+] SmartcardKeyStore.OpenDefaultSmartcard - overloaded method without password [*] Bug in reading smat card serial number Version 1.9.2.52 Release date: 07 March 2020 Namespace DidiSoft.Pgp.Smartcard [+] SmartcardKeyStore.Login - login method [+] SmartcardKeyStore.IsAuthenticated - checks is PIN 1 password already entered [!] DidiSoft.Pgp.Smartcard.dll fixed incompatibility with ACS ACOSJ Java card. Version 1.9.2.51 Release date: 18 February 2020 [+] Curve25519 - Encrypt/Decrypt support (RFC 7748; https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-03#section-9.2) [+] EdDsa - Sign/Verify support (https://tools.ietf.org/html/draft-koch-eddsa-for-openpgp-00#section-4) [+] DidiSoft.Pgp.EcCurve.Curve25519 - value for keys based on Curve 25519 Namespace DidiSoft.Pgp [!] PGPLib.Decrypt - private key passwords with non UTF-8 encoding are also supported Version 1.9.2.42 Release date: 12 February 2020 Namespace DidiSoft.Pgp [!] PGPLib.Decrypt - private key passwords with non UTF-8 encoding are also supported Version 1.9.2.41 Release date: 11 February 2020 Namespace DidiSoft.Pgp.Smartcard [+] SmartcardKeyStore.ImportPrivateKey - set of overloaded methods for importing existing private keys on the card [+] SmartcardKeyStore.GenerateRsaKeyPair - creates an RSA key with given strength directly on the smartcard [+] SmartcardKeyStore.CardName - property for the the card name [+] SmartcardKeyStore.Pin1RetriesCount - property for the the PIN1 remaining retries [+] SmartcardKeyStore.ResetCounterRetriesCount - property for the the Reset Counter remaining retries [+] SmartcardKeyStore.ApplicationId - property for OpenPGP Application ID on the card [+] SmartcardKeyStore.ApplicationVersion - property for OpenPGP Application Version on the card [+] SmartcardKeyStore.CardManufacturer - property for the name of the card manifacturer [+] SmartcardKeyStore.SerialNumber - property for the name of the card Serial Number [+] SmartcardKeyStore.GetKey(SmartcardKeyType type) - returns given key type from the card Version 1.9.2.31 Release date: 09 December 2019 Namespace DidiSoft.Pgp [*] PGPLib.GenerateElgamalKeyPair, PGPLib.DhDssKeyPair - bug when generating 4096 bit encryption keys [+] PGPLib.GenerateElgamalKeyPair, PGPLib.DhDssKeyPair - added support for 6144 and 8192 bit encryption keys OpenPGP Smartcard support [+] PGPLib.EncryptFile, PGPLib.EncryptStream - with the encryption key from DidiSoft.Pgp.Smartcard.SmartcardKeyStore Version 1.9.2.21 Release date: 27 November 2019 [*] PGPLib.ClearSign with Smartcard (Yubikey/OpenPGP card) - an error was thrown when using RSA 4096 bit keys Version 1.9.2.14 Release date: 26 November 2019 [*] PGPLib.ClearSign with Smartcard (Yubikey) - when the public key bytes were more than 510 an error was thrown. Version 1.9.2.13 Release date: 26 November 2019 [*] Added missed support for Clear text signed with SHA-224 Version 1.9.2.12 Release date: 26 November 2019 Namespace DidiSoft.Pgp [!] PGPLib - when encrypting the KeyFlags are taken into account to select the Encryption key. Version 1.9.2.11 Release date: 22 November 2019 [*] SmartcardKeyStore.OpenDefaultSmartcard - the method wasn't able to connect to the SmartCard [!] Migrated to BouncyCastle 1.8.5 Version 1.9.1.62 Release date: 07 November 2019 Namespace DidiSoft.Pgp [+] PGPLib.EncryptString - overloaded methods with System.Text.Encoding parameter that determines how the string being encrypted is converted to raw bytes Version 1.9.1.61 Release date: 31 October 2019 PowerShell [+] ConvertTo-PgpEncryptedString - PGP encrypts a string from the pipeline or from -InputObject parameter [+] ConvertFrom-PgpEncryptedString - decrypts PGP encrypted string from the pipeline or from -InputObject parameter Version 1.9.1.52 Release date: 11 October 2019 Namespace DidiSoft.Pgp [+] PGPLib.ExportPublicKey - overloaded methods for exporting multiple keys into one file [+] PGPLib.ExportPrivateKey - overloaded methods for exporting multiple keys into one file Version 1.9.1.51 Release date: 10 October 2019 [!] PGPLib.IntegrityProtectArchives is now set to TRUE by default in order to comply with GnuPG 2.1+ and later versions. [*] KeyStore.Save - when used with custom IKeyStorage implementation an exception was thrown. Version 1.9.1.44 Release date: 09 October 2019 [+] Added support for EC Curve 25519 (OID 1.3.6.1.4.1.3029.1.5.1) - the same patch applied in the NetStandard dll's Version 1.9.1.43 Release date: 09 October 2019 [+] Added support for EC Curve 25519 (OID 1.3.6.1.4.1.3029.1.5.1) [!] DidiSoft.Pgp.PGPLib now implmenets the IDisposable interface Version 1.9.1.42 Release date: 01 October 2019 PowerShell [*] Fix in ConvertTo-PgpEcryptedFile when used with -Pubring parameter Version 1.9.1.41 Release date: 29 August 2019 [*] Fixed cleanup code in PGPLib.DecryptFile(string, KeyStore, string, string) which wasn't executed in case of EndOfStreamException Version 1.9.1.31 Release date: 05 August 2019 [+] Namespace DidiSoft.Pgp.Storage [+] IKeyStorage - interface for custom KeyStore storage [+] FileKeyStorage - implementation of IKeyStorage based on a file [+] InMemoryKeyStorage - implementation of IKeyStorage based on RAM memory Namespace DidiSoft.Pgp [+] KeyStore(IKeyStorage storage, string password) - new constructor based on custom KeyStore storage [+] KeyStore(IKeyStorage storage) - new constructor based on custom KeyStore storage [+] KeyStore.CheckPassword(IKeyStorage) - probes a password against a custom KeyStore storage [+] KeyStore.IsPasswordProtected(IKeyStorage) - probes is a custom KeyStore storage password protected [+] event KeyStore.OnKeyAdded - event when a new key is introduced in the KeyStore [+] event KeyStore.OnKeyUpdated - event when a key is modified in the KeyStore [+] event KeyStore.OnKeyRemoved - event when a key is removed from the KeyStore Version 1.9.1.22 Release date: 31 July 2019 [*] Fixed path argument error in PowerShell modules ConvertTo-PgpEncryptedFile and ConvertTo-PgpSignedFile. Version 1.9.1.21 Release date: 28 July 2019 PowerShell module - DidiSoft.Pgp.PowerShell.dll [+] ConvertTo-PgpEncryptedFile - new parameter(s) of type SecureString -SecureKeyStorePassword [+] ConvertTo-PgpEncryptedFile - new parameter for resusing PGP/GnuPG key rings -Pubring [+] ConvertFrom-PgpEncryptedFile - new parameter of type SecureString -SecurePassword [+] ConvertFrom-PgpEncryptedFile - new parameter for resusing PGP/GnuPG key rings -Secring [+] ConvertTo-PgpSignedAndEncryptedFile - new parameter of type SecureString -SecureKeyStorePassword [+] ConvertTo-PgpSignedAndEncryptedFile - new parameter for resusing PGP/GnuPG key rings -Pubring [+] ConvertTo-PgpSignedAndEncryptedFile - new parameter of type SecureString -SecurePassword [+] ConvertTo-PgpSignedAndEncryptedFile - new parameter for resusing PGP/GnuPG key rings -Secring [+] ConvertFrom-PgpSignedAndEncryptedFile - new parameter of type SecureString -SecurePassword [+] ConvertFrom-PgpSignedAndEncryptedFile - new parameter for resusing PGP/GnuPG key rings -Secring [+] Test-PgpSignedFile - new parameter(s) of type SecureString -SecureKeyStorePassword [+] Test-PgpSignedFile - new parameter for resusing PGP/GnuPG key rings -Pubring [+] Test-PgpClearSignedFile - new parameter(s) of type SecureString -SecureKeyStorePassword [+] Test-PgpClearSignedFile - new parameter for resusing PGP/GnuPG key rings -Pubring [+] Test-PgpDetachedSignedFile - new parameter(s) of type SecureString -SecureKeyStorePassword [+] Test-PgpDetachedSignedFile - new parameter for resusing PGP/GnuPG key rings -Pubring Version 1.9.1.11 Release date: 22 May 2019 [+] Assembly DidiSoft.Pgp.Smartcard.dll - .NET Framework assembly for OpenPGP smartcards (Yubikey, Nitrokey, etc.) namespace DidiSoft.Pgp.Smartcard [+] SmartcardKeyStore - provides access to OpenPGP smartcards [+] SmartcardPrivateKey - abstraction over OpenPGP key contained in a smartcard [+] SmartcardException - exception trown in case of smartcard communication error namespace DidiSoft.Pgp [+] PGPLib.ClearSignXX - overloaded methods that accept SmartcardKeyStore [+] PGPLib.SignXX - overloaded methods that accept SmartcardKeyStore [+] PGPLib.DetachedSignXX - overloaded methods that accept SmartcardKeyStore [+] PGPLib.DecryptXX - overloaded methods that accept SmartcardKeyStore Version 1.9.0.24 Release date: 28 March 2019 [!] Compression mode switched from Max compression to speed optimization. Version 1.9.0.23 Release date: 28 March 2019 [!] Fix in PowerShell documentation Version 1.9.0.22 Release date: 28 March 2019 Namespace DidiSoft.Pgp [*] PGPLib.Encrypt - fix in rare cases with Zlib compression causing IndexOutOfRangeException Version 1.9.0.21 Release date: 28 March 2019 Namespace DidiSoft.Pgp [*] KeyStore.ImportGnuPgKbx(byte[]) - fix for the overloaded versiion with byte array input Version 1.9.0.14 Release date: 21 February 2019 [!] Error messages for Wrong Password of a key were modified. [!] ASCII armored keys with Charset: field can be processed. Version 1.9.0.12 Release date: 12 February 2019 [!] End Of Life (EOL) and End of Vendor support (EOVS) for version 1.8 is set to 31 December 2024 [!] Dependant assembly BouncyCastle.CryptoExt.dll has been renamed to DidiSoft.BouncyCastle.dll Namespace DidiSoft.Pgp [+] KeyStore.ImportGnuPgKbx - Imports GnuPG 2+ Keybox storage [+] EdDSA keys are recognized as EC keys [+] Added LDAP and Mail DLL's for NetStandard 1.6, NetStandard 2.0 and .NET Core 2.0 Version 1.8.5.31 Release date: 28 November 2018 Namespace DidiSoft.Pgp [*] PGPLib.Sign [*] PGPLib.SignAndEncrypt [*] KeyStore.ImportPublicKey - All the above were affected by change in version 1.8.3.5 related to Fixed compatibility with OpenPGP solutions developed in Java that suffer from update in JDK 7 and later where RSA signatures without leading zeroes were rejected! - The bug was produced by not correctly encoding the signature length. Version 1.8.5.21 Release date: 14 November 2018 Namespace DidiSoft.Pgp [+] PGPLib.EncryptFolder - added overloaded version with keys in KeyStore that support multiple recipients Version 1.8.5.12 Release date: 19 October 2018 Namespace DidiSoft.Pgp [+] KeyStore[i] - Item access to the keys inside the KeyStore [+] KeyStore.Count - count of keys stored inside the KeyStore [+] KeyStore.ExportKeyPair - more meaningful alias of KeyStore.ExportKeyRing [*] KeyStore.AddSigningSubKey - previously created signing keys were marked as encyption sub keys [!] KeyStore.AddSigningSubKey - changed to return KeyPairInformation.SubKey [!] KeyStore.AddEncryptionSubKey - changed to return KeyPairInformation.SubKey [+] KeyPairInformation.SubKey.Parent - property to return the parent KeyPairInformation this sub key belongs to [!] KeyPairInformation.SubKey - Implicit cast to KeyPairInformation like : KeyPairInformation.SubKey subKey1; KeyPairInformation parentKey = subKey1; // subKey1 holds internal information for its parent and knows how to cast! Version 1.8.4.5001 Release date: 08 October 2018 Namespace DidiSoft.Pgp [+] KeyPairInformation.ModificationDetectionFeature - property indicating does the system that produced this key support Modification Detection Code/Integrity Check [+] KeyStore.ExportPartialPrivateKeyRing - methods for exporting a detached/partial private key, where the private key material of the master key is not written [+] KeyStore.AddSigningSubKey - methods for adding additional signing sub keys to an existing OpenPGP key [*] KeyStore.AddEncryptionSubKey - fix when creating ECC keys to support the Brainpool Elliptic Curves Version 1.8.4.4001 Release date: 14 September 2018 PowerShell module [+] ConvertTo-PgpEncryptedFile - added parameter IntegrityProtect that controls shall an Integrity protection packet (also known as MDC, Modification Detection Code) be added [+] ConvertTo-PgpSignedAndEncryptedFile - added parameter IntegrityProtect that controls shall an Integrity protection packet (also known as MDC, Modification Detection Code) be added [*] PGPLib.EncryptFile - missed to respect the IntegrityProtectArchives property value in one of the overloaded versions of the method Version 1.8.4.3135 Release date: 18 August 2018 [+*] Added support for Unicode private key passwords created with the library [+*] Added support for Unicode passwords protecting DidiSoft.Pgp.KeyStore storage [+*] Added support for Unicode passwords for encrypted with a password or signed and encrypted with a password .pgp files Version 1.8.4.25 Release date: 06 August 2018 [*] Fixed import of ASCII armored keys without Version header Version 1.8.4.10 Release date: 03 July 2018 [+] PGPLib.IntegrityProtectArchives - a new property that controls shall an Integrity protection packet (also known as MDC, Modification Detection Code) be added implicitly in the methods where it is not specified. - This property must be turned on for compatibility with all new versions of GnuPG (as of 2.2.8) from now on! [!] PGPLib.EncryptString - all methods are affected by the property PGPLib.IntegrityProtectArchives [!] PGPLib.SignAndEncryptString - all methods are affected by the property PGPLib.IntegrityProtectArchives Version 1.8.3.6001 Release date: 29 June 2018 [!] Build numbers aligned with Nuget trail versions. Production versions will always be one revisions greater than the trial version for smooth transition from Trial to Production via NuGet Update-Package Version 1.8.3.5 Release date: 27 June 2018 [!] Fixed compatibility with OpenPGP solutions developed in Java that suffer from update in JDK 7 and later where RSA signatures without leading zeroes are rejected! - This affects a lot of major software developed in Java for large enterprises and we had to release a workaround in order to ease our users! [*] Fixed bug in mistmatch of preffered Hash algorithms when generating PGP key pairs with KeyStore.Generate... Version 1.8.3.4 Release date: 01 June 2018 [*] Fixed support for non-Unicode private key passwords. Version 1.8.3.3 Release date: 08 May 2018 [*] PGPLib.Pgp2Compatible and PGPLib.SignAndEncrypt - fixed bug with signature packet for PGP 2.x systems. (thanks to James Statom) Version 1.8.3.2 Release date: 27 April 2018 [*] KeyStore.ImportKeyRing - fixed bug when importing empty (0 byte) files. Version 1.8.3.1 Release date: 23 March 2018 [!] PGPLib - added auto rewing of keys supplied as Stream Version 1.8.3.0 Release date: 22 March 2018 [+] additional Assembly DLL - DidiSoft.Pgp.Mail.dll providing plugable PGP/MIME support [+] new namespace DidiSoft.Pgp.Mail [+] new class DidiSoft.Pgp.Mail.PGPMailLib - providing plugable PGP/MIME support Online tutorial: https://www.didisoft.com/net-openpgp/examples/pgp-mime/ [!] BouncyCastle namespace changed to DidX.BouncyCastle Version 1.8.2.8 Release date: 06 March 2018 Namespace DidiSoft.Pgp [+] KeyPairInformation.GetEcCurve() - Returns the DidiSoft.Pgp.EcCurve behind this key (if OpenPGP ECC key) [+] KeyPairInformation.SubKey.GetEcCurve() - Returns the DidiSoft.Pgp.EcCurve behind this key (if OpenPGP ECC key) Version 1.8.2.7 Release date: 16 February 2018 Namespace DidiSoft.Pgp [+] KeyStore.ImportKeyPair(Stream) - import a single key pair from a Stream [+] KeyStore.ImportKeyPair(byte[]) - import a single key pair from a byte[] [+] PGPLib.VerifyStringWithoutExtracting [*] Fix in VS 2017 Help registration [*] Fix in Bin\GAC\GAC_Install.ps1 Version 1.8.2.6 Release date: 08 January 2018 Namespace DidiSoft.Pgp [*] PGPLib.DecryptAndVerifyString - fix when providing arbitrary string as input, now recognized with NonPGPDataException being thrown Version 1.8.2.5 Release date: 20 November 2017 Namespace DidiSoft.Pgp [!] PGPLib - workaround to decrypt files marked with wrong Key ID's by PGP v.5 Version 1.8.2.4 Release date: 16 October 2017 Namespace DidiSoft.Pgp [*] KeyStore.GenerateEccKeyPair - Brainpool curves were not recognized (special thanks to James Statom) Version 1.8.2.3 Release date: 08 August 2017 Namespace DidiSoft.Pgp [+] PGPLib.EncryptFilesWithPassword - encrypts multiple files with a password only Version 1.8.2.2 Release date: 14 June 2017 Namespace DidiSoft.Pgp [+] KeyAlgorithm.DHDSA - represents a DH/DSS (DSA) key, same as KeyAlgorithm.ELGAMAL [+] KeyStore.GenerateEccKeyPair - added support for Brainpool Elliptic Curves (RFC 5639) [+] KeyStore.GenerateKeyPair - accepts Camellia symmetric cipher for key preferrences [+] EcCurve.Brainpool256 - Brainpool Elliptic Curve 256 bit [+] EcCurve.Brainpool384 - Brainpool Elliptic Curve 384 bit [+] EcCurve.Brainpool512 - Brainpool Elliptic Curve 512 bit [+] CypherAlgorithm.CAMELLIA_128 - Camellia symmetric cipher 128 bit [+] CypherAlgorithm.CAMELLIA_192 - Camellia symmetric cipher 192 bit [+] CypherAlgorithm.CAMELLIA_256 - Camellia symmetric cipher 256 bit [+] PGPLib.EncryptStringWithPassword - alias of DidiSoft.Pgp.PGPLib.EncryptStringPBE [+] PGPLib.EncryptStreamWithPassword - alias of DidiSoft.Pgp.PGPLib.EncryptStreamPBE Namespace DidiSoft.Pgp.Inspect [+] PGPInspectLib.GetEncryptionCypher - returns the symmetric CypherAlgorithm used for a PGP message PowerShell [+] Added new values to the -Curve parameter of New-PgpKeyEcc: Brainpool-256, Brainpool-384, Brainpool-512 Version 1.8.2.1 Release date: 08 June 2017 [+] DidiSoft.Pgp.KeyStore.GenerateDhDssKeyPair - generates DH/DSS keys with key sizes up to 4096 bits [+] DidiSoft.Pgp.KeyStore.GenerateKeyPair - overloaded version with different key sizes for the master and sub key [+] DidiSoft.Pgp.PGPLib.EncryptFileWithPassword - alias of DidiSoft.Pgp.PGPLib.EncryptFilePBE [+] DidiSoft.Pgp.PGPLib.DecryptFileWithPassword - alias of DidiSoft.Pgp.PGPLib.DecryptFilePBE Version 1.8.2.0 Release date: 30 March 2017 Async Support [+] DidiSoft.Pgp.PGPLibAsync extending PGPLib - offers async methods for .NET 4.5, Xamarin, Core, UWP, WinRT (currently only as Task.Run wrappers, in the next version will be updated to the raw data level, with CabcelationToken and progress) [+] DidiSoft.Pgp.KeyStoreAsync extending KeyStore - offers async methods for .NET 4.5, Xamarin, Core, UWP, WinRT [!] [SetupFolder]\Bin\Xamarin.Android\BouncyCastle.Android.dll renamed to BouncyCastle.CryptoExt.dll [!] [SetupFolder]\Bin\Xamarin.iOS\BouncyCastle.iOS.dll renamed to BouncyCastle.CryptoExt.dll [!] [SetupFolder]\Bin\Core\BouncyCastle.Core.dll renamed to BouncyCastle.CryptoExt.dll LDAP Key server access for Xamarin.Android and Xamarin.iOS [+] [SetupFolder]\Bin\Xamarin.Android\DidiSoft.Pgp.Net.LdapClient.dll [+] [SetupFolder]\Bin\Xamarin.iOS\DidiSoft.Pgp.Net.LdapClient.dll Changes in namespace DidiSoft.Pgp.Net [+] DidiSoft.Pgp.Net.IKeyServerClient - base interface for HkpClient and LdapClient [+] DidiSoft.Pgp.Net.LdapKeyServerException - thrown from LdapClient, extending DirectoryServicesCOMException for backward compatibility of the code base [+] DidiSoft.Pgp.Net.LdapClient.Timeout - timeout in milli seconds [!] DidiSoft.Pgp.Net.LdapClient - now throws on network error LdapKeyServerException [+] DidiSoft.Pgp.Net.HttpKeyServerException - thrown from HkpClient, extending System.Net.WebException for backward compatibility of the code base [!] DidiSoft.Pgp.Net.HkpClient.SubmitKey - returns boolean indicating operation success when true, now throws HttpKeyServerException [!] DidiSoft.Pgp.Net.HkpClien - now throws HttpKeyServerException Version 1.8.1.4 Release date: 22 March 2017 [*] PGPLib.Encrypt - expired and revoked keys were silently used in cases when an KeyIsRevokedException or KeyIsExpiredException should have been thrown. Version 1.8.1.3 Release date: 10 March 2017 PowerShell [+] Get-PgpKeyInfo - a new cmdlet for obtaining information from pgp key files Version 1.8.1.2 Release date: 07 March 2017 [+] DidiSoft.Pgp.Net.LdapClient.SubmitKey(DidiSoft.Pgp.KeyPairInformation) [+] DidiSoft.Pgp.Net.LdapClient.SubmitKeyAsync - async versions of the upload method [+] DidiSoft.Pgp.Net.LdapClient.dll for Xamarin Version 1.8.1.1 Release date: 27 February 2017 [*] KeyStore.ExportPublicKey - removed Trust packets so keys can be imported into Facebook Version 1.8.1.0 Release date: 24 February 2017 [!] Migrated to BouncyCastle version 1.8 [+] Added DLL for .NET 4.5 and 4.6 in [setup folder]\Bin\NET45\DidiSoft.Pgp.dll [+] Async version of PGPLin for .NET 4.5 and above in the namespace DidiSoft.Pgp.Async [+] Added DLL for .NET Core in [setup folder]\Bin\Core\DidiSoft.Pgp.Core.dll [+] Added DLL for Universal Windows Platform (UWP) in [setup folder]\Bin\UWP\DidiSoft.Pgp.UWP.dll [-] Windows Phone 7 DLLs are no longer available [+] Added DLL for Windows Phone 8 in [setup folder]\Bin\WinPhone\DidiSoft.Pgp.WinPhone.dll [+] Suppotr for keys in KeyStore files for the Powershell cmdlets Version 1.7.15.7 Release date: 13 January 2017 [*] DidiSoft.Pgp.Net.HkpClient - fixed bug not allowing communication with HKP key servers with SSL/TLS connection [!] DidiSoft.Pgp.Net.HkpClient - now allows specifying the server adddress with protocol, e.g. : DidiSoft.Pgp.Net.HkpClient mycl = new DidiSoft.Pgp.Net.HkpClient("hkps://hkps.pool.sks-keyservers.net"); Version 1.7.15.6 Release date: 29 August 2016 [*] KeyStore.Force2048BitDSA - preferred hash, compression and symmetric cipher algorithms were not recognized by Symantec PGP/Encryption Desktop Version 1.7.15.5 Release date: 23 August 2016 Namespace DidiSoft.Pgp [!] PGPLib - all methods that expect keys through a KeyStore and a User ID now also accept KeyStore and a long (64 bit) hexadecimal Key ID [!] PGPLib - expired and revoked encryption sub keys in a DH/DSS (ElGamal) key pair are skipped in order to find a valid sub key [+] KeyStore - all methods that expect keys through a KeyStore and a User ID now also accept KeyStore and a long (64 bit) hexadecimal Key ID [+] method KeyStore.KeyIdToLongHex(long) - converts a 64 bit Key ID into a long hexadecimal Key Id [+] property KeyPairInformation.KeyIdLongHex - the full hexadecimal Key ID of this key [+] property KeyPairInformation.SubKey.KeyIdLongHex - the full hexadecimal Key ID of this key [+] method KeyPairInformation.KeyIdToLongHex(long) - converts a 64 bit Key ID into a long hexadecimal Key Id Version 1.7.15.4 Release date: 04 August 2016 [+] property bool PGPLib.KeepLineEndingsIntact - controls should line endings for decrypted text files be converted to the OS new line char sequence (false) or kept as they are (true) [!] All PGPLib.Decrypt methods - decrypted text data line endings are corrected automatically to the OS line ending (CrLf on WIndows) [!] All PGPLib.DecryptAndVerify methods - decrypted text data line endings are corrected automatically to the OS line ending (CrLf on WIndows) [!] All PGPLib.Verify methods - extracted text data line endings are corrected automatically to the OS line ending (CrLf on WIndows) [!] All PGPLib.Encrypt - when encrypting the sub key with the strongest encryption algorithm and bit strength will be used Version 1.7.15.3 Release date: 06 July 2016 [*] Fix for handling of ASCII armored OpenPGP keys stored in UTF-8 BOM format. [*] Fix for PowerShell module setup on machines with 'My Documents' linked to a remote network drive location [*] Fix for Examples\PGPLibExampleVB projects not referencing the library DLL's Version 1.7.15.2 Release date: 10 May 2016 Namespace DidiSoft.Pgp [*] KeyStore.AddUserId - key Trust value was being lost when adding new User Id to a key [+] KeyStore.SignPublicKey - added overloaded methods controlling should the signature be exportable [+] KeyStore.Force2048bitDSA - when set to true newly generated DH/DSS (Elgamal) keys will have a 2048 bit DSA master signing key, instead of the 1024 bit used by default [!] KeyStore.GenerateElgamalKeyPair - the preferred hash algorithms were limited to SHA-1, SHA-224, SHA-256, SHA-384, or SHA-512 when KeyStore.Force2048bitDSA is false and SHA-224, SHA-256, SHA-384, or SHA-512 when KeyStore.Force2048bitDSA is true Version 1.7.15.1 Release date: 22 April 2016 [*] DidiSoft.Pgp.Net.LdapClient - fix for LDAP key servers storing the pgp scheme as the naming context root. Version 1.7.15.0 Release date: 21 March 2016 [+] PowerShell Cmdlets in DidiSoft.Pgp.PowerShell.dll. See www.didisoft.com/net-openpgp/examples/powershell for more details. [*] Handling DSA with RipeMD160 hash [+] Support for decrypting Camellia cipher - RFC 5581 (https://tools.ietf.org/html/rfc5581) Version 1.7.14.6 Release date: 07 March 2016 [+] DidiSoft.Pgp.Extra.LargeMemStream - Stream sub class located in memory and capable of storing 1 GB of data. [!] CypherAlgorithm.IDEA - is now obsolete, use with caution as it is not compatible with newer versions of GnuPG Version 1.7.14.5 Release date: 07 January 2016 Namespace DidiSoft.Pgp [*] KeyStore.AddEncryptionSubKey() - fixed bug that caused the newly added encryption sub key to be saved afterwards in the KeyStore file as a master key. [*] KeyStore.GenerateKeyPair() - sub keys of newly generated keys were double listed in the new KeyPairInformation.PublicSubKeys list [+] Examples\KeyToolCS\KeyToolCS\FormAddSubKey.cs - demonstrates how to invoke KeyStore.AddEncryptionSubKey() [+] Examples\KeyToolVB\KeyToolVB\FormAddSubKey.vb - demonstrates how to invoke KeyStore.AddEncryptionSubKey() Version 1.7.14.4 Release date: 17 December 2015 Namespace DidiSoft.Pgp [+] KeyStore.AddEncryptionSubKey - set of methods for adding encryption sub keys to existing key pairs [+] KeyStore.ChangeKeyKEKCypher - allows change of the symmetric cipher algorithm for protecting the components of a private key Version 1.7.14.3 Release date: 16 November 2015 Namespace DidiSoft.Pgp [+] KeyStore.KEKCypher - Added property that controls the private key components encryption cypher during key generation Version 1.7.14.2 Release date: 06 November 2015 Namespace DidiSoft.Pgp [+] KeyStore.ExportKeyRingAsString - Exports key pairs as ASCII armored string Version 1.7.14.1 Release date: October 20 2015 Namespace DidiSoft.Pgp [+] TrustLevel.Unknown - value meaning no owner trust was assigned [+] TrustLevel.Ultimate - value meaning maximum trust [+] KeyStore.IsVerified(key) - returns is a key identity verified according to the rules of Web of Trust [+] KeyStore.GetTrust(key) - returns the trust amount for a key according to the rules of Web of Trust [+] KeyStore.GetOwnerTrust(key) - returns the manually assigned trust amount for a key according to the rules of Web of Trust [+] KeyStore.SignPublicKeyAsTrustedIntroducer - overloaded verion that controls trust depth and is the signature exportable [+] KeyStore.MarginalsNeeded - controls the number of marginally trusted signers for a key to be verified [+] KeyStore.MaxTrustDepth - controls the maximum depth for checking the Web of Trust [+] KeyStore.TreatPrivateKeysAsUltimatelyTrusted - controls should imported private keys be treated as equally trusted to generated ones Namespace DidiSoft.Pgp.WinRT [+] KeyStoreRT.GetKey(userId) - returns a key object from this key store [+] KeyStoreRT.IsVerified(key) - returns is a key identity verified according to the rules of Web of Trust [+] KeyStoreRT.GetTrust(key) - returns the trust amount for a key according to the rules of Web of Trust [+] KeyStoreRT.GetOwnerTrust(key) - returns the manually assigned trust amount for a key according to the rules of Web of Trust [+] KeyStoreRT.SignPublicKeyAsTrustedIntroducer - overloaded verion that controls trust depth and is the signature exportable [+] KeyStoreRT.MarginalsNeeded - controls the number of marginally trusted signers for a key to be verified [+] KeyStoreRT.MaxTrustDepth - controls the maximum depth for checking the Web of Trust [+] KeyStoreRT.TreatPrivateKeysAsUltimatelyTrusted - controls should imported private keys be treated as equally trusted to generated ones Version 1.7.13.1 Release date: October 16 2015 [!] The libarary is now installed under c:\Program Files\OpenPGP Library for .NET [!] Added DLL files targeting .NET 4.0, 4.5.x, 4.6 Version 1.7.12.1 Release date: June 10 2015 [!] Migration notes are available at: http://www.didisoft.com/net-openpgp-library/new-signature-checking-openpgp-net/ Namespace DidiSoft.Pgp [!] PGPLib.VerifyFile - now returns SignatureCheckResult (backward compatible, offers implicit cast to boolean) [!] PGPLib.VerifyStream - now returns SignatureCheckResult (backward compatible, offers implicit cast to boolean) [!] PGPLib.VerifyString - now returns SignatureCheckResult (backward compatible, offers implicit cast to boolean) [!] PGPLib.DecryptAndVerifyFile - now returns SignatureCheckResult (backward compatible, offers implicit cast to boolean) [!] PGPLib.DecryptAndVerifyStream - now returns SignatureCheckResult (backward compatible, offers implicit cast to boolean) [!] PGPLib.DecryptAndVerifyString - now returns SignatureCheckResult (backward compatible, offers implicit cast to boolean) [!] PGPLib.DecryptAndVerifyFilePBE - now returns SignatureCheckResult (backward compatible, offers implicit cast to boolean) [!] PGPLib.DecryptAndVerifyStreamPBE - now returns SignatureCheckResult (backward compatible, offers implicit cast to boolean) [!] PGPLib.DecryptAndVerifyStringPBE - now returns SignatureCheckResult (backward compatible, offers implicit cast to boolean) Version 1.7.11.17 Release date: June 01 2015 Namespace DidiSoft.Pgp [+] PGPLib.EncryptString(String, KeyStore, long[]) - added overloaded method that accepts the recipients' keys refered by Key Id Version 1.7.11.16 Release date: May 29 2015 [!/?*] Fixed correct evaluation of KeyPairInformation.ExpirationTime for keys with more than one KeyExpirationTime signature. Version 1.7.11.15 Release date: May 14 2015 [!] the library .NET DLL's were marked with the AllowPartiallyTrustedCallers in order to allow usage from ASP.NET applications running on a partialy trusted mode. Version 1.7.11.14 Release date: April 22nd 2015 Namespace DidiSoft.Pgp [+] PGPKeyPair - added constructor that accepts a System.IO.Stream parameter Version 1.7.11.12 Release date: April 2nd 2015 [!] PGPLib.Decrypt and DecryptAndVerify - removed mentioning of incorrect password, as it could be close to the true one and this way intruduce a security issue. Version 1.7.11.11 Release date: February 24 2015 [!] PGPLib.Decrypt methods include a descriptive hint in the exception when a public key is used for decryption instead of a private key Version 1.7.11.10 Release date: February 05 2015 Namespace DidiSoft.Pgp [+] PGPLib.AddMasterKey - set of methods for registering master keys, used as silent additional encryption keys [+] PGPLib.DeleteMasterKey - removes a previously registered master key [+] PGPLib.GetMasterKeysCount - returns the number of registered master keys [+] PGPLib.GetMasterKey - returns the master key with the specified index as a DidiSoft.Pgp.KeyPairInformation object Version 1.7.11.9 Release date: January 09 2015 Namespace DidiSoft.Pgp [*] PGPLib.DecryptFilePBE - fixed fake checksum error on PGP 2.x password encrypted data, with zero checksum. Namespace DidiSoft.Pgp.WinRT (located in: \Bin\WinRT\DidiSoft.Pgp.WinRT.winmd) [+] PGPLibRT.SignStreamAsync - accepting data and keys as IInputStream and IOutputStream [+] PGPLibRT.VerifyStreamAsync - accepting data and keys as IInputStream and IOutputStream Version 1.7.11.8 Release date: December 17 2014 Namespace DidiSoft.Pgp [*] PGPLib.DecryptFilePBE - fixed exception throwing on wrong password and now throws WrongPasswordException as expected. Namespace DidiSoft.Pgp.WinRT (in: DidiSoft.Pgp.WinRT.winmd) [+] PGPLibRT.EncryptStreamAsync - accepting IInputStream and IOutputStream [+] PGPLibRT.DecryptStreamAsync - accepting IInputStream and IOutputStream Version 1.7.11.7 Release date: December 01 2014 Namespace DidiSoft.Pgp [*] PGPLib.ClearSignString - fixed character malforming on UTF-8 messages [*] KeyStore.ImportPublicKey - fixed wrong PathTooLongException thrown when importing malformed keys Version 1.7.11.6 Release date: November 27 2014 [+] added property DidiSoft.Pgp.Net.HkpClient.Timeout - gets/sets the timeout period in ms after which the request should fail. Default is 20 seconds. Version 1.7.11.5 Release date: November 19 2014 Namespace DidiSoft.Pgp.Net [+] HkpClient.GetKeysByUserId(string userId) - returns the data of all keys that have User ID containing the specified string, in contrast to HkpClient.GetKeyByUserId, which was returning only the first matching key. Version 1.7.11.4 Release date: November 17 2014 [*] KeyStore.AddUserId - was throwing DidiSoft.Pgp.PGPException instead of WrongPasswordException in case of a wrong key password [*] KeyStore.ChangeUserId - was throwing DidiSoft.Pgp.PGPException instead of WrongPasswordException in case of a wrong key password Version 1.7.11.3 Release date: November 06 2014 Namespace DidiSoft.Pgp [!] KeyStore.LogMessageEvent - addeded log events handler event Version 1.7.11.2 Release date: October 07 2014 Namespace DidiSoft.Pgp [+] PGPLib.EncryptStream - added overloaded versions for multiple recipients and keys in a KeyStore [!] PGPLib.EncryptStream - the overloaded versions that accept a public key as FileInfo parameter are marked as obsolete. Version 1.7.11.1 Release date: October 01 2014 [*] Fix in DidiSoft.Pgp.Net.LdapClient when retrieving keys from SEMS Version 1.7.11.0 Release date: September 15 2014 Namespace DidiSoft.Pgp [!] PGPLib - now takes into account ADK (additional decryption keys) [+] PGPLib.UseADKs - Controls should ADK (additional decryption keys) also be used when encrypting. Default is True [+] KeyStore.GetKnownAdkKeys - Returns the ADKs (additional decryption keys) for a key that are located in the same KeyStore [+] KeyStore.GetKeyIdForFingerprint - Returns the key id corresponding to a key fingerprint [+] KeyStore.AddAdkKey - registers an ADK key for an OpenPGP key [+] KeyStore.DeleteAdkKey- unregisters an ADK key for an OpenPGP key [+] KeyStore.GetAdkKeysCount - returns the number of ADK keys that OpenPGP key has [+] KeyStore.GetAdkKeyFingerprint - returns the fingerprint of an ADK key that an OpenPGP key has [+] KeyPairInformation.FingerprintToBytes - static helper method that converts a fingerprint into a byte array [+] KeyPairInformation.GetAdkKeysCount - returns the number of ADK keys that this key have [+] KeyPairInformation.GetAdkKeyFingerprint - returns the fingerprint of an ADK key registered for this key Version 1.7.10.6 Release date: September 5 2014 Namespace DidiSoft.Pgp [*] KeyPairInformation.ExpirationTime - wasn't counting the additional validity seconds [+] KeyPairInformation.ValidSeconds - Returns key validity period in seconds counted from KeyPairInformation.CreationTime [+] KeyPairInformation.IsValidForever - Checks if the key has no expiration time [+] KeyPairInformation.IsValidNow - Checks if the current time is within the validity period of this key [+] KeyPairInformation.SubKey.ExpirationTime - Returns the key expiration date [+] KeyPairInformation.SubKey.ValidSeconds - Returns key validity period in seconds counted from KeyPairInformation.CreationTime [+] KeyPairInformation.SubKey.IsValidForever - Checks if the key has no expiration time [+] KeyPairInformation.SubKey.IsValidNow - Checks if the current time is within the validity period of this key [+] KeyPairInformation.SubKey.IsExpired - Checks if the current time is outside the validity period of this key [+] KeyPairInformation.SubKey.IsExpiredOnDate(date) - Checks if the secified time is outside the validity period of this key Version 1.7.10.5 Release date: August 20 2014 Namespace DidiSoft.Pgp [*] KeyStore.ChangeUserId - now throws DidiSoft.Pgp.Exceptions.WrongPasswordException, when the password of the private key is wrong; Version 1.7.10.4 Release date: August 12 2014 Namespace DidiSoft.Pgp [*] PGPLib.DecryptString - was treating some OpenPGP messages as files. Version 1.7.10.3 Release date: August 12 2014 Namespace DidiSoft.Pgp [+] PGPLib.OverrideKeyAlgorithmPreferences - controls should the algorithms choosed with the Compression, Cypher and Hash properties override the used key preferences. Default is false. Version 1.7.10.2 Release date: July 29 2014 Namespace DidiSoft.Pgp [*] KeyStore.ChangeUserId - now preserves key expiration time, when changing the user Id Version 1.7.10.1 Release date: July 24 2014 Namespace DidiSoft.Pgp [+] KeyStore.SetKeyExpirationTime - added overloaded versions that accept the expiration date as System.DateTime Version 1.7.10.0 Release date: July 18 2014 [!] DidiSoft.Pgp.dll - removed the dependency from System.DirectoryServices, making this way the library usable from MS SQL Server (tm) stored procedures [+] DidiSoft.Pgp.Net.LdapClient.dll - introduced a new DLL that exposes the LDAP keyserver connectivity features. Version 1.7.9.15 Release date: July 10 2014 Namespace DidiSoft.Pgp [+] KeyStore.SetKeyExpirationTime - methods for changing the expiration date of an OpenPGP key [+] KeyStore.ClearKeyExpirationTime - clears the key expiration time of a specified OpenPGP key, and makes the key valid forever Version 1.7.9.14 Release date: June 06 2014 Namespace DidiSoft.Pgp [+] PGPLib.EncryptFilePBE - added overloaded versions that support additional public key located in a KeyStore Version 1.7.9.13 Release date: May 30 2014 Namespace DidiSoft.Pgp [!*] PGPLib - can decrypt .pgp files with wrong internal length indicators. In earlier versions decryption was failing with EndOfStreamException : "Premature end of stream in PartialInputStream" Version 1.7.9.12 Release date: May 29 2014 [*] \Help\Sfx.zip - fixed missing resources Version 1.7.9.11 Release date: May 12 2014 Namespace DidiSoft.Pgp [+] KeyStore.GetKnownDesignatedRevokers - returns array of the keys that are authorized as designated revokers for a given key and are located in the same KeyStore Version 1.7.9.10 Release date: April 25 2014 Namespace DidiSoft.Pgp [+] KeyStore.CaseSensitiveMatchUserIds - a property that controls should the search perfomed by User Id, be case sensitive (true) or not (false). Default is true. [*] RevocationLib.RemoveDesignatedRevoker - fixed. Version 1.7.9.9 Release date: April 25 2014 Namespace DidiSoft.Pgp [+] KeyStore.GetKeys(userId) - returns array of KeyPairInformation objects that contain the specified User ID or hexadecimal Key ID [!] KeyStore.GetKey(userId) - now respects the value of KeyStore.PartialMatchUserIds [+] KeyPairInformation.IsDesignatedRevoker(KeyPairInformation) - checks is a given key a designated revoker for this key [+] RevocationLib.RemoveDesignatedRevoker - a set of methods for removing a designated revoker from a key [+] RevocationLib.GetRevocationReasonCode - a set of methods for obtaining the revocation reason code from a revoked OpenPGP public key or revocation certificate [+] RevocationLib.GetRevocationReasonDescription - a set of methods for obtaining the revocation reason description from a revoked OpenPGP public key or revocation certificate Version 1.7.9.8 Release date: April 07 2014 Namespace DidiSoft.Pgp [*] PGPLib - custom ASCII comment and version headers were not applied to clear text signed data. Version 1.7.9.7 Release date: March 30 2014 Namespace DidiSoft.Pgp [*] KeyStore.ImportPublicKey - fix to take into account the the KeyStore.UseUtcDate property for X.509 certificates Version 1.7.9.6 Release date: March 28 2014 Namespace DidiSoft.Pgp [+] KeyStore.KeyNotFoundHandler(KeyStore store, KeyNotFoundEventArgs e) - delegate for the event OnKeyNotFound; [+] KeyStore.OnKeyNotFound - event fired when a key searched in this instance does not exist [+] class KeyStore.KeyNotFoundEventArgs - event argument sub class, used as parameter for the OnKeyNotFound event [+] KeyStore.SaveToStreamProtected - saves the KeyStore data to a stream, protected with a password [+] KeyStore.SaveToFileProtected - saves the KeyStore data to a file, protected with a password [+] KeyStore.SaveToFile - saves the KeyStore data to a file, unprotected Namespace DidiSoft.Pgp.Inspect [+] PGPInspectLib.ListSignatures - overloaded version that accepts a KeyStore parameter [+] PGPInspectLib.ListSigningKeyIds - overloaded version that accepts a KeyStore parameter [+] PGPInspectLib.OpenPgpFile - overloaded version that accepts a KeyStore parameter [+] PGPInspectLib.OpenPgpStream - overloaded version that accepts a KeyStore parameter Version 1.7.9.5 Release date: March 21 2014 Namespace DidiSoft.Pgp [*] KeyStore.ChangePrivateKeyPassword - critical bug, the password change wasn't reflected in the internal structure of KeyPairInformation objects [*] KeyStore.ImportPrivateKey - when importing X.509 certificate the expiration date was not reflected [*] KeyStore.ImportPrivateKey - when importing X.509 certificate if the password was wrong DidiSoft.Pgp.Exceptions.WrongPasswordException wasn't thrown Version 1.7.9.4 Release date: March 19 2014 [!] PGPLib - now throws System.IO.FileNotFoundException if a public key file parameter does not exist, instead of DidiSoft.Pgp.Exceptions.WrongPublicKeyException Version 1.7.9.3 Release date: March 17 2014 Changes in namespace DidiSoft.Sfx [*] SfxCreator.EncryptFileToExe - fixed icon on title bar and missing Copyright on the generated EXE file Properies dialog. Version 1.7.9.2 Release date: March 14 2014 Changes in namespace DidiSoft.Pgp.Net [+] HkpClient - added constructor with host name only [!] LdapClient.SubmitKey - fixed error when the key already exists on the keyserver NOTE: This method cannot upload keys into keyserver.pgp.com due to reasons mentioned in http://keyserver.pgp.com/vkd/VKDVerificationPGPCom.html [*] SfxCreator.EncryptFileToExe - the output wasn't properly stored. Version 1.7.9.1 Release date: March 12 2014 Changes in namespace DidiSoft.Pgp [!] PGPLib - handles transparently MemoryStream with position at its end. Version 1.7.9.0 Release date: March 10 2014 New namespace DidiSoft.Pgp.Net [+] LdapClient - provides access to LDAP OpenPGP key servers (Symantec PGP Universal Server, OpenLDAP with pgp schema) [+] HkpClient - provides access to HKP OpenPGP key servers (e.g. pgp.mit.edu) Changes in namespace DidiSoft.Pgp [+] PGPLib.VerifyFileWithoutExtracting - verifies the signature of a .pgp archive without decrypting it [+] PGPLib.VerifyStreamWithoutExtracting - verifies the signature of a .pgp archive without decrypting it Changes in namespace DidiSoft.Sfx [!] The extraction dialog window displays the executable file icon in its title bar. Version 1.7.8.19 Release date: February 21 2014 Changes in namespace DidiSoft.Pgp [+] PGPLib.Pgp2Compatible - property that gets/sets PGP 2.x encryption and signing compatibility mode. Version 1.7.8.18 Release date: February 18 2014 Changes in namespace DidiSoft.Sfx [+] SfxOptions.WindowTitle - property for customizing the title of the self exctracting executable [+] SfxOptions.SourceFolder - source folder containing the self exctracting code Version 1.7.8.17 Release date: February 05 2014 [*] PGPLib.DecryptTo - fix when the pgp data contains only one file and its name is empty Version 1.7.8.16 Release date: February 03 2014 Changes in namespace DidiSoft.Pgp [+] KeyStore.UseUtcDate - setting that controls should the creation time of newly generated keys be set as DateTime.UtcNow (true) or DateTime.Now (false) [*] fix in PGPLib preferred cipher selection when encrypting strings Version 1.7.8.15 Release date: January 10 2014 Changes in namespace DidiSoft.Pgp [+] property PGPLib.AsciiCommentHeader - if set will produce "Comment: " line in pgp archives in ASCII armour format [+] property KeyStore.AsciiCommentHeader - if set will produce "Comment: " line in keys exported in ASCII armour format [+] property KeyPairInformation.AsciiCommentHeader - if set will produce "Comment: " line in keys exported in ASCII armour format [+] property RevocationLib.AsciiCommentHeader - if set will produce "Comment: " line in revocation certificates and keys exported in ASCII armour format Version 1.7.8.14 Release date: January 08 2014 [+] Added DLL files for Xamarin.iOS and located in Bin\Xamarin.iOS Version 1.7.8.12 Release date: January 02 2014 Changes in namespace DidiSoft.Pgp [+] PGPLib.IncludeBaseFolder - controls when encrypting a whole folder should the folder also be included (default is true) in the archve or only its contents (false) [*] KeyStore.GetKey(keyId) - now returns null in case of non existent key [!] KeyPairInformation - added default constructor and protected members in order to be extended for custom purposes. Version 1.7.8.11 Release date: December 27 2013 [+] PGPLib.EncryptFolder - overloaded versions that accept keys located in a KeyStore Version 1.7.8.10 Release date: December 23 2013 [*] KeyStore.ExportKeyRing - Fxed the output of the custom ASCII armored version header Version 1.7.8.9 Release date: December 20 2013 Changes in namespace DidiSoft.Pgp [+] KeyStore.AsciiVersionHeader - property to get and set the "Version: XXX" header information in ASCII armored keys exported from the KeyStore. [+] KeyPairInformation.AsciiVersionHeader - property to get and set the "Version: XXX" header of an exported key. Instaces obtained from a KeyStore object automatically inherit the same property value. [+] KeyPairInformation.RevocationLib - property to get and set the "Version: XXX" header of keys signed as revoked. Version 1.7.8.8 Release date: December 16 2013 [!] KeyStore.Password - now is writable and can be used to change the password of the currently opened file based KeyStore Version 1.7.8.7 Release date: December 14 2013 [!] KeyStore.CheckPassword(fileName, password) - now throws System.IO.FileNotFoundException if there is no such file. Version 1.7.8.6 Release date: December 12 2013 [!] The constructor KeyStore(fileName, password) now will throw an System.IO.IOException if it cannot create the specified fileName (for example when there is no such directory). Version 1.7.8.5 Release date: December 04 2013 Changes in namespace DidiSoft.Pgp [+] PGPLib.LogMessageEvent - event for obtaining verbose logging information Changes in namespace DidiSoft.Pgp.Logging [!] LogEventArgs.EventTime caclulation was changed Changes in namespace DidiSoft.Pgp.Inspect [+] SignatureItem.UserId - returns the User Id of the signing key (if available) [+] PGPInspectLib.ListSignatures - returns array of SignatureItem objects from a signed or signed and encrypted OpenPGP file [+] PGPInspectLib.ListDetachedSignatureFile - returns array of SignatureItem objects from a detached OpenPGP signature [+] PGPInspectLib.ListDetachedSignatureStream - returns array of SignatureItem objects from a detached OpenPGP signature Version 1.7.8.4 Release date: November 27 2013 Changes in namespace DidiSoft.Pgp [+] KeyStore.AddJpegImage(string userId, string signingUserId, string privateKeyPassword, byte[] jpegImageData) - allows to add a JPEG photo to a public key by signing it with a different private key [+] KeyStore.AddJpegImage(long keyId, long signingSecretKeyId, string privateKeyPassword, byte[] jpegImageData) - allows to add a JPEG photo to a public key by signing it with a different private key Version 1.7.8.3 Release date: November 15 2013 Changes in namespace DidiSoft.Pgp [+] added property PGPLib.TrialVersion - indicates is this instance of the library an evaluation copy or a production version [!] PGPLib - all methods that expect keys or OpenPGP data to decrypt/verify as a string path location now can also accepts ASCII armoured data [!] KeyStore.ImportPublicKey - now accepts also keys as ASCII armoured strings [!] KeyStore.ImportPrivateKey - now accepts also keys as ASCII armoured strings [!] KeyStore.ImportKeyRing - now accepts also keys as ASCII armoured strings Version 1.7.8.2 Release date: November 1 2013 [*] fixed KeyStore.ContainsPublicKey(string) - was returning false when the parameter was a hexadecimal key Id. [*] fixed KeyStore.GenerateKeyPair() - generated RSA key pairs were not trusted when imported in PGP Universal Server. Version 1.7.8.1 Release date: October 16 2013 Note: this release adds support for manipulating JPEG photo images associated with OpenPGP keys. Changes in namespace DidiSoft.Pgp [+] KeyPairInformation.GetJpegImageData - Retrieves an associated JPEG photo image bytes from an OpenPGP key [+] KeyPairInformation.GetJpegImagesCount - Retrieves the number of JPEG photo images associated with this key [+] KeyStore.AddJpegImage - Adds a JPEG photo image to an OpenPGP key [+] KeyStore.DeleteJpegImage - Removes a JPEG photo image from an OpenPGP key [+] KeyStore.GetJpegImageData - Retrieves an associated JPEG photo image bytes from an OpenPGP key [+] KeyStore.GetJpegImagesCount - Retrieves the number of JPEG photo images associated with this key Changes in namespace DidiSoft.Pgp.WinRT (assembly file: DidiSoft.Pgp.WinRT.winmd) [+] KeyStoreRT.AddJpegImage - Adds a JPEG photo image to an OpenPGP key [+] KeyStoreRT.DeleteJpegImage - Removes a JPEG photo image from an OpenPGP key [+] KeyStoreRT.GetJpegImageData - Retrieves an associated JPEG photo image bytes from an OpenPGP key [+] KeyStoreRT.GetJpegImagesCount - Retrieves the number of JPEG photo images associated with this key Changes in /Examples folder [!] project KeyToolCS - key properties display the first associated photo with a key. [+] project KeyToolCS - added menu item "Keys/Add JPEG photo ..." [!] project KeyToolVB - key properties display the first associated photo with a key. [+] project KeyToolVB - added menu item "Keys/Add JPEG photo ..." [+] PGPLibExampleCS/KeyStoreImages.cs - shows opertions with OpenPGP key images [+] PGPLibExampleVB/KeyStoreImages.vb - shows opertions with OpenPGP key images Version 1.7.7.15 Release date: October 10 2013 [*] PGPLib.DecryptTo - when decrypting a multiple recipients message and in a KeyStore and there were multiple matching private keys, if we have specified the password for a second matching private key a WrongPasswordException was thrown. This has been fixed and now it decrypts with the second matching private key as well. Version 1.7.7.14 Release date: October 08 2013 Changes in namespace DidiSoft.Pgp.Inspect [+] added class SignatureItem - information for an OpenPGP signature [+] PGPInspectLib.ListRevocationCertificateFile - lists Key Id's mentioned in the revocation certificate [+] PGPInspectLib.ListRevocationCertificateText - lists Key Id's mentioned in the revocation certificate [+] PGPInspectLib.ListRevocationCertificateStream - lists Key Id's mentioned in the revocation certificate Changes in namespace DidiSoft.Pgp [!] RevocationLib.RevokeKey - now returns KeyPairInformation representing the modified key [!] RevocationLib.RevokeKeyWithDesignatedRevoker - now returns KeyPairInformation representing the modified key [!] RevocationLib.RevokeKeyWithRevocationCertificateFile - now returns KeyPairInformation representing the modified key [!] RevocationLib.RevokeKeyWithRevocationCertificateText - now returns KeyPairInformation representing the modified key [!] RevocationLib.RevokeUserIdSignature - now returns KeyPairInformation representing the modified key Version 1.7.7.13 Release date: October 02th 2013 [!] PGPInspectLib.IsPublicKeyEncrypted - modified to clean content before checking [!] PGPInspectLib.ListEncryptionKeyIds - modified to clean content before checking Version 1.7.7.12 Release date: September 30th 2013 [*] Fixed bug in KeyStore.GetKey(keyId), it wasn't returning the key when the key Id belongs to an OpenPGP/ECC key Version 1.7.7.11 Release date: September 20th 2013 [*] Fixed bug in compression of signed and encrypted data with version 3 signatures. [+] PGPLib.SignAndEncryptFileV3 - added an overloaded version that accepts multiple public keys. Version 1.7.7.10 Release date: September 19th 2013 [*] When signing a public key with a private key multiple times, the same signature was added also multiple times. This has been fixed and now only one signature from a particular secret key will exists at any time. Version 1.7.7.9 Release date: September 4th 2013 [+] Added property KeyPairInformation.ExpirationTime Version 1.7.7.8 Release date: August 27th 2013 [+] Added support for X.509 certificates to KeyStore.ImportPublicKey [+] Added support for X.509 private keys to KeyStore.ImportPrivateKey [+] Added method PGPLib.SignAndEncryptStream - with support to encrypt for multiple recipients Version 1.7.7.7 Release date: August 23th 2013 Changes in namespace DidiSoft.Pgp [+] added PGPLib.EncryptFile - an overloaded version that accepts a KeyStore and multiple recipients [+] added PGPLib.EncryptString - an overloaded version that accepts a KeyStore and multiple recipients [+] added KeyStore.ImportPublicKey - an overloaded version that accepts a FileInfo parameter [*] Fixed bug in PGPLib.DecryptString - when decrypting a multiple recipients message and in a KeyStore there are multiple matching private keys, if we have specified the password for the second matching private key a WrongPasswordException was thrown. This has been fixed and now it decrypts with the second matching private key as well. Version 1.7.7.6 Release date: August 16th 2013 [*] Fixed bug in PGPLib.DecryptString - exception was thrown when decrypting signed message [*] Fixed bug in PGPLib.DecryptAndVerifyString - empty result string was returned when the public key didn't match the digital signature. Version 1.7.7.5 Release date: August 05th 2013 [!] The Windows 8 WinRT files were renamed as follows: DidiSoft.Pgp.WinRT.dll -> DidiSoft.Pgp.dll DidiSoft.Pgp.WinJS.winmd -> DidiSoft.Pgp.WinRT.winmd The namespace that provides support for Windows.Storage.StorageFile was also renamed to DidiSoft.Pgp.WinRT. [!] Encryption and signing with X.509 keys now uses internally OpenPGP version 4 keys with constant Key Id (the time parameter used in the Key Id calculation is now the "NotBefore" date of the X.509 certificate instead of the current system time) Version 1.7.7.4 Release date: July 22th 2013 [*] Fixed bug when generating binary detached signatures with the methods PGPLib.DetachedSignFile/Stream Version 1.7.7.3 Release date: July 17 2013 [+] Added transparent support in the DidiSoft.Pgp.PGPLib class for X.509 keys located in .p12/.pfx and certificates in .cer/.p7b files. The implementation mimics the behaviour of Symantec PGP Desktop 10.x. At this stage the implementation is not compatible with GpgSM (project Sphinx) Version 1.7.7.2 Release date: July 08 2013 [*] Fixed bug in OpenPGP ECC decryption. The encrypted and padded session key was read as serialized BigInteger type but in some cases this was leading to 'loosing' of the first byte. This was corrected and now the session key is being read as a plain byte array. Version 1.7.7.1 Release date: July 01 2013 [*] Fixed bug in method PGPLib.SignFile with a private key as a Stream parameter Version 1.7.7.0 Release date: June 25 2013 Changes in namespace DidiSoft.Pgp [+] enum EcCurve - lists the Elliptic Curves supported by OpenPGP (defined in RFC 6637) [+] enum member KeyAlgorithm.EC - represents an asymmetric encryption with Elliptic curve/Diffie Hellman [+] property KeyPairInformation.AlgorithmType - gets the asymmetric encryption algorithm used by this key [+] method KeyStore.GenerateEccKeyPair - generates an Elliptic Curve OpenPGP key pair [+] method KeyStore.GenerateRsaKeyPair - generates an RSA OpenPGP key pair with default algorithm preferences [+] method KeyStore.GenerateElgamalKeyPair - generates an Elgamal (DH/DSS) OpenPGP key pair with default algorithm preferences [+] method PGPKeyPair.GenerateEccKeyPair - generates an Elliptic Curve OpenPGP key pair [+] method PGPKeyPair.GenerateRsaKeyPair - generates an RSA OpenPGP key pair with default algorithm preferences [+] method PGPKeyPair.GenerateElgamalKeyPair - generates an Elgamal (DH/DSS) OpenPGP key pair with default algorithm preferences Changes in namespace DidiSoft.Pgp.WinJS (WinRT DLL file DidiSoft.Pgp.WinJS.winmd) [+] enum EcCurve - lists the supported Elliptic Curves supperted by OpenPGP (defined in RFC 6637) [+] enum member KeyAlgorithm.EC - represents an asymmetric encryption with Elliptic curve/Diffie Hellman [+] method KeyStoreRT.GenerateEccKeyPairAsync - generates an Elliptic Curve OpenPGP key pair Version 1.7.6.7 Release date: May 27 2013 [+] DLL files that target Xamarin.Android located in the \Bin\Xamarin.Android subfolder of the libary installation folder. Version 1.7.6.6 Release date: May 20 2013 [*] Fixed KeyStore.ContainsPrivateKey(String) It was returning true, even if there was no private key with the given user id or hexadecimal key id. Version 1.7.6.5 Release date: May 16, 2013 Changes in namespace DidiSoft.Pgp [+] KeyStore.AddUserId - Appends an additional User Id signature to a key [+] KeyStore.DeleteUserId - Removes a user Id signature from a key [+] KeyStore.ChangeUserId - Changes an existing user Id signature of a key [+] KeyStore.ChangePrimaryUserId - Changes the primary (first) user Id signature of a key Version 1.7.6.4 Release date: May 13, 2013 Changes in namespace DidiSoft.Pgp [+] KeyPairInformation.ExportKeyPair - exports both he public and private keys into a single file/stream [+] PGPLib.EncryptString - an overloaded version that accepts public key as stream [+] KeyStore.Purge - clears the internal state of the key store and deletes all keys contained in it. Version 1.7.6.3 Release date: April 25, 2013 [*] Fixed importing of ASCII armour keys with Unix/MacOS line endings. Version 1.7.6.2 Release date: April 09, 2013 Namespace DidiSoft.Pgp [!] Workaround for loading ASCII keys with specific formatting. [+] KeyStore.GetKey(userId) - returns a KeyPairInformation object for the requested key [+] KeyStore.GetKey(keyId) - returns a KeyPairInformation object for the requested key [!] KeyPairInformation.PreferredCompressions - if not set returns empty array instead of null [!] KeyPairInformation.PreferredCyphers - if not set returns empty array instead of null [!] KeyPairInformation.PreferredHashes - if not set returns empty array instead of null [!] KeyPairInformation.SignedWithKeyIds - if not set returns empty array instead of null Version 1.7.6.1 Release date: April 03, 2013 Namespace DidiSoft.Pgp [*] PGPLib.SignAndEncryptFiles - fixed not closing the data file on error [*] PGPLib.SignAndEncryptFilePBE - fixed not closing the data file on error [*] PGPLib.DecryptFilePBEInFolder - fixed not closing the encrypted file on error [*] PGPLib.DecryptFileInFolder - fixed not closing the encrypted file on error [*] KeyStore.SignPublicKey - fixed not throwing WrongPasswordException on mistaken password [!] RevocationLib.RevokeKey - now throws WrongPasswordException on mistaken password [!] RevokeKeyWithDesignatedRevoker - now throws WrongPasswordException on mistaken password Version 1.7.6.0 Release date: March 26, 2013 Added two new DLL files for Windows 8 Windows Runtime (WinRT) applications [+] DidiSoft.Pgp.WinRT.dll - for use in .NET WinRT applications Provides OpenPGP routines that work with String and Stream. [+] DidiSoft.Pgp.WinJS.winmd - for use in WinJS/HTML and .NET WinRT applications. Provides OpenPGP routines that work with Windows.Storage.StorageFile. Namespace DidiSoft.Pgp changes [!] All PGPLib.Decrypt methods - support for decrypting files with wildcard Key ID (erased Key ID) [!] All PGPLib.DecryptAndVerify methods - support for decrypting files with wildcard Key ID (erased Key ID) Version 1.7.5.3 Release date: March 07, 2013 [+] PGPLib.SignAndEncryptString(string message, string privateKey, string keyPassword, string publicKey); [+] PGPLib.DecryptAndVerifyString(string encryptedMessage, string privateKey, string keyPassword, string publicKey, out string decryptedMessage); Version 1.7.5.2 Release date: February 05, 2013 [*] PGPLib.ClearSignString - fixed bug in clear text signing multiple line messages [*] PGPLib.ClearSignFile - fixed bug in clear text signing multiple line messages [*] PGPLib.ClearSignStream - fixed bug in clear text signing multiple line messages Version 1.7.5.1 Release date: November 30, 2012 [*] KeyStore.GenerateKeyPair - key expiration time was ignored in Authora EDGE, because the KeyExpirationTime signature was marked "critical". Now the key generation marks the KeyExpirationTime signature as non-critical and it is recognized by Authora EDGE. Version 1.7.5.0 Release date: November 28, 2012 [+] MS Help Viewer 2.0 (Visual Studio 2012) help integration. [+] Added DLL files for Windows Phone 7 and .NET Compact Framework 2.0 Fixed bugs [*] Fixed importing large .pkr and .skr keyrings from PGP(r) 6.5 into a KeyStore object [*] PGPLib.EnryptFile - now throws KeyIsExpiredException if we try to encrypt with an expired public key [*] PGPLib.EnryptFile - now throws KeyIsRevokedException if we try to encrypt with a revoked public key [*] PGPLib.EnryptString - fixed a bug with long String messages [*] DidiSoft.Pgp.Exceptions.NonPGPDataException is now made public New classes and enumerations [+] exception DidiSoft.Pgp.Exceptions.FileIsPBEEncrypted - thrown if we try to decrypt a password encrypted file with a private key [+] enum DidiSoft.Pgp.ContentDataType - available content types for an OpenPGP archive Changes in namespace DidiSoft.Pgp [+] PGPLib.ContentType - sets the content type for the next encryption calls (see ContentDataType) [!] PGPLib.SignAndEncryptStream - the output stream is now left open after the method call [!] PGPLib.DecryptFile - throws DidiSoft.Pgp.Exceptions.FileIsPBEEncrypted if we try to decrypt a password encrypted file [!] PGPLib.DecryptStream - throws DidiSoft.Pgp.Exceptions.FileIsPBEEncrypted if we try to decrypt a password encrypted file [!] PGPLib.DecryptString - throws DidiSoft.Pgp.Exceptions.FileIsPBEEncrypted if we try to decrypt a password encrypted file [+] PGPLib.DecryptStreamPBE - decrypts OpenPGP password encrypted streams [+] PGPLib.DecryptStringPBE - decrypts OpenPGP password encrypted strings [+] PGPLib.DetachedVerifyFile - performs verification of detached OpenPGP signatures [+] PGPLib.SignStreamV3 - methods for OpenPGP signing with the old version 3 signature format [+] KeyStore.LoadFromStream - method compatible with the file based KeyStore [+] KeyPairInformation.IsLegacyRSAKey - property that indicates that a key is a legacy PGP(r) 2.x created key [+] KeyPairInformation.PreferredHashes - property that lists the preferred hash algorithms for a key [+] KeyPairInformation.SignedWithKeyIds - property that lists the Key ID's of the keys that have signed a key Version 1.7.4.32 Release date: November 09, 2012 [*] Fixed exception when verifying an OpenPGP signed file without extracting it. Version 1.7.4.31 Release date: October 24, 2012 [*] When encrypting with an expired key DidiSoft.Pgp.Exceptions.KeyIsExpiredException was not thrown Version 1.7.4 June 20, 2012 I. Fixed bugs [*] Fixed a bug when encrypting large files [!] PGPLib.EncryptStream without a file name label is now obsolete [!] PGPLib.EncryptStreamPBE without a file name label is now obsolete Note: They can be replaced directly by passing PGPLib.CONSOLE as a file name label parameter to the equivalent overloaded versions II. DidiSoft.Pgp.PGPLib class changes [+] Added property AsciiVersionHeader - that can be used to see/modify the Version: BCPG C# v1.7.1.0 header line in ASCII armored output [+] Added constant PGPLib.CONSOLE - indicates that the encrypted data is 'for your eyes only' [+] Added method EncryptStreamPBE - overloaded version that accepts both a public key and a password III. DidiSoft.Pgp.KeyStore class changes [+] Added method KeyStore.ImportPublicKey - overloaded version that accepts stream source [+] Added method KeyStore.ImportPrivateKey - overloaded version that accepts stream source [+] Added method KeyStore.ImportKeyRing - overloaded version that accepts stream source [+] Added method KeyStore.ImportKeyStore - can be used to import the contents of another KeyStore instance [+] Added method KeyStore.ExportKeyRing - overloaded version that accepts stream as destination IV. DidiSoft.Pgp.Inspect.PGPInspectLib class changes [+] Added method IsPublicKeyEncrypted - tells is an OpenPGP archive encrypted with a public key [+] Added method IsPBEEncrypted - tells is an OpenPGP archive encrypted with a password [+] Added method IsSignedOnly - tells is an OpenPGP archive only digitally signed without encryption [+] Added method ListEncryptionKeyIds - returns the Key Id's of the keys that have encrypted a given OpenPGP archive [+] Added method ListSigningKeyIds - returns the Key Id's of the keys that have signed a given OpenPGP archive V. DidiSoft.Pgp.KeyPairInformation interface changes [+] Added property PreferredCompressions - that shows the preferred compression algorithms supported by this key [+] Added property PreferredCyphers - that shows the preferred cypher algorithms supported by this key. [+] Added static method KeyIdToHex - that converts a 64 bit Key ID into a hexadecimal Key Id string VI. Silverlight support A separate DLL files Build for Silverlight are now available under the /Bin/Silverlight folder Supported Silverlight versions : 3, 4, 5 Version 1.7.3 March 20, 2012 I. Fixed bugs [*] Fixed encrypting folders with long names (more than 100 characters) [*] Fixed cleanup of half encrypted files after an exception for all methods. [*] Fixed bug when creating an uncompressed one pass signed and encrypted archive. [!] Decripting methods now check the integrity protection of the data and throws Didisoft.Pgp.Exceptions.IntegrityCheckException II. KeyStore modifications [!] KeyStore.GenerateKeyPair now returns a KeyPairInformation instance representing the generated key [!] KeyStore.ImportKeyRing now returns an array of KeyPairInformation instances representing the imported key(s) [!] KeyStore.ImportPublicKey now returns an array of KeyPairInformation instances representing the imported key [!] KeyStore.ImportPrivateKey now returns an array of KeyPairInformation instances representing the imported key III. Inspecting the contents of OpenPGP encrypted data Added namespace Didisoft.Pgp.Inspect [+] Added class Didisoft.Pgp.PGPInspectLib that provides methods for inspecting the content of OpenPGP data [+] Added class Didisoft.Pgp.ContentItem that represents information for an item in an OpenPGP archive IV. Web of Trust [+] Added enum TrustLevel that holds supported trust values Added methods for marking a public key as Trusted introducer [+] KeyStore.SignPublicKeyAsTrustedIntroducer(long keyId, long signKeyId, String signPassword) [+] KeyStore.SignPublicKeyAsTrustedIntroducer(String keyUserId, String signKeyUserId, String signPassword) Added methods for signing a public key [+] KeyStore.SignPublicKey(long keyId, long signKeyId, String signPassword) [+] KeyStore.SignPublicKey(String keyUserId, String signKeyUserId, String signPassword) Added methods for explicitly setting the Trust of a key located in a KeyStore [+] KeyStore.SetTrust(String keyUserId, TrustLevel trustValue) [+] KeyStore.SetTrust(long keyId, TrustLevel trustValue) Added methods and property for checking the trust value of a given key [+] KeyStore.IsTrusted(String keyUserId) [+] KeyStore.IsTrusted(long keyId) [+] KeyPairInformation.Trust V. Detached signatures [+] PGPLib.DetachedSignFile creates a detached OpenPGP signature for a file [+] PGPLib.DetachedSignStream creates a detached OpenPGP signature for a data stream [+] PGPLib.DetachedSignString creates a detached OpenPGP signature for string message [+] PGPLib.DetachedVerifyStream verifies a detached OpenPGP signature against a data stream [+] PGPLib.DetachedVerifyString verifies a detached OpenPGP signature against a string message VI. Partial match User Id's [+] Added property KeyStore.PartialMatchuserIds - if enabled the methods that search keys in a KeyStore by User Id will match them on part of the User Id as well VII. Expired and revoked keys [+] Added property PGPLib.UseExpiredKeys - check are the encryption keys expired [+] Added property PGPLib.UseRevokedKeys - check are the encryption keys revoked VIII. New Exceptions: [+] Added class Didisoft.Pgp.Exceptions.IntegrityCheckException (extends PGPException) thrown if an integrity protected OpenPGP archive is corrupted [+] Added Didisoft.Pgp.Exceptions.KeyIsExpiredException (extends PGPException) thrown from all Encrypt and SignAndEncrypt methods when the supplied public key is expired. Can be suppressed with PGPLib.UseExpiredKeys [+] Added Didisoft.Pgp.Exceptions.KeyIsRevokedException (extends PGPException) thrown from all Encrypt and SignAndEncrypt methods when the supplied public key is revoked. Can be suppressed with PGPLib.UseRevokedKeys Version 1.7.2 November 09, 2011 [*] Fixed bug in PGPLib when encrypting with no compression! [+] Added new exception DidiSoft.Pgp.Exceptions.NonPGPDataException, that indicates that the input is not a valid OpenPGP message Modified methods that throw NonPGPDataException : [!] PGPLib.DecryptAndVerifyFile - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.DecryptAndVerifyFilePBE - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.DecryptAndVerifyString - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input string is not a valid OpenPGP message [!] PGPLib.DecryptFile - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.DecryptStream - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input data is not a valid OpenPGP message [!] PGPLib.DecryptBytes - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input data is not a valid OpenPGP message [!] PGPLib.DecryptString - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input data is not a valid OpenPGP message [!] PGPLib.DecryptTo - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.DecryptFilePBE - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.DecryptStreamInFolder - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.DecryptFileInFolder - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.DecryptStreamPBEInFolder - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.DecryptFilePBEInFolder - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.VerifyString - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input data is not a valid OpenPGP message [!] PGPLib.VerifyFile - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file [!] PGPLib.VerifyStream - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input data is not a valid OpenPGP message [!] PGPLib.DecryptPBETo - throws DidiSoft.Pgp.Exceptions.NonPGPDataException if the input file is not a valid OpenPGP file DidiSoft.Pgp.KeyPairInformation changes: [+] Added method KeyPairInformation.CheckPassword(password) - checks if a password for a private key is correct [+] Added property KeyPairInformation.IsExpired - returns if this key is expired [+] Added method KeyPairInformation.IsExpiredOnDate(date) - returns whether this key will be expired on a given date DidiSoft.Pgp.KeyStore changes: [+] Added static method KeyStore.OpenInMemory() - creates an in memory KeyStore [+] Added static method KeyStore.OpenFile(file, password) - equivalent to the constructor KeyStore(file, password) [+] Added method KeyStore.IsInMemory - checks if this KeyStore is located in memory [+] Added method KeyStore.GetSecretKeysData() - returns the private keys containing in this KeyStore serialized as bytes [+] Added method KeyStore.GetPublicKeysData() - returns the public keys containing in this KeyStore serialized as bytes [+] Added method KeyStore.GetPublicKeysWithUserId(userId) - returns the public keys with the specified userId serialized as bytes [+] Added method KeyStore.GetPublicKeyWithKeyId(keyId) - returns the public keys with the specified keyId serialized as bytes [!] KeyStore.ImportPublicKey now throws a WrongPublicKeyException if there is no public key in the input file [!] KeyStore.ImportPrivateKey now throws a WrongPrivateKeyException if there is no private key in the input file [+] Added overloaded method KeyStore.ImportPrivateKey(file) [+] Added overloaded method KeyStore.ImportPrivateKey(file) [+] Added method KeyStore.ExportPublicKeyStream(userId) - exports a public key into a Stream [+] Added method KeyStore.ExportPublicKeyStream(keyId) - exports a public key into a Stream [+] Added method KeyStore.LoadFromStream(stream) - suitable for loading a previously serialized in memory Keystore [+] Added method KeyStore.SaveToStream(stream) - suitable for storing an in memory Keystore [+] Added method KeyStore.CheckPassword(file, password) - checks if a password for a KeyStore is correct Version 1.7.1 July 20, 2011 [*] Fixed decryption of conventional encrypted (PBE) files, created with McAfee E-Business server 7.x and PGP 2.6.x [*] Fixed exception caused by keys exported from GnuPG GPA. [+] Added com.didisoft.pgp.exceptions.NonPGPDataException extending PGPException and thrown when a non PGP data is passed for decryption or veification [+] Added method PGPLib.SignFileV3 - signes files with OpenPGP version 3 signatures for compatibility with PGP 6.5 and below [+] Added method PGPLib.SignStringV3 - signes strings with OpenPGP version 3 signatures for compatibility with PGP 6.5 and below [+] Added method PGPLib.SignAndEncryptFileV3 - signes and encrypts files in one pass with OpenPGP version 3 signatures for compatibility with PGP 6.5 and below [+] Added method PGPLib.SignAndEncryptStringV3 - signes and encrypts strings in one pass with OpenPGP version 3 signatures for compatibility with PGP 6.5 and below Version 1.7.0 May 19, 2011 [!] The library is now distributed as a signed installable EXE file contained inside pgpnet.zip Namespace change [!] The Assembly and DLL name has been changed from PGPLib to DidiSoft.Pgp [!] The library namespace has been changed to DidiSoft.Pgp. The old namespace DidiSoft is perserved as Obsolete for backward compatibility. * Existing code will still run. * New exceptions extending PgpException: [+] Added namespace Didisoft.Pgp.Exceptions, containing exceptions that extend Org.BouncyCastle.OpenPgp.PgpException [+] Added class Didisoft.Pgp.Exceptions.WrongPrivateKeyException - exception to indicate that we have supplied wrong private key [+] Added class Didisoft.Pgp.Exceptions.WrongPasswordException - exception to indicate that we have supplied wrong password [+] Added class Didisoft.Pgp.Exceptions.WrongPublicKeyException - exception to indicate that a public key has not been found [+] Added class Didisoft.Pgp.Exceptions.FileIsEncryptedException - exception to indicate that a file is encrypted Multiple files encryption: [+] Added method PGPLib.EncryptFiles - for encryption of multiple files into a single OpenPGP file [+] Added method PGPLib.DecryptFileTo - decrypts multi file OpenPGP archive created with PGP Desktop 9+ into a folder [+] Added method PGPLib.DecryptStreamTo - decrypts multi file OpenPGP archive stream created with PGP Desktop 9+ into a folder New decryption methods [+] Added method PGPLib.DecryptStream - decrypts an OpenPGP archive stream [+] Added method PGPLib.DecryptBytes - decrypts OpenPGP byte array data Decryption of password based encrypted (PBE) files: [+] Added method PGPLib.DecryptFilePBE - decrypts password encrypted PGP files. Self extracting (SFX) archives creation [+] Added namespace DidiSoft.Sfx [+] Added class DidiSoft.Sfx.SfxCreator - creates managed EXE files with embedded OpenPGP encrypted data (Just like PGP(r) Desktop). [+] Added class DidiSoft.Sfx.SfxOptions - settings for customization of the self extracting EXE files Version 1.6.3 March 18, 2011 [*] Fixed OutOfMemoryException when encrypting large files (> 2 GB) [*] Fixed PGPLib.VerifyString to return [false] when there is no signature [*] Fixed PGPLib.VerifyFile to return [false] when there is no signature [*] Fixed PGPLib.DecryptAndVerifyString to return [false] when there is no signature [*] Fixed PGPLib.DecryptAndVerifyFile to return [false] when there is no signature [+] Added PGPLib.SignAndEncryptFilePBE that allows encryption with an additional password (symmetric encryption), that can be used later for decryption [+] Added PGPLib.DecryptFilePBE that can be used to decrypt a PGP archive encrypted with a symmetric encryption password [+] Added PGPLib.DecryptAndVerifyFilePBE that can be used to decrypt a PGP archive encrypted with a symmetric encryption password and verifies the validity of its digital signature Version 1.6.2 February 09, 2011 [+] Added PGPLib.EncryptFile with support for multiple recipients [+] Added PGPLib.EncryptString with support for multiple recipients [+] Added PGPLib.EncryptFiles that encrypts multiple files in one PGP archive. [+] Added PGPLib.EncryptFolder that encrypts a folder with its contents into a single PGP archive. [+] Added PGPLib.DecryptTo with support for multi file PGP archives. [*] Fixed bug in PGPLib.DecryptAndVerify when the supplied public key for verification is invalid. Previously a NullReferenceException was thrown, now an ArgumentException is thrown with detailed information. [+] Added sub class KeyPairInformation.SubKey - represents sub key in a key ring [+] Added sub class KeyPairInformation.PublicSubKeys - array with all public sub key in this key ring [+] Added sub class KeyPairInformation.PrivateSubKeys - array with all private sub key in this key ring [+] Added KeyPairInformation.Revoked - is this key pair revoked [+] Added KeyPairInformation.EncryptionKey - can this key be used for encryption [+] Added KeyPairInformation.SigningKey - can this key be used for signing [+] Added KeyStore.ContainsKey(long keyId) - returns is there a key with the specified Key Id [+] Added class RevocationLib that provides Key Revocation features Version 1.6.1 December 14, 2010 [!] KeyPairInformation.KeyIdHex has been changed to display the same Hex string as GnuPG and PGP (r). (low 4 bytes of the real key id wich is 8 bytes) [+] Added KeyPairInformation.HasPrivateKey - bool that indicates is there a secret key in the key ring for this key pair. [+] Added KeyStore.UserIds - array of all User Id's of the keys in this KeyStore instance [+] Added KeyStore.KeyHexIds - array of all Key Id's in Hex format of the keys in this KeyStore instance [+] Added KeyStore.GetKeyIdForUserId(userId) returns the first Key ID for a given User Id [+] Added KeyStore.GetKeyIdForKeyIdHex(keyIdHex) returns the first Key ID for a given Key Hex Id [+] Added KeyStore.AutoSave - should the KeyStore file be auto saved after each operation. [+] Added KeyStore.BackupOnSave(boolean) - that gets/sets should the old status of KeyStore be saved in a file with the same name and extension .bak [+] Added KeyStore.Password - access to the KeyStore password. Version 1.6.0 Release date: 25 August 2010 [+] Added enum CompressionAlgorithm. [+] Added enum HashAlgorithm. [+] Added enum CypherAlgorithm. [*] Fixed generation of DH/DSS keys with method KeyStore.GenerateKeyPair. (Now the generated keys are recognized by PGP Desktop) [*] Methods PGPLib.DecryptFile and PGPLib.DecryptString accept mixed *.asc files (containing both public and private keys) [*] Fixed decryption of multi-recipient pgp files. [!] Improved speed of RSA keys generation with method KeyStore.GenerateKeyPair. [+] Added property PGPLib.Compression of type CompressionAlgorithm, that controls the used compression algorithm to be used during encryption. [+] Added property PGPLib.Hash of type HashAlgorithm, that controls the used hashing algorithm to be used during encryption. [+] Added property PGPLib.Cypher of type CypherAlgorithm, that controls the prefered symmetric cypher algorithm to be used during encryption. [+] Added method KeyStore.SignPublicKey [+] Added method PGPLib.EncryptFilePBE that makes the encrypted archive available for decryption with both private key and a (if lost or not available) with a pass phrase. [+] Added method PGPLib.ClearSignString [+] Added method PGPLib.ClearSignStringV3 [+] Added method PGPLib.DecryptAndVerifyString [+] Added method PGPLib.SignAndEncryptString [+] Added method PGPLib.SignString [+] Added method PGPLib.VerifyString [+] Added method KeyStore.ImportKeyRing, that imports both public and private key (if present) from one file. [+] Added method KeyStore.ExportKeyRing, that exports both public and private key (if present) in one file. [+] Added new project in the Examples folder - KeyToolCS, to demonstrate Key pair methods provided by the library with C#. [+] Added new project in the Examples folder - KeyToolVB, to demonstrate Key pair methods provided by the library with VB.NET. Version 1.5 Release date: 23 April 2010 [+] Added method PGPLib.ClearSignFile. [+] Added method PGPLib.ClearSignFileV3. [+] Added method PGPLib.DecryptString. [+] Added method PGPLib.EncryptString. [!] Method PGPLib.VerifyFile now supports OpenPGP version 3 signatutes (the old format). [+] Added method KeyStore.ChangePrivateKeyPassword. [+] Added method KeyStore.DeleteKeyPair. [+] Added method KeyStore.ExportPrivateKeyAsString. [+] Added method KeyStore.ExportPublicKeyAsString. [+] Added method KeyStore.GetKeys. [*] Fixed bug in KeyStore.ImportPrivateKey. Version 1.4 Release date: 2 December 2009 [+] Method ExportPublicKey implemented. [+] Method ExportPrivateKey implemented. [+] Method GenerateKeyPair implemented.