The PGPKeyRingGenerator constructor takes in a passphrase to encrypt the private key. What is the algorithm that it uses to do this? It has a field called encAlgorithm, but I couldn't find any documentation explaining what these algorithms are.
views:
90answers:
3PGP encryption uses a serial combination of hashing, data compression, symmetric-key cryptography, and, finally, public-key cryptography; each step uses one of several supported algorithms. Each public key is bound to a user name and/or an e-mail address. The first version of this system was generally known as a web of trust to contrast with the X.509 system which uses a hierarchical approach based on certificate authority and which was added to PGP implementations later. Current versions of PGP encryption include both options through an automated key management server.
Taken from this wikipedia page. It should be what you are looking for.
By default, PGP uses IDEA,
http://www.quadibloc.com/crypto/co040302.htm
The other algorithms can be defined in encAlgorithm and following are supported by OpenPGP,
public interface SymmetricKeyAlgorithmTags
{
public static final int NULL = 0; // Plaintext or unencrypted data
public static final int IDEA = 1; // IDEA [IDEA]
public static final int TRIPLE_DES = 2; // Triple-DES (DES-EDE, as per spec -168 bit key derived from 192)
public static final int CAST5 = 3; // CAST5 (128 bit key, as per RFC 2144)
public static final int BLOWFISH = 4; // Blowfish (128 bit key, 16 rounds) [BLOWFISH]
public static final int SAFER = 5; // SAFER-SK128 (13 rounds) [SAFER]
public static final int DES = 6; // Reserved for DES/SK
public static final int AES_128 = 7; // Reserved for AES with 128-bit key
public static final int AES_192 = 8; // Reserved for AES with 192-bit key
public static final int AES_256 = 9; // Reserved for AES with 256-bit key
public static final int TWOFISH = 10; // Reserved for Twofish
}
They all use CFB mode with no padding.
It depends on PGP software, for example GPG uses CAST5 by default.