PGPLib Changelog

What's new in PGPLib 2.6.6.3

Jun 9, 2014
  • Package com.didisoft.pgp:
  • PGPLib.decryptFile - added support for recovering from error "premature end of stream in PartialInputStream"
  • PGPLib.decryptString - added support for recovering from error "premature end of stream in PartialInputStream"
  • PGPLib.decryptStream - added support for recovering from error "premature end of stream in PartialInputStream"

New in PGPLib 2.6.6.2 (May 28, 2014)

  • Package com.didisoft.pgp:
  • [!] PGPLib.decryptFileTo(..) in conjunction with PGPLib.setExtractTarFiles(false) can handle .pgp archives with no internal file name information and extract them into a file with name composed from the input file name but without the .pgp extension.

New in PGPLib 2.6.6.1 (May 26, 2014)

  • Package com.didisoft.pgp:
  • [+] PGPLib.isExtractTarFiles() - is the library set to extract encrypted TAR files
  • [+] PGPLib.setExtractTarFiles(boolean) - sets should the library extract encrypted TAR files with the methods that handle multiple file archives

New in PGPLib 2.6.6.0 (May 12, 2014)

  • BACKWARD COMPATIBILITY NOTICE:
  • Output streams are now left open. You will have to explitily close them!
  • PGPLib.encryptStream - the encrypted output stream is left open. Now the caller is responsible for closing it.
  • PGPLib.encryptStreamPBE - the encrypted output stream is left open. Now the caller is responsible for closing it.
  • PGPLib.signStream - the signed output stream is left open. Now the caller is responsible for closing it.
  • PGPLib.signStreamVersion3 - the signed output stream is left open. Now the caller is responsible for closing it.
  • PGPLib.signAndEncryptStream - the encrypted output stream is left open. Now the caller is responsible for closing it.
  • PGPLib.signAndEncryptStreamVersion3 - the encrypted output stream is left open. Now the caller is responsible for closing it.
  • (NEW!) PGP 2.x compatibility (RFC 1991)
  • PGPLib.pgp.setPgp2Compatible(true)/isPgp2Compatible() - methods that control compatibility of the produced .pgp archives with the ancient PGP 2.x systems.
  • KeyStore posibility to customize the type of self sertification of OpenPGP keys
  • KeyStore.getDefaultKeyCertificationType() - returns the default key certification type used for newly created keys
  • KeyStore.setDefaultKeyCertificationType - sets the default key certification type for newly created keys
  • KeyStore.setKeyCertificationType - changes the a key self certification type to a specified value

New in PGPLib 2.6.5.3 (Apr 29, 2014)

  • Package com.didisoft.pgp:
  • PGPLib - the default debug level has been changed from Level.FINE to Level.INFO
  • PGPLib.getDebugLevel/setDebuglevel - methods to control the verbose debug log level
  • KeyStore.clearKeyExpirationTime - methods to clear the expiration time of a public key
  • KeyStore.setKeyExpirationTime - methods to set the expiration time of a public key

New in PGPLib 2.6.5.2 (Mar 22, 2014)

  • KeyStore.exportPubring() - exports all public keys in a pubring.pkr compatible format
  • KeyStore.exportSecring() - exports all public keys in a secring.skr compatible format
  • KeyStore.importKeyRing - fix for importing E-Business server pubring.pkr
  • PGPLib - added additional logging messages
  • KeyPairInformation.getEncryptionKeySize() - returns the size of the encryption key in bits

New in PGPLib 2.6.5.1 (Mar 17, 2014)

  • Package com.didisoft.pgp.net:
  • [+] HKPClient - constructor without port (HTTP 80 by default)
  • [*] LDAPClient.submitKey - fixed case when the key does not exist on the server (in the first version it was only modifying the key).

New in PGPLib 2.6.5.0 (Mar 7, 2014)

  • New package com.didisoft.pgp.net:
  • LDAPClient - provides access to LDAP OpenPGP key servers (e.g. Symantec Encryption Management Server/PGP Universal Server/, OpenLDAP with pgp schema)
  • HKPClient - provides access to HKP (Horowitz key protocol) OpenPGP key servers (e.g. pgp.mit.edu)
  • Package com.didisoft.pgp:
  • KeyStore.changePrivateKeyPassword - the keystore state wasn't persisted
  • KeyPairInformation.isValidForever() - returns true if the key has no expiration date
  • PGPLib.signAndEncryptFile - overloaded version for multiple recipients
  • PGPLib.signAndEncryptStream - overloaded version for multiple recipients

New in PGPLib 2.6.4.12 (Mar 3, 2014)

  • Library/GoogleAppEngine/ - version of the library JAR files prepared for Google AppEngine (GAE)

New in PGPLib 2.6.4.11 (Feb 19, 2014)

  • Changes in package com.didisoft.pgp:
  • PGPLib.encryptString - overloaded methods that accept key in a KeyStore
  • PGPLib.decryptString - overloaded methods that accept key in a KeyStore

New in PGPLib 2.6.4.10 (Feb 1, 2014)

  • Changes in package com.didisoft.pgp:
  • PGPLib.encryptString - overloaded methods that accept key as input stream
  • PGPLib.decryptString - overloaded methods that accept key as input stream

New in PGPLib 2.6.4.8 (Jan 31, 2014)

  • Changes in package com.didisoft.pgp:
  • PGPLib.encryptString - methods for encrypting a string message
  • PGPLib.decryptString - methods for decrypting a string message
  • KeyPairInformation.getExpirationTime - returns the key expiration time

New in PGPLib 2.6.4.7 (Jan 14, 2014)

  • Changes in package com.didisoft.pgp.inspect:
  • KeyStore.setKeystorePassword - can be used to change the password of a file based KeyStore instance
  • PGPLib.encryptX - as of version 2.6.3.0 of the library was expecting all private key passwords to be in UTF-8.
  • In previous versions the library was working with non ASCII passwords as well and now keys with non ASCII passwords were rejected, although a valid password is supplied. This has been fixed and now the library is backward compatible.

New in PGPLib 2.6.4.6 (Dec 10, 2013)

  • Changes in package com.didisoft.pgp.inspect:
  • PGPInspectLib.listSignatures - returns information for the signatures contained in an OpenPGP archive
  • PGPInspectLib.listRevocationCertificate - returns information for the signature contained in an OpenPGP revocation certificate
  • SignatureItem.getUserId() - returns signer User identifier is available

New in PGPLib 2.6.4.4 (Nov 13, 2013)

  • [+] PGPLib.isTrialVersion() - Checks is this an evaluation instance of the library

New in PGPLib 2.6.4.3 (Nov 8, 2013)

  • KeyStore.setFastElGamalGeneration - sets should fast ElGamal parameters generation be performed
  • KeyStore.isFastElGamalGeneration - returns will fast ElGamal parameters generation be performed (with less checks)
  • KeyStore.containsPublicKey(String) - false was returned when a hexadecimal Key Id was supplied

New in PGPLib 2.6.4.2 (Nov 5, 2013)

  • KeyStore.generateRsaKeyPair - overloaded version that accepts key expiration in days
  • KeyStore.generateElGamalKeyPair - overloaded version that accepts key expiration in days

New in PGPLib 2.6.3.4 (Oct 4, 2013)

  • KeyStore.signPublicKey - fixed bug when signing multiple times with the same key.
  • It was adding the same signature multiple times. Now it is added only once.
  • KeyStore.getKey(long) - fixed bug, it wasn' returning the key with ECC/OpenPGP keys.

New in PGPLib 2.6.3.3 (Sep 19, 2013)

  • added KeyPairInformation.getPreferredCompressions() - returns array of preferred compression algorithms
  • added KeyPairInformation.getPreferredCiphers() - returns array of preferred cipher algorithms
  • added KeyPairInformation.getPreferredHashes() - returns array of preferred hash algorithms
  • added KeyPairInformation.getSignedWithKeyIds() - returns a list of the key Id's that have signed this key
  • 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.

New in PGPLib 2.6.3.2 (Aug 19, 2013)

  • Fixed bug in KeyStore.signPublicKeyAsTrustedIntroducer

New in PGPLib 2.6.3.0 (Aug 8, 2013)

  • The library has been migrated to the latest version of BouncyCastle provider 1.49. It is by default compiled for JDK 5.
  • A backward compatible version that supports BC provier from bcprov-1.41 to bcprov-1.45 that is compiled for JDK 1.4 can be found in the Library/jdk14 folder.

New in PGPLib 2.6.2.0 (Jul 15, 2013)

  • Added Elliptic Curve cryptography (ECC) OpenPGP support as defind in RFC 6637.
  • Changes in package com.didisoft.pgp:
  • Added interface EcCurve that contans constants with all the supported by OpenPGP EC curves
  • Added constant Keyagorithm.EC - for Elliptic curve asymetric encryption
  • Added method KeyStore.generateEccKeyPair - for generating OepnPGP keys based on Elliptic curve cryptography
  • Added method KeyStore.generateElGamalKeyPair - for generating ElGamal (DH/DSS) OepnPGP keys with default algorithm preferences
  • Added method KeyStore.generateRsaKeyPair - for generating RSA OepnPGP keys with default algorithm preferences
  • Added method KeyStore.isSkipLucasLehmerPrimeTest() - returns will Lucas-Lehmer prime number check be skipped for ElGamal keys generation
  • Added method KeyStore.setSkipLucasLehmerPrimeTest(boolean) - sets will Lucas-Lehmer prime number check be skipped for ElGamal keys generation
  • Added method PGPKeyPair.generateEccKeyPair - for generating OepnPGP keys based on Elliptic curve cryptography
  • Added method PGPKeyPair.generateElGamalKeyPair - for generating ElGamal (DH/DSS) OepnPGP keys with default algorithm preferences
  • Added method PGPKeyPair.generateRsaKeyPair - for generating RSA OepnPGP keys with default algorithm preferences

New in PGPLib 2.6.1.5 (Jun 20, 2013)

  • Added class SignatureItem - Contains information for an OpenPGP signature
  • Added method PGPInspectLib.listDetachedSignatureFile - Lists information for an OpenPGP detached signature file
  • Added method PGPInspectLib.listDetachedSignatureStream - Lists information for an OpenPGP detached signature stream

New in PGPLib 2.6.1.4 (May 20, 2013)

  • Fixed KeyStore.containsPrivateKey(String) - when invoked with a hexadecimal key id parameter. It was returning true, even if there was no private key with the given hexadecimal key id.

New in PGPLib 2.6.1.3 (May 16, 2013)

  • KeyStore.purge - Clears the internal state of this key store.
  • 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
  • KeyPairInformation.getUserID - Returns the primary (first) user Id of a key

New in PGPLib 2.6.1.2 (May 14, 2013)

  • Improved the performance and memory footprint of the cleanup logic for corrupted ASCII armour keys.
  • It was causing a java.lang.OutOfMemoryError: Java heap space error in a web application environment with multiple concurrent connections.

New in PGPLib 2.6.1.1 (Apr 10, 2013)

  • improved cleanup logic for corrupted ASCII armour keys
  • KeyStore.getKey(userId) - returns a KeyPairInformation for a key with a given User Id or Hexadecimal Key Id
  • KeyStore.getKey(keyId) - returns a KeyPairInformation for a key with a given Key Id
  • KeyStore.listKeys - now returns array of KeyPairInformation objects (same as getKeys())

New in PGPLib 2.6.1.0 (Feb 6, 2013)

  • Changes in package com.didisoft.pgp:
  • interface ContentDataType - holds the posibilities content types for OpenPGP data
  • PGPLib.getContentType() - returns the default content type that will be used when encrypting. The default is binary. Other posibilities are text and utf-8.
  • PGPLib.setContentType(char) - sets the default content type that will be used when encrypting. The default is binary. Other posibilities are text and utf-8.
  • PGPLib.clearSignString - fixed bug when signing multiple line messages.
  • KeyStore class general changes:
  • userId parameters are now searched by part of the User ID for example if a key has a User ID "Richard Collins" the key can be located by only "Collins".
  • the parameters that accept key User ID now also accept Key Hex ID string for example "74BB3286" or "0x74BB3286"
  • Fixed importing large .pkr and .skr keyrings from PGP(r) 6.5 into a KeyStore object
  • KeyStore(keystoreFile, password) - now if the keystore password is misspelled a com.didisoft.pgp.exceptions.WrongPasswordException is thrown.
  • KeyStore.isPartialMatchUserIds() - returns is partial searching of User IDs turned on. The default is true.
  • KeyStore.setPartialMatchUserIds(boolean) - turns on/off partial searching of User IDs.
  • KeyStore.saveToStream - Saves the key store data to a stream unprotected with a password
  • KeyStore.loadFromStream(keyStream) - loads the key store data from an unprotected stream
  • KeyStore.loadFromStream(keyStream, password) - loads the key store data from a protected stream

New in PGPLib 2.6.0.2 (Nov 7, 2012)

  • KeyStore.generateKeyPair - fixed error when generating bigger than 1024 bit ELGAMAL keys

New in PGPLib 2.5.8 (Apr 2, 2012)

  • Introduced Java logging on livel FINE for inspecting the internal work of the Library
  • Fixed bug when creating an uncompressed one pass signed and yencrypted archive.
  • Decripting methods now check the integrity protection of the data
  • KeyStore.generateKeyPair now returns a KeyPairInformation instance representing the generated key
  • KeyStore.importKeyRing now returns an array of KeyPairInformation instances representing the imported key
  • 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
  • Added interface TrustLevel that holds constants for the most common trust values
  • Added package com.didisoft.pgp.inspect:
  • Added class com.didisoft.pgp.inspect.PGPInspectLib that provides methods for inspecting the content of OpenPGP data
  • Added class com.didisoft.pgp.inspect.ContentItem that represents information for an item in an OpenPGP archive
  • 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 explicitly setting the trust of a key located in a KeyStore:
  • KeyStore.setTrust(String keyUserId, byte trustValue)
  • KeyStore.setTrust(long keyId, byte trustValue)
  • Added methods for checking the trust value of a given key:
  • KeyStore.isTrusted(String keyUserId)
  • KeyStore.isTrusted(long keyId)
  • KeyPairInformation.getTrust()

New in PGPLib 2.5.7 (Nov 10, 2011)

  • Fixed cleanup of half encrypted files after an exception for all methods
  • Fixed bug when importing keys from PGP 6.5 into a KeyStore
  • KeyStore.importPrivateKey now throws also NoPrivateKeyFoundException (extends PGPException)
  • if the specified file does not contain a private key
  • Added method static KeyStore.checkPassword(keystoreFile, password) - checks is a given password for a keystore file correct
  • Added method PGPLib.decryptAndVerifyFileTo - decrypts a file content with its original name(s) into a folder
  • Added method PGPLib.decryptAndVerifyStreamTo - decrypts a stream content with its original name(s) into a folder
  • Added method PGPLib.setUseExpiredKeys(true) - switches on/off the check are the encryption keys expired
  • Added method PGPLib.setUseRevokedKeys(true) - switches on/off the check are the encryption keys revoked
  • Added method PGPLib.isUseExpiredKeys() - returns the state of the check are the encryption keys expired
  • Added method PGPLib.isUseRevokedKeys() - returns the state of the check are the encryption keys revoked
  • Added method KeyPairInformation.checkPassword(password) - checks is a given password for a private key correct
  • Added method KeyPairInformation.hasPrivateKey() - returns is there a private key in this key pair
  • Added method KeyPairInformation.isExpired() - indicates is the public key expired
  • Added method KeyPairInformation.isExpiredOnDate(java.util.Date) - checks will the key be expired on a given date
  • New Exceptions:
  • Added class com.didisoft.pgp.exceptions.NonPGPDataException (extends PGPException)
  • thrown from all decrypt and decryptAndVerify methods when the supplied for decryption data is not an OpenPGP message
  • Added class com.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.setUseExpiredKeys(true)
  • Added class com.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.setUseRevokedKeys(true)

New in PGPLib 2.5.6 (Nov 10, 2011)

  • pgplib.jar is now digitally signed
  • Added class PGPKeyPair extending KeyPairInformation that represents keys loaded from files and also
  • provides methods for generating keys without the need of a KeyStore
  • Added KeyPairInformation.exportKeyRing
  • Added KeyPairInformation.exportPrivateKey
  • Added KeyPairInformation.exportPublicKey
  • Added KeyPairInformation.exportPublicKey
  • Fixed bug with openning empty key store file (for example created from a new temp file)

New in PGPLib 2.5.5 (Nov 10, 2011)

  • New exceptions extending PGPException:
  • Package com.didisoft.pgp.exceptions - containing exceptions that extend org.bouncycastle.openpgp.PGPException
  • Added class com.didisoft.pgp.exceptions.WrongPrivateKeyException - exception to indicate that we have supplied a wrong decryption private key
  • Added class com.didisoft.pgp.exceptions.WrongPasswordException - exception to indicate that we have supplied a wrong password
  • Added class com.didisoft.pgp.exceptions.NoPrivateKeyFoundException - exception to indicate that a private key has not been found
  • Added class com.didisoft.pgp.exceptions.NoPublicKeyFoundException - exception to indicate that a public key has not been found
  • Added class com.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
  • Decryption of password based encrypted (PBE) files
  • Added method PGPLib.decryptFilePBE - to decrypt password encrypted PGP files
  • Changes:
  • PGPLib.verifyStream - throws FileIsEncryptedException (extends PGPException) if the stream is aslo encrypted
  • PGPLib.verifyFile - throws FileIsEncryptedException (extends PGPException) if the stream is aslo encrypted
  • KeyStore is now Serializable
  • KeyStore.exportPrivateKey - now throws NoPrivateKeyFoundException instead of PGPException
  • KeyStore.exportPublicKey - now throws NoPublicKeyFoundException instead of PGPException
  • Added method KeyStore.deletePrivateKey - deletes specified private key from the KeyStore
  • Added method KeyStore.deletePublicKey - deletes specified public key from the KeyStore
  • Added method KeyStore.containsPublicKey - returns true if a specified public key exists in this KeyStore
  • Added method KeyStore.containsPrivateKey - returns true if a specified private key exists in this KeyStore
  • Bug fixes:
  • PGPLib.verifyStream - now returns false if the supplied public key stream is not the matching this signed stream
  • PGPLib.verifyFile - now returns false if the supplied public key stream is not the matching this signed stream
  • PGPLib.decryptAndVerifyFile - now returns false if the supplied public key file is not the matching this signed file
  • PGPLib.decryptAndVerifyStream - now returns false if the supplied public key file is not the matching this signed stream

New in PGPLib 2.5.4 (Nov 10, 2011)

  • Added sub class KeyPairInformation.SubKey - represents sub key in a key ring
  • Added KeyPairInformation.isRevoked() - returns is this key pair revoked
  • Added KeyPairInformation.isEncryptionKey() - returns can this key be used for encryption
  • Added KeyPairInformation.isSigningKey() - returns can this key be used for signing
  • Added KeyPairInformation.getPublicSubKeys() - returns the public sub keys for this key pair
  • Added KeyPairInformation.getPrivateSubKeys() - returns the private sub keys for this key pair
  • Added KeyStore.containsKey(long keyId) - returns is there a key with the specified Key Id
  • Added class RevocationLib that provides Key Revocation features

New in PGPLib 2.5.3 (Nov 10, 2011)

  • KeyPairInformation.getKeyIDHex() has been changed to display the same Hex string as GnuPG and PGP (r).
  • Added KeyStore.getUserIds() - list of all User Id's of the keys in this KeyStore instance
  • Added KeyStore.getKeyHexIds() - list of all Key Id's in Hex form 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
  • KeyStore.listKeys() is modified to print similar output as PGP (r) 6.5
  • Added KeyStore.setAutoSave(boolean) should the KeyStore file be auto saved after each operation.
  • Added KeyStore.isAutoSave() that returns the auto saved status.
  • Added KeyStore.isBackupOnSave() that returns is backup file creation on.
  • Added KeyStore.setBackupOnSave(boolean) that sets should the old status of KeyStore be saved in
  • a file with the same name and extension .bak

New in PGPLib 2.5.2 (Nov 10, 2011)

  • Added methods PGPLib.encryptFile with support of KeyStore
  • Added methods PGPLib.verifyFile with support of KeyStore
  • Added methods PGPLib.verifyFile with support of KeyStore

New in PGPLib 2.5.1 (Nov 10, 2011)

  • Added interface CompressionAlgorithm with constants for available compression algorithms
  • Added interface HashAlgorithm with constants for available hashing algorithms
  • Added interface CypherAlgorithm with constants for available cypher compression algorithms
  • Added methods PGPLib.getCompression() and setCompression(int)
  • that controls the used compression algorithm to be used during encryption
  • Added methods PGPLib.getHash() and setHash(String)
  • that controls the used hashing algorithm to be used during encryption
  • Added methods PGPLib.getCypher() and setCypher(String)
  • that controls the prefered symmetric cypher algorithm to be used during encryption
  • 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 method PGPLib.encryptFilePBE that makes the encrypted archive available for decryption
  • with both private key and (if lost or not available) a pass phrase
  • Fixed error while deleting key pair from KeyStore, when only public key exists
  • Fixed decryption of multi-recipient pgp files

New in PGPLib 2.4.3 (Nov 10, 2011)

  • Improved generation of 2048/1024 DH/DSS keys.
  • Added method PGPLib.encryptStream that accepts Keys Store.

New in PGPLib 2.4.2 (Nov 10, 2011)

  • Fixed bug with storing private key in KeyStore after public key was imported
  • Documentation.pdf is transformed to html

New in PGPLib 2.4 (Nov 10, 2011)

  • Added method PGPLib.clearSignVersion3
  • Added method PGPLib.clearSignString
  • Added method PGPLib.clearSignStringVersion3
  • Added method KeyStore.generateKeyPair with support for key expiration date
  • Improved speed of methods working with large files.
  • Switched to bcprov-ext-jdk14-145.jar
  • verifyFile and verifyStream methods support clear signed format.