OpenPGP Class
Properties Methods Events Config Settings Errors
The OpenPGP class is used to encrypt/decrypt and sign/verify PGP messages.
Syntax
OpenPGP
Remarks
The OpenPGP class supports encrypting/decrypting and signing/verifying OpenPGP messages. Supported message formats are specified by RFC 4880, in addition to draft-ietf-openpgp-crypto-refresh-13, which introduces support for OpenPGP Version 6.
The Encrypt, Sign, and SignAndEncrypt methods are used to create a message to be sent to your partner. You can additionally create messages bound for multiple recipients with different keys, simultaneously encrypt and compress with the most popular compression algorithms, and control other aspects such as the encrypting algorithm to use.
When a message is received, the Decrypt, VerifySignature, and DecryptAndVerifySignature methods are used to process the incoming message.
The Keys property holds the key (with private key) used to sign and decrypt.
The SignerKeys property holds the key used to verify a signature.
The RecipientKeys property holds the key used to encrypt.
Input and Output Properties
The class will determine the source and destination of the input and output based on which properties are set.
The order in which the input properties are checked is as follows:
When a valid source is found the search stops. The order in which the output properties are checked is as follows:
- SetOutputStream
- OutputFile
- OutputMessage: The output data is written to this property if no other destination is specified.
When using streams you may need to additionally set CloseInputStreamAfterProcessing or CloseOutputStreamAfterProcessing.
Property List
The following is the full list of the properties of the class with short descriptions. Click on the links for further details.
ASCIIArmor | Specifies whether to use ASCII armor to encode the output message. |
AutoSelectAlgorithms | Whether to automatically select algorithms when encrypting or signing. |
ClearSignature | Specifies whether or not to create a cleartext signature. |
CompressionMethod | The compression algorithm used. |
DetachedSignature | Specifies whether or not to generate a detached signature when signing a message. |
EncryptingAlgorithm | The encryption algorithm used when encrypting. |
InputFile | The file to process. |
InputMessage | The message to process. |
Keys | A collection of keys used for cryptographic operations. |
MessageHeaders | A collection of headers in the ASCII armored message. |
OutputFile | The output file. |
OutputMessage | The output message after processing. |
Overwrite | Indicates whether or not the class should overwrite files. |
RecipientKeys | The collection of keys belonging to the recipient of the message. |
SignerKeys | The collection of keys belonging to the signer of the message. |
SigningAlgorithm | The signature hash algorithm used when signing. |
Method List
The following is the full list of the methods of the class with short descriptions. Click on the links for further details.
Config | Sets or retrieves a configuration setting. |
Decrypt | Decrypts the message. |
DecryptAndVerifySignature | Decrypts and verifies the signature of the message. |
Encrypt | Encrypts the message. |
GetRecipientInfo | Gets recipient information for an encrypted message. |
Interrupt | Interrupt the current method. |
Reset | Resets the class properties. |
SetInputStream | Sets the stream from which the class will read data to encrypt or decrypt. |
SetOutputStream | The stream to which the class will write the fully encrypted or decrypted OpenPGP data. |
Sign | Signs the message. |
SignAndEncrypt | Signs and encrypts the current message. |
VerifySignature | Verifies the signature of the current message. |
Event List
The following is the full list of the events fired by the class with short descriptions. Click on the links for further details.
Error | Fired when information is available about errors during data delivery. |
KeyPassphrase | Fired if the passphrase of current key is incorrect or empty. |
Progress | Fired as progress is made. |
RecipientInfo | Fired for each recipient key of the encrypted message. |
SignatureInfo | Fired during verification of the signed message. |
Status | Shows the progress of the operation. |
VerificationStatus | Fired after verification of the signed message. |
Config Settings
The following is a list of config settings for the class with short descriptions. Click on the links for further details.
AEADChunkSizeExp | Specifies the exponent used to calculate the plaintext chunk size for encryption. |
AllowEmptyInput | Whether to allow empty files for input. |
AllowOldPacketType | Whether to allow the older encrypted packet type. |
Argon2Iterations | Specifies the number of iterations used for Argon2. |
Argon2MemorySizeExp | Specifies the exponent used to calculate the memory size used when creating a key. |
Argon2Parallelism | Specifies the degree of parallelism used for Argon2. |
CloseInputStreamAfterProcessing | Determines whether or not the input stream is closed after processing. |
CloseOutputStreamAfterProcessing | Determines whether or not the output stream is closed after processing. |
CompressionLevel | The level of compression used. |
DeleteOutputFileOnError | Whether to delete the output file on an error. |
DetachedSignatureData | The detached signature. |
EnsureValidDSASignatureHashAlgorithm | Whether or not to select a suitable signature hash algorithm automatically. |
FileName | The original name of the encrypted file. |
KeyIdLength | The length of the KeyId available. |
KeySelectionMethod | The method used to select a key for encryption or signing. |
LogLevel | Specifies the level of detail that is logged. |
PGPZipDir | The directory used when creating or extracting a PGP zip file. |
ProgressEventThreshold | The amount of data in bytes to process before firing the progress event. |
PublicKeyringFile | The file name of the public keyring file. |
ReadFromProgressEvent | Whether to read input data from inside the progress event. |
RecursiveDecryptMode | Whether the encrypted data should be decrypted recursively. |
RequireEncryption | Whether to throw an error when decrypting and encryption is not detected. |
RequireIntegrityProtectedPacket | Whether an MDC packet is required for decryption. |
RequireSignature | Whether to throw an error when verifying a signature and no signature is found. |
RequireValidSignature | Specifies if an invalid signature is considered an error condition. |
SecretKeyringFile | The file name of the secret keyring file. |
SplitHeaders | Controls whether ASCII Armor headers are split or not. |
SymmetricPassphrase | The password used for symmetric encryption or decryption. |
UseArgon2 | Whether to use Argon2 for key derivation during symmetric encryption or decryption. |
UsePlatformAES | Whether to use the platform AES implementation. |
VerifyClearTextSignatureWithCache | Whether the cleartext message is cached in memory when verifying a cleartext signature. |
VersionHeader | The Version header value in the ASCII armored OpenPGP message. |
WriteToProgressEvent | Whether to write output data so it is accessible from inside the progress event. |
BuildInfo | Information about the product's build. |
CodePage | The system code page used for Unicode to Multibyte translations. |
LicenseInfo | Information about the current license. |
MaskSensitiveData | Whether sensitive data is masked in log messages. |
ProcessIdleEvents | Whether the class uses its internal event loop to process events when the main thread is idle. |
SelectWaitMillis | The length of time in milliseconds the class will wait when DoEvents is called if there are no events to process. |
UseFIPSCompliantAPI | Tells the class whether or not to use FIPS certified APIs. |
UseInternalSecurityAPI | Whether or not to use the system security libraries or an internal implementation. |
ASCIIArmor Property (OpenPGP Class)
Specifies whether to use ASCII armor to encode the output message.
Syntax
ANSI (Cross Platform) int GetASCIIArmor();
int SetASCIIArmor(int bASCIIArmor); Unicode (Windows) BOOL GetASCIIArmor();
INT SetASCIIArmor(BOOL bASCIIArmor);
int ipworksopenpgp_openpgp_getasciiarmor(void* lpObj);
int ipworksopenpgp_openpgp_setasciiarmor(void* lpObj, int bASCIIArmor);
bool GetASCIIArmor();
int SetASCIIArmor(bool bASCIIArmor);
Default Value
FALSE
Remarks
This property controls whether or not ASCII armoring is used on the output message. The default value is False.
Data Type
Boolean
AutoSelectAlgorithms Property (OpenPGP Class)
Whether to automatically select algorithms when encrypting or signing.
Syntax
ANSI (Cross Platform) int GetAutoSelectAlgorithms();
int SetAutoSelectAlgorithms(int iAutoSelectAlgorithms); Unicode (Windows) INT GetAutoSelectAlgorithms();
INT SetAutoSelectAlgorithms(INT iAutoSelectAlgorithms);
int ipworksopenpgp_openpgp_getautoselectalgorithms(void* lpObj);
int ipworksopenpgp_openpgp_setautoselectalgorithms(void* lpObj, int iAutoSelectAlgorithms);
int GetAutoSelectAlgorithms();
int SetAutoSelectAlgorithms(int iAutoSelectAlgorithms);
Default Value
0
Remarks
This property is set to the binary 'OR' of one or more options indicating which algorithms to automatically select.
When enabled automatic selection is performed by examining the preferred algorithms specified by the key.
When Encrypt is called the class will read the preferred encryption algorithm and compression method from the key specified in the RecipientKey* properties.
If multiple keys are specified the preferred encryption algorithm and compression method from the last key is used. The EncryptingAlgorithm and CompressionMethod properties are ignored.
When Sign is called the class will read the preferred MAC algorithm and compression method from the private key specified in the Key* properties. If multiple keys are specified the preferred MAC algorithm and compression method from the last key is used. The SigningAlgorithm and CompressionMethod properties are ignored.
The list below defines available options.
Compression Algorithm | 1 (Hex 0x01) |
Cipher Algorithm | 2 (Hex 0x02) |
MAC Algorithm | 4 (Hex 0x04) |
The default value is 0 which means algorithms are not automatically selected.
Data Type
Integer
ClearSignature Property (OpenPGP Class)
Specifies whether or not to create a cleartext signature.
Syntax
ANSI (Cross Platform) int GetClearSignature();
int SetClearSignature(int bClearSignature); Unicode (Windows) BOOL GetClearSignature();
INT SetClearSignature(BOOL bClearSignature);
int ipworksopenpgp_openpgp_getclearsignature(void* lpObj);
int ipworksopenpgp_openpgp_setclearsignature(void* lpObj, int bClearSignature);
bool GetClearSignature();
int SetClearSignature(bool bClearSignature);
Default Value
FALSE
Remarks
This property controls whether or not a cleartext signature is created during signing. The default value is False. When set to true a clear text signature will be created when Sign is called.
Data Type
Boolean
CompressionMethod Property (OpenPGP Class)
The compression algorithm used.
Syntax
ANSI (Cross Platform) char* GetCompressionMethod();
int SetCompressionMethod(const char* lpszCompressionMethod); Unicode (Windows) LPWSTR GetCompressionMethod();
INT SetCompressionMethod(LPCWSTR lpszCompressionMethod);
char* ipworksopenpgp_openpgp_getcompressionmethod(void* lpObj);
int ipworksopenpgp_openpgp_setcompressionmethod(void* lpObj, const char* lpszCompressionMethod);
QString GetCompressionMethod();
int SetCompressionMethod(QString qsCompressionMethod);
Default Value
"zip"
Remarks
This property specifies which compression method is used when generating output. Possible values are:
- zip (default)
- zlib
- bzip2
- none or uncompressed
Data Type
String
DetachedSignature Property (OpenPGP Class)
Specifies whether or not to generate a detached signature when signing a message.
Syntax
ANSI (Cross Platform) int GetDetachedSignature();
int SetDetachedSignature(int bDetachedSignature); Unicode (Windows) BOOL GetDetachedSignature();
INT SetDetachedSignature(BOOL bDetachedSignature);
int ipworksopenpgp_openpgp_getdetachedsignature(void* lpObj);
int ipworksopenpgp_openpgp_setdetachedsignature(void* lpObj, int bDetachedSignature);
bool GetDetachedSignature();
int SetDetachedSignature(bool bDetachedSignature);
Default Value
FALSE
Remarks
This property specifies whether or not a detached signature is created when signing a message. The default value is False.
If set to true the output will only be the signature. The data being signed will not be included in the output. If set to true ClearSignature will be ignored.
When this property is false (default) the signature is not detached. The output will contain both the signed data and the signature.
Data Type
Boolean
EncryptingAlgorithm Property (OpenPGP Class)
The encryption algorithm used when encrypting.
Syntax
ANSI (Cross Platform) char* GetEncryptingAlgorithm();
int SetEncryptingAlgorithm(const char* lpszEncryptingAlgorithm); Unicode (Windows) LPWSTR GetEncryptingAlgorithm();
INT SetEncryptingAlgorithm(LPCWSTR lpszEncryptingAlgorithm);
char* ipworksopenpgp_openpgp_getencryptingalgorithm(void* lpObj);
int ipworksopenpgp_openpgp_setencryptingalgorithm(void* lpObj, const char* lpszEncryptingAlgorithm);
QString GetEncryptingAlgorithm();
int SetEncryptingAlgorithm(QString qsEncryptingAlgorithm);
Default Value
"AES128"
Remarks
This property specifies the encryption algorithm used when encrypting. Possible values are:
- CAST5
- 3DES or TripleDES
- AES256
- AES192
- AES128 (default)
- BLOWFISH
- TWOFISH
- IDEA
- AES256-OCB (AEAD)
- AES192-OCB (AEAD)
- AES128-OCB (AEAD)
- AES256-GCM (AEAD)
- AES192-GCM (AEAD)
- AES128-GCM (AEAD)
Note that if UseArgon2 is enabled, and SymmetricPassphrase is specified, an AEAD encryption algorithm (AES*-OCB and AES*-GCM) must be specified for symmetric encryption. If UseArgon2 is disabled, and an AEAD encryption algorithm is specified, the AEAD mode (OCB or GCM) will be ignored when performing symmetric encryption.
An AEAD encryption algorithm may optionally be utilized when encrypting messages (when calling Encrypt). In this case, the AEADChunkSizeExp configuration will specify the chunk size for splitting plaintext for encryption. Please see AEADChunkSizeExp for additional details.
Data Type
String
InputFile Property (OpenPGP Class)
The file to process.
Syntax
ANSI (Cross Platform) char* GetInputFile();
int SetInputFile(const char* lpszInputFile); Unicode (Windows) LPWSTR GetInputFile();
INT SetInputFile(LPCWSTR lpszInputFile);
char* ipworksopenpgp_openpgp_getinputfile(void* lpObj);
int ipworksopenpgp_openpgp_setinputfile(void* lpObj, const char* lpszInputFile);
QString GetInputFile();
int SetInputFile(QString qsInputFile);
Default Value
""
Remarks
This property specifies the file to be processed. Set this property to the full or relative path to the file which will be processed.
Input and Output Properties
The class will determine the source and destination of the input and output based on which properties are set.
The order in which the input properties are checked is as follows:
- SetInputStream
- InputFile
- InputMessage
When a valid source is found the search stops. The order in which the output properties are checked is as follows:
- SetOutputStream
- OutputFile
- OutputMessage: The output data is written to this property if no other destination is specified.
When using streams you may need to additionally set CloseInputStreamAfterProcessing or CloseOutputStreamAfterProcessing.
Data Type
String
InputMessage Property (OpenPGP Class)
The message to process.
Syntax
ANSI (Cross Platform) int GetInputMessage(char* &lpInputMessage, int &lenInputMessage);
int SetInputMessage(const char* lpInputMessage, int lenInputMessage); Unicode (Windows) INT GetInputMessage(LPSTR &lpInputMessage, INT &lenInputMessage);
INT SetInputMessage(LPCSTR lpInputMessage, INT lenInputMessage);
int ipworksopenpgp_openpgp_getinputmessage(void* lpObj, char** lpInputMessage, int* lenInputMessage);
int ipworksopenpgp_openpgp_setinputmessage(void* lpObj, const char* lpInputMessage, int lenInputMessage);
QByteArray GetInputMessage();
int SetInputMessage(QByteArray qbaInputMessage);
Default Value
""
Remarks
This property specifies the message to be processed. Set this property to the OpenPGP message content.
Input and Output Properties
The class will determine the source and destination of the input and output based on which properties are set.
The order in which the input properties are checked is as follows:
- SetInputStream
- InputFile
- InputMessage
When a valid source is found the search stops. The order in which the output properties are checked is as follows:
- SetOutputStream
- OutputFile
- OutputMessage: The output data is written to this property if no other destination is specified.
When using streams you may need to additionally set CloseInputStreamAfterProcessing or CloseOutputStreamAfterProcessing.
Data Type
Binary String
Keys Property (OpenPGP Class)
A collection of keys used for cryptographic operations.
Syntax
IPWorksOpenPGPList<IPWorksOpenPGPKey>* GetKeys(); int SetKeys(IPWorksOpenPGPList<IPWorksOpenPGPKey>* val);
int ipworksopenpgp_openpgp_getkeycount(void* lpObj);
int ipworksopenpgp_openpgp_setkeycount(void* lpObj, int iKeyCount);
int ipworksopenpgp_openpgp_getkeyencoded(void* lpObj, int keyindex, char** lpKeyEncoded, int* lenKeyEncoded);
int ipworksopenpgp_openpgp_setkeyencoded(void* lpObj, int keyindex, const char* lpKeyEncoded, int lenKeyEncoded);
char* ipworksopenpgp_openpgp_getkeykeyring(void* lpObj, int keyindex);
int ipworksopenpgp_openpgp_setkeykeyring(void* lpObj, int keyindex, const char* lpszKeyKeyring);
char* ipworksopenpgp_openpgp_getkeypassphrase(void* lpObj, int keyindex);
int ipworksopenpgp_openpgp_setkeypassphrase(void* lpObj, int keyindex, const char* lpszKeyPassphrase);
char* ipworksopenpgp_openpgp_getkeyuserid(void* lpObj, int keyindex);
int ipworksopenpgp_openpgp_setkeyuserid(void* lpObj, int keyindex, const char* lpszKeyUserId);
int GetKeyCount();
int SetKeyCount(int iKeyCount); QByteArray GetKeyEncoded(int iKeyIndex);
int SetKeyEncoded(int iKeyIndex, QByteArray qbaKeyEncoded); QString GetKeyKeyring(int iKeyIndex);
int SetKeyKeyring(int iKeyIndex, QString qsKeyKeyring); QString GetKeyPassphrase(int iKeyIndex);
int SetKeyPassphrase(int iKeyIndex, QString qsKeyPassphrase); QString GetKeyUserId(int iKeyIndex);
int SetKeyUserId(int iKeyIndex, QString qsKeyUserId);
Remarks
This collection holds keys that are used for signing and decrypting. In most cases only one key will be specified, however multiple keys may be needed in some cases.
This property is not available at design time.
Data Type
MessageHeaders Property (OpenPGP Class)
A collection of headers in the ASCII armored message.
Syntax
IPWorksOpenPGPList<IPWorksOpenPGPHeader>* GetMessageHeaders(); int SetMessageHeaders(IPWorksOpenPGPList<IPWorksOpenPGPHeader>* val);
int ipworksopenpgp_openpgp_getmessageheadercount(void* lpObj);
int ipworksopenpgp_openpgp_setmessageheadercount(void* lpObj, int iMessageHeaderCount);
char* ipworksopenpgp_openpgp_getmessageheaderfield(void* lpObj, int messageheaderindex);
int ipworksopenpgp_openpgp_setmessageheaderfield(void* lpObj, int messageheaderindex, const char* lpszMessageHeaderField);
char* ipworksopenpgp_openpgp_getmessageheadervalue(void* lpObj, int messageheaderindex);
int ipworksopenpgp_openpgp_setmessageheadervalue(void* lpObj, int messageheaderindex, const char* lpszMessageHeaderValue);
int GetMessageHeaderCount();
int SetMessageHeaderCount(int iMessageHeaderCount); QString GetMessageHeaderField(int iMessageHeaderIndex);
int SetMessageHeaderField(int iMessageHeaderIndex, QString qsMessageHeaderField); QString GetMessageHeaderValue(int iMessageHeaderIndex);
int SetMessageHeaderValue(int iMessageHeaderIndex, QString qsMessageHeaderValue);
Remarks
This property holds a collection of headers specified in the message. It is only applicable when ASCIIArmor is set to true.
When generating ASCII armored output the class will include the headers specified here in addition to the standard Version header.
After decrypting or verifying a message that is ASCII armored this collection will be populated with the headers that were present in the message.
This property is not available at design time.
Data Type
OutputFile Property (OpenPGP Class)
The output file.
Syntax
ANSI (Cross Platform) char* GetOutputFile();
int SetOutputFile(const char* lpszOutputFile); Unicode (Windows) LPWSTR GetOutputFile();
INT SetOutputFile(LPCWSTR lpszOutputFile);
char* ipworksopenpgp_openpgp_getoutputfile(void* lpObj);
int ipworksopenpgp_openpgp_setoutputfile(void* lpObj, const char* lpszOutputFile);
QString GetOutputFile();
int SetOutputFile(QString qsOutputFile);
Default Value
""
Remarks
This property specifies the file to which the output will be written. This may be set to an absolute or relative path.
Input and Output Properties
The class will determine the source and destination of the input and output based on which properties are set.
The order in which the input properties are checked is as follows:
When a valid source is found the search stops. The order in which the output properties are checked is as follows:
- SetOutputStream
- OutputFile
- OutputMessage: The output data is written to this property if no other destination is specified.
When using streams you may need to additionally set CloseInputStreamAfterProcessing or CloseOutputStreamAfterProcessing.
Data Type
String
OutputMessage Property (OpenPGP Class)
The output message after processing.
Syntax
ANSI (Cross Platform) int GetOutputMessage(char* &lpOutputMessage, int &lenOutputMessage);
int SetOutputMessage(const char* lpOutputMessage, int lenOutputMessage); Unicode (Windows) INT GetOutputMessage(LPSTR &lpOutputMessage, INT &lenOutputMessage);
INT SetOutputMessage(LPCSTR lpOutputMessage, INT lenOutputMessage);
int ipworksopenpgp_openpgp_getoutputmessage(void* lpObj, char** lpOutputMessage, int* lenOutputMessage);
int ipworksopenpgp_openpgp_setoutputmessage(void* lpObj, const char* lpOutputMessage, int lenOutputMessage);
QByteArray GetOutputMessage();
int SetOutputMessage(QByteArray qbaOutputMessage);
Default Value
""
Remarks
This property will be populated with the output from the operation if OutputFile is not set.
Input and Output Properties
The class will determine the source and destination of the input and output based on which properties are set.
The order in which the input properties are checked is as follows:
When a valid source is found the search stops. The order in which the output properties are checked is as follows:
- SetOutputStream
- OutputFile
- OutputMessage: The output data is written to this property if no other destination is specified.
When using streams you may need to additionally set CloseInputStreamAfterProcessing or CloseOutputStreamAfterProcessing.
Data Type
Binary String
Overwrite Property (OpenPGP Class)
Indicates whether or not the class should overwrite files.
Syntax
ANSI (Cross Platform) int GetOverwrite();
int SetOverwrite(int bOverwrite); Unicode (Windows) BOOL GetOverwrite();
INT SetOverwrite(BOOL bOverwrite);
int ipworksopenpgp_openpgp_getoverwrite(void* lpObj);
int ipworksopenpgp_openpgp_setoverwrite(void* lpObj, int bOverwrite);
bool GetOverwrite();
int SetOverwrite(bool bOverwrite);
Default Value
FALSE
Remarks
This property indicates whether or not the class will overwrite OutputFile. If Overwrite is False, an error will be thrown whenever OutputFile exists before an operation. The default value is False.
Data Type
Boolean
RecipientKeys Property (OpenPGP Class)
The collection of keys belonging to the recipient of the message.
Syntax
IPWorksOpenPGPList<IPWorksOpenPGPKey>* GetRecipientKeys(); int SetRecipientKeys(IPWorksOpenPGPList<IPWorksOpenPGPKey>* val);
int ipworksopenpgp_openpgp_getrecipientkeycount(void* lpObj);
int ipworksopenpgp_openpgp_setrecipientkeycount(void* lpObj, int iRecipientKeyCount);
int ipworksopenpgp_openpgp_getrecipientkeyencoded(void* lpObj, int recipientkeyindex, char** lpRecipientKeyEncoded, int* lenRecipientKeyEncoded);
int ipworksopenpgp_openpgp_setrecipientkeyencoded(void* lpObj, int recipientkeyindex, const char* lpRecipientKeyEncoded, int lenRecipientKeyEncoded);
char* ipworksopenpgp_openpgp_getrecipientkeykeyring(void* lpObj, int recipientkeyindex);
int ipworksopenpgp_openpgp_setrecipientkeykeyring(void* lpObj, int recipientkeyindex, const char* lpszRecipientKeyKeyring);
char* ipworksopenpgp_openpgp_getrecipientkeyuserid(void* lpObj, int recipientkeyindex);
int ipworksopenpgp_openpgp_setrecipientkeyuserid(void* lpObj, int recipientkeyindex, const char* lpszRecipientKeyUserId);
int GetRecipientKeyCount();
int SetRecipientKeyCount(int iRecipientKeyCount); QByteArray GetRecipientKeyEncoded(int iRecipientKeyIndex);
int SetRecipientKeyEncoded(int iRecipientKeyIndex, QByteArray qbaRecipientKeyEncoded); QString GetRecipientKeyKeyring(int iRecipientKeyIndex);
int SetRecipientKeyKeyring(int iRecipientKeyIndex, QString qsRecipientKeyKeyring); QString GetRecipientKeyUserId(int iRecipientKeyIndex);
int SetRecipientKeyUserId(int iRecipientKeyIndex, QString qsRecipientKeyUserId);
Remarks
This property contains the keys of the message recipient.
Set this property before calling Encrypt or SignAndEncrypt.
This property is not available at design time.
Data Type
SignerKeys Property (OpenPGP Class)
The collection of keys belonging to the signer of the message.
Syntax
IPWorksOpenPGPList<IPWorksOpenPGPKey>* GetSignerKeys(); int SetSignerKeys(IPWorksOpenPGPList<IPWorksOpenPGPKey>* val);
int ipworksopenpgp_openpgp_getsignerkeycount(void* lpObj);
int ipworksopenpgp_openpgp_setsignerkeycount(void* lpObj, int iSignerKeyCount);
int ipworksopenpgp_openpgp_getsignerkeyencoded(void* lpObj, int signerkeyindex, char** lpSignerKeyEncoded, int* lenSignerKeyEncoded);
int ipworksopenpgp_openpgp_setsignerkeyencoded(void* lpObj, int signerkeyindex, const char* lpSignerKeyEncoded, int lenSignerKeyEncoded);
char* ipworksopenpgp_openpgp_getsignerkeykeyring(void* lpObj, int signerkeyindex);
int ipworksopenpgp_openpgp_setsignerkeykeyring(void* lpObj, int signerkeyindex, const char* lpszSignerKeyKeyring);
char* ipworksopenpgp_openpgp_getsignerkeyuserid(void* lpObj, int signerkeyindex);
int ipworksopenpgp_openpgp_setsignerkeyuserid(void* lpObj, int signerkeyindex, const char* lpszSignerKeyUserId);
int GetSignerKeyCount();
int SetSignerKeyCount(int iSignerKeyCount); QByteArray GetSignerKeyEncoded(int iSignerKeyIndex);
int SetSignerKeyEncoded(int iSignerKeyIndex, QByteArray qbaSignerKeyEncoded); QString GetSignerKeyKeyring(int iSignerKeyIndex);
int SetSignerKeyKeyring(int iSignerKeyIndex, QString qsSignerKeyKeyring); QString GetSignerKeyUserId(int iSignerKeyIndex);
int SetSignerKeyUserId(int iSignerKeyIndex, QString qsSignerKeyUserId);
Remarks
This property contains the keys of the message signer.
Set this property before calling VerifySignature or DecryptAndVerifySignature.
This property is not available at design time.
Data Type
SigningAlgorithm Property (OpenPGP Class)
The signature hash algorithm used when signing.
Syntax
ANSI (Cross Platform) char* GetSigningAlgorithm();
int SetSigningAlgorithm(const char* lpszSigningAlgorithm); Unicode (Windows) LPWSTR GetSigningAlgorithm();
INT SetSigningAlgorithm(LPCWSTR lpszSigningAlgorithm);
char* ipworksopenpgp_openpgp_getsigningalgorithm(void* lpObj);
int ipworksopenpgp_openpgp_setsigningalgorithm(void* lpObj, const char* lpszSigningAlgorithm);
QString GetSigningAlgorithm();
int SetSigningAlgorithm(QString qsSigningAlgorithm);
Default Value
"SHA256"
Remarks
This property specifies the signature hash algorithm used when signing. Possible values are:
- SHA1
- MD5
- SHA256 (default)
- SHA384
- SHA512
- SHA224
- RIPEMD160
- SHA3-256
- SHA3-512
Data Type
String
Config Method (OpenPGP Class)
Sets or retrieves a configuration setting.
Syntax
ANSI (Cross Platform) char* Config(const char* lpszConfigurationString); Unicode (Windows) LPWSTR Config(LPCWSTR lpszConfigurationString);
char* ipworksopenpgp_openpgp_config(void* lpObj, const char* lpszConfigurationString);
QString Config(const QString& qsConfigurationString);
Remarks
Config is a generic method available in every class. It is used to set and retrieve configuration settings for the class.
These settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the class, access to these internal properties is provided through the Config method.
To set a configuration setting named PROPERTY, you must call Config("PROPERTY=VALUE"), where VALUE is the value of the setting expressed as a string. For boolean values, use the strings "True", "False", "0", "1", "Yes", or "No" (case does not matter).
To read (query) the value of a configuration setting, you must call Config("PROPERTY"). The value will be returned as a string.
Error Handling (C++)
This method returns a String value; after it returns, call the GetLastErrorCode() method to obtain its result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message.
Decrypt Method (OpenPGP Class)
Decrypts the message.
Syntax
ANSI (Cross Platform) int Decrypt(); Unicode (Windows) INT Decrypt();
int ipworksopenpgp_openpgp_decrypt(void* lpObj);
int Decrypt();
Remarks
This method decrypts the specified message.
The message will be decrypted using the keys specified in Keys. Before decryption begins the class will fire the RecipientInfo event with information about the encrypted message, including the key used to encrypt the message. Within this event you may use the available information to load the correct key into Keys.
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
DecryptAndVerifySignature Method (OpenPGP Class)
Decrypts and verifies the signature of the message.
Syntax
ANSI (Cross Platform) int DecryptAndVerifySignature(); Unicode (Windows) INT DecryptAndVerifySignature();
int ipworksopenpgp_openpgp_decryptandverifysignature(void* lpObj);
int DecryptAndVerifySignature();
Remarks
This method attempts to both decrypt and verify the signature of the message. All of the properties affected by calling the Decrypt and VerifySignature methods are affected in the same manner.
This method may be used when the data is signed, encrypted, or signed and encrypted. For instance, if the data is encrypted but not signed you may still use this method and the class will perform the decryption without error.
The message will be decrypted using the keys specified in Keys. Before decryption begins the class will fire the RecipientInfo event with information about the encrypted message, including the key used to encrypt the message. Within this event you may use the available information to load the correct key into Keys.
The message will be verified using the keys specified in SignerKeys. Before verification begins the class will fire the SignatureInfo event with information about the signature including the key used to sign the message. Within this event you may use the information available to load the correct key into SignerKeys.
By default, if the signature is not valid the class fails with an error. The configuration setting RequireValidSignature may be set to False to disable this requirement. When RequireValidSignature is set to False, the Status parameter of the VerificationStatus event should be checked to determine the result of the operation.
NOTE: This method does not attempt to check the validity of the signing key itself.
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
Encrypt Method (OpenPGP Class)
Encrypts the message.
Syntax
ANSI (Cross Platform) int Encrypt(); Unicode (Windows) INT Encrypt();
int ipworksopenpgp_openpgp_encrypt(void* lpObj);
int Encrypt();
Remarks
This method encrypts the specified message.
The message is encrypted with the public keys specified in RecipientKeys.
When encrypting, the following properties may be used to further configure the class:
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
GetRecipientInfo Method (OpenPGP Class)
Gets recipient information for an encrypted message.
Syntax
ANSI (Cross Platform) int GetRecipientInfo(); Unicode (Windows) INT GetRecipientInfo();
int ipworksopenpgp_openpgp_getrecipientinfo(void* lpObj);
int GetRecipientInfo();
Remarks
This method will fire a RecipientInfo event for every recipient key for which the message has been encrypted. The event will provide the KeyId and Fingerprint, which can be used to identify the correct key to be used for decryption.
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
Interrupt Method (OpenPGP Class)
Interrupt the current method.
Syntax
ANSI (Cross Platform) int Interrupt(); Unicode (Windows) INT Interrupt();
int ipworksopenpgp_openpgp_interrupt(void* lpObj);
int Interrupt();
Remarks
If there is no method in progress, Interrupt simply returns, doing nothing.
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
Reset Method (OpenPGP Class)
Resets the class properties.
Syntax
ANSI (Cross Platform) int Reset(); Unicode (Windows) INT Reset();
int ipworksopenpgp_openpgp_reset(void* lpObj);
int Reset();
Remarks
This method resets all message and key properties to their default values.
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
SetInputStream Method (OpenPGP Class)
Sets the stream from which the class will read data to encrypt or decrypt.
Syntax
ANSI (Cross Platform) int SetInputStream(IPWorksOpenPGPStream* sInputStream); Unicode (Windows) INT SetInputStream(IPWorksOpenPGPStream* sInputStream);
int ipworksopenpgp_openpgp_setinputstream(void* lpObj, IPWorksOpenPGPStream* sInputStream);
int SetInputStream(IPWorksOpenPGPStream* sInputStream);
Remarks
This method sets the stream from which the class will read data to encrypt or decrypt. If an input stream is set before the class attempts to encode or decode an OpenPGP message, the data is read from the input stream instead of from the InputFile or InputMessage properties.
Encrypt and/or Sign
You can call this method to set the input stream that you would like to sign and/or encrypt. Then call Sign, Encrypt, or SignAndEncrypt to sign and/or encrypt the message. The appropriate ASCII Armor headers will be generated in MessageHeaders.
Decrypt and/or Verify
You can call this method to specify a valid input stream that contains the signed and/or encrypted data you would like to verify or decrypt. Then call VerifySignature, Decrypt, or DecryptAndVerifySignature to verify and/or decrypt the message.
The content of the stream will be read from the current position all the way to the end and no bytes will be skipped.
Input and Output Properties
The class will determine the source and destination of the input and output based on which properties are set.
The order in which the input properties are checked is as follows:
- SetInputStream
- InputFile
- InputMessage
When a valid source is found the search stops. The order in which the output properties are checked is as follows:
- SetOutputStream
- OutputFile
- OutputMessage: The output data is written to this property if no other destination is specified.
When using streams you may need to additionally set CloseInputStreamAfterProcessing or CloseOutputStreamAfterProcessing.
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
SetOutputStream Method (OpenPGP Class)
The stream to which the class will write the fully encrypted or decrypted OpenPGP data.
Syntax
ANSI (Cross Platform) int SetOutputStream(IPWorksOpenPGPStream* sOutputStream); Unicode (Windows) INT SetOutputStream(IPWorksOpenPGPStream* sOutputStream);
int ipworksopenpgp_openpgp_setoutputstream(void* lpObj, IPWorksOpenPGPStream* sOutputStream);
int SetOutputStream(IPWorksOpenPGPStream* sOutputStream);
Remarks
This method sets the stream to which the class will write the fully encrypted or decrypted OpenPGP data. If an output stream is set before the class attempts to encode or decode an OpenPGP message, the class will write the data to the output stream instead of populating OutputMessage or writing to OutputFile.
Sign and/or Encrypt
To sign and/or encrypt a message to an output stream, you must first populate the Message property with the data you would like to sign and/or encrypt. Next, this method must be called with a valid output stream for which the class may write the signed or encrypted data. Then call Sign, Encrypt, or SignAndEncrypt to sign and/or encrypt the message. The appropriate ASCII Armor headers will be generated in MessageHeaders.
Decrypt and/or Verify
If you would like to decrypt a message or verify its signature and write the resulting message to an output stream, you should set the Message property to the signed and/or encrypted message you would like to verify or decrypt. Next, you must call this method to specify a valid stream for the component to write the data to. Then call VerifySignature, Decrypt, or DecryptAndVerifySignature to verify and/or decrypt the message.
Input and Output Properties
The class will determine the source and destination of the input and output based on which properties are set.
The order in which the input properties are checked is as follows:
When a valid source is found the search stops. The order in which the output properties are checked is as follows:
- SetOutputStream
- OutputFile
- OutputMessage: The output data is written to this property if no other destination is specified.
When using streams you may need to additionally set CloseInputStreamAfterProcessing or CloseOutputStreamAfterProcessing.
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
Sign Method (OpenPGP Class)
Signs the message.
Syntax
ANSI (Cross Platform) int Sign(); Unicode (Windows) INT Sign();
int ipworksopenpgp_openpgp_sign(void* lpObj);
int Sign();
Remarks
This method signs the specified message.
The message is signed with the private key specified in the Key* properties.
When signing, the following properties may be used to further configure the class:
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
SignAndEncrypt Method (OpenPGP Class)
Signs and encrypts the current message.
Syntax
ANSI (Cross Platform) int SignAndEncrypt(); Unicode (Windows) INT SignAndEncrypt();
int ipworksopenpgp_openpgp_signandencrypt(void* lpObj);
int SignAndEncrypt();
Remarks
This method signs and encrypts the specified message.
The message is encrypted with the public keys specified in RecipientKeys and signed with the private key specified in Keys.
When encrypting, the following properties may be used to further configure the class:
When signing, the following properties may be used to further configure the class:
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
VerifySignature Method (OpenPGP Class)
Verifies the signature of the current message.
Syntax
ANSI (Cross Platform) int VerifySignature(); Unicode (Windows) INT VerifySignature();
int ipworksopenpgp_openpgp_verifysignature(void* lpObj);
int VerifySignature();
Remarks
This method verifies the signature of the message.
The message will be verified using the keys specified in SignerKeys. Before verification begins the class will fire the SignatureInfo event with information about the signature including the key used to sign the message. Within this event you may use the information available to load the correct key into SignerKeys.
By default, if the signature is not valid the class fails with an error. The configuration setting RequireValidSignature may be set to False to disable this requirement. When RequireValidSignature is set to False, the Status parameter of the VerificationStatus event should be checked to determine the result of the operation.
Error Handling (C++)
This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)
Error Event (OpenPGP Class)
Fired when information is available about errors during data delivery.
Syntax
ANSI (Cross Platform) virtual int FireError(OpenPGPErrorEventParams *e);
typedef struct {
int ErrorCode;
const char *Description; int reserved; } OpenPGPErrorEventParams;
Unicode (Windows) virtual INT FireError(OpenPGPErrorEventParams *e);
typedef struct {
INT ErrorCode;
LPCWSTR Description; INT reserved; } OpenPGPErrorEventParams;
#define EID_OPENPGP_ERROR 1 virtual INT IPWORKSOPENPGP_CALL FireError(INT &iErrorCode, LPSTR &lpszDescription);
class OpenPGPErrorEventParams { public: int ErrorCode(); const QString &Description(); int EventRetVal(); void SetEventRetVal(int iRetVal); };
// To handle, connect one or more slots to this signal. void Error(OpenPGPErrorEventParams *e);
// Or, subclass OpenPGP and override this emitter function. virtual int FireError(OpenPGPErrorEventParams *e) {...}
Remarks
The Error event is fired in case of exceptional conditions during message processing. Normally the class fails with an error.
The ErrorCode parameter contains an error code, and the Description parameter contains a textual description of the error. For a list of valid error codes and their descriptions, please refer to the Error Codes section.
KeyPassphrase Event (OpenPGP Class)
Fired if the passphrase of current key is incorrect or empty.
Syntax
ANSI (Cross Platform) virtual int FireKeyPassphrase(OpenPGPKeyPassphraseEventParams *e);
typedef struct {
const char *UserId;
const char *KeyId;
const char *Fingerprint;
char *Passphrase; int reserved; } OpenPGPKeyPassphraseEventParams;
Unicode (Windows) virtual INT FireKeyPassphrase(OpenPGPKeyPassphraseEventParams *e);
typedef struct {
LPCWSTR UserId;
LPCWSTR KeyId;
LPCWSTR Fingerprint;
LPWSTR Passphrase; INT reserved; } OpenPGPKeyPassphraseEventParams;
#define EID_OPENPGP_KEYPASSPHRASE 2 virtual INT IPWORKSOPENPGP_CALL FireKeyPassphrase(LPSTR &lpszUserId, LPSTR &lpszKeyId, LPSTR &lpszFingerprint, LPSTR &lpszPassphrase);
class OpenPGPKeyPassphraseEventParams { public: const QString &UserId(); const QString &KeyId(); const QString &Fingerprint(); const QString &Passphrase(); void SetPassphrase(const QString &qsPassphrase); int EventRetVal(); void SetEventRetVal(int iRetVal); };
// To handle, connect one or more slots to this signal. void KeyPassphrase(OpenPGPKeyPassphraseEventParams *e);
// Or, subclass OpenPGP and override this emitter function. virtual int FireKeyPassphrase(OpenPGPKeyPassphraseEventParams *e) {...}
Remarks
This event fires when the passphrase for the key is required. The passphrase must be specified before operations requiring the secret key are attempted. The passphrase may be supplied by setting the Passphrase parameter in this event, or by specifying the Passphrase field before attempting the operation.
The passphrase is required when using the following methods in KeyMgr:
- AddUserId
- SignUserId
- ChangeExpirationDate
- ChangePassphrase
When using the OpenPGP class, or an email-based class, the following methods require a passphrase for the key:
UserId holds the user Id of the key the passphrase is required for.
The UserId format is:
FirstName LastName (Comment) <Email>Not all values are required when selecting or generating a key, but at least FirstName or Email are required.
Note that for OpenPGP v6, a key may be created with or without a UserId, as the field is optional. If a key was created without a UserId, the key's Fingerprint can be used as it's identifier instead.
KeyId is the hex-encoded, 4-byte or 8-byte Id of the key the passphrase is required for. For OpenPGP v4 keys and earlier, the key Id corresponds to the last 4 or 8 bytes of the key's Fingerprint. For OpenPGP v6 keys, the key Id corresponds to the first 8 bytes of the key's Fingerprint instead. For instance:
5E70662EA810E768
Fingerprint holds the hex-encoded, 20-byte fingerprint of the key the passphrase is required for. This is in the form:
5E70662EA810E768391A2FE8F7B7D49C89C9D7B1
Progress Event (OpenPGP Class)
Fired as progress is made.
Syntax
ANSI (Cross Platform) virtual int FireProgress(OpenPGPProgressEventParams *e);
typedef struct {
int64 BytesProcessed;
int PercentProcessed;
int Operation;
int IsEOF; int reserved; } OpenPGPProgressEventParams;
Unicode (Windows) virtual INT FireProgress(OpenPGPProgressEventParams *e);
typedef struct {
LONG64 BytesProcessed;
INT PercentProcessed;
INT Operation;
BOOL IsEOF; INT reserved; } OpenPGPProgressEventParams;
#define EID_OPENPGP_PROGRESS 3 virtual INT IPWORKSOPENPGP_CALL FireProgress(LONG64 &lBytesProcessed, INT &iPercentProcessed, INT &iOperation, BOOL &bIsEOF);
class OpenPGPProgressEventParams { public: qint64 BytesProcessed(); int PercentProcessed(); int Operation(); bool IsEOF(); void SetIsEOF(bool bIsEOF); int EventRetVal(); void SetEventRetVal(int iRetVal); };
// To handle, connect one or more slots to this signal. void Progress(OpenPGPProgressEventParams *e);
// Or, subclass OpenPGP and override this emitter function. virtual int FireProgress(OpenPGPProgressEventParams *e) {...}
Remarks
This event is fired automatically as data is processed by the class.
The PercentProcessed parameter indicates the current status of the operation.
The BytesProcessed parameter holds the total number of bytes processed so far.
The Operation parameter is only applicable when either ReadFromProgressEvent or WriteToProgressEvent is set to True. This parameter defines whether a Read or Write operation is required. If the configuration settings are not set this parameter will always return 0. Possible values are:
0 | None |
1 | Read |
2 | Write |
The IsEOF parameter is only applicable when either ReadFromProgressEvent or WriteToProgressEvent is set to True. This parameter defines whether the Read or Write operation is complete. When the Operation is Read (1) this parameter must be set to indicate that all data has been supplied to the class. When the Operation is Write (2) this value may be queried to determine when all data has been processed.
RecipientInfo Event (OpenPGP Class)
Fired for each recipient key of the encrypted message.
Syntax
ANSI (Cross Platform) virtual int FireRecipientInfo(OpenPGPRecipientInfoEventParams *e);
typedef struct {
const char *KeyId;
const char *Fingerprint;
const char *PublicKeyAlgorithm; int reserved; } OpenPGPRecipientInfoEventParams;
Unicode (Windows) virtual INT FireRecipientInfo(OpenPGPRecipientInfoEventParams *e);
typedef struct {
LPCWSTR KeyId;
LPCWSTR Fingerprint;
LPCWSTR PublicKeyAlgorithm; INT reserved; } OpenPGPRecipientInfoEventParams;
#define EID_OPENPGP_RECIPIENTINFO 4 virtual INT IPWORKSOPENPGP_CALL FireRecipientInfo(LPSTR &lpszKeyId, LPSTR &lpszFingerprint, LPSTR &lpszPublicKeyAlgorithm);
class OpenPGPRecipientInfoEventParams { public: const QString &KeyId(); const QString &Fingerprint(); const QString &PublicKeyAlgorithm(); int EventRetVal(); void SetEventRetVal(int iRetVal); };
// To handle, connect one or more slots to this signal. void RecipientInfo(OpenPGPRecipientInfoEventParams *e);
// Or, subclass OpenPGP and override this emitter function. virtual int FireRecipientInfo(OpenPGPRecipientInfoEventParams *e) {...}
Remarks
This event fires when the Decrypt or DecryptAndVerifySignature method is called.
KeyId is the hex-encoded 4- or 8-byte Id of the key used to encrypt the message. If a subkey was used to encrypt the message this will be the Id of that subkey. For OpenPGP v4 keys and earlier, the key Id corresponds to the last 4 or 8 bytes of the key's Fingerprint. For OpenPGP v6 keys, the key Id corresponds to the first 8 bytes of the key's Fingerprint instead. For instance:
5E70662EA810E768
Fingerprint holds the hex-encoded, 20-byte fingerprint of the key. This is in the form:
5E70662EA810E768391A2FE8F7B7D49C89C9D7B1
The KeyId and Fingerprint parameters can be used to identify the correct key to specify in Keys. Keys can be set from within this event as this event fires directly before the decryption process begins.
It is recommended to use the Fingerprint to identify the correct key, as it is possible for different keys to have the same KeyId.
PublicKeyAlgorithm is the algorithm of the public key used to encrypt the message. Possible values are:
- RSA
- DSA
- ECDSA
- EdDSA
- Ed25519
- Ed448
- RSA-Legacy
- ECDH (Subkeys only)
- X25519 (Subkeys only)
- X448 (Subkeys only)
SignatureInfo Event (OpenPGP Class)
Fired during verification of the signed message.
Syntax
ANSI (Cross Platform) virtual int FireSignatureInfo(OpenPGPSignatureInfoEventParams *e);
typedef struct {
const char *KeyId;
const char *Fingerprint;
const char *SigningAlgorithm;
const char *PublicKeyAlgorithm; int reserved; } OpenPGPSignatureInfoEventParams;
Unicode (Windows) virtual INT FireSignatureInfo(OpenPGPSignatureInfoEventParams *e);
typedef struct {
LPCWSTR KeyId;
LPCWSTR Fingerprint;
LPCWSTR SigningAlgorithm;
LPCWSTR PublicKeyAlgorithm; INT reserved; } OpenPGPSignatureInfoEventParams;
#define EID_OPENPGP_SIGNATUREINFO 5 virtual INT IPWORKSOPENPGP_CALL FireSignatureInfo(LPSTR &lpszKeyId, LPSTR &lpszFingerprint, LPSTR &lpszSigningAlgorithm, LPSTR &lpszPublicKeyAlgorithm);
class OpenPGPSignatureInfoEventParams { public: const QString &KeyId(); const QString &Fingerprint(); const QString &SigningAlgorithm(); const QString &PublicKeyAlgorithm(); int EventRetVal(); void SetEventRetVal(int iRetVal); };
// To handle, connect one or more slots to this signal. void SignatureInfo(OpenPGPSignatureInfoEventParams *e);
// Or, subclass OpenPGP and override this emitter function. virtual int FireSignatureInfo(OpenPGPSignatureInfoEventParams *e) {...}
Remarks
This event fires when the VerifySignature or DecryptAndVerifySignature method is called. It provides information about the signature of the message.
KeyId is the hex-encoded 4- or 8-byte Id of the key used to sign the message. If a subkey was used to sign the message this will be the Id of that subkey. For OpenPGP v4 keys and earlier, the key Id corresponds to the last 4 or 8 bytes of the key's Fingerprint. For OpenPGP v6 keys, the key Id corresponds to the first 8 bytes of the key's Fingerprint instead. For instance:
5E70662EA810E768
Fingerprint holds the hex-encoded, 20-byte fingerprint of the key. This is in the form:
5E70662EA810E768391A2FE8F7B7D49C89C9D7B1
The KeyId and Fingerprint parameters can be used to identify the correct key to specify in SignerKeys. SignerKeys can be set from within this event as this event fires directly before the verification process begins.
It is recommended to use the Fingerprint to identify the correct key, as it is possible for different keys to have the same KeyId.
SigningAlgorithm describes the hash algorithm used when the message was originally signed. This value is applicable only to the message signature, not the key used to sign the message. Possible values are:
- SHA1
- MD5
- SHA256
- SHA384
- SHA512
- SHA224
- RIPEMD160
- SHA3-256
- SHA3-512
PublicKeyAlgorithm is the algorithm of the public key used to sign the message. Possible values are:
- RSA
- DSA
- ECDSA
- EdDSA
- Ed25519
- Ed448
- RSA-Legacy
- ECDH (Subkeys only)
- X25519 (Subkeys only)
- X448 (Subkeys only)
Status Event (OpenPGP Class)
Shows the progress of the operation.
Syntax
ANSI (Cross Platform) virtual int FireStatus(OpenPGPStatusEventParams *e);
typedef struct {
const char *Message; int reserved; } OpenPGPStatusEventParams;
Unicode (Windows) virtual INT FireStatus(OpenPGPStatusEventParams *e);
typedef struct {
LPCWSTR Message; INT reserved; } OpenPGPStatusEventParams;
#define EID_OPENPGP_STATUS 6 virtual INT IPWORKSOPENPGP_CALL FireStatus(LPSTR &lpszMessage);
class OpenPGPStatusEventParams { public: const QString &Message(); int EventRetVal(); void SetEventRetVal(int iRetVal); };
// To handle, connect one or more slots to this signal. void Status(OpenPGPStatusEventParams *e);
// Or, subclass OpenPGP and override this emitter function. virtual int FireStatus(OpenPGPStatusEventParams *e) {...}
Remarks
The event is fired for informational and logging purposes only. It may be used to track the progress of an operation.
The level of detail is controlled by the LogLevel setting.
VerificationStatus Event (OpenPGP Class)
Fired after verification of the signed message.
Syntax
ANSI (Cross Platform) virtual int FireVerificationStatus(OpenPGPVerificationStatusEventParams *e);
typedef struct {
const char *KeyId;
const char *Fingerprint;
int Status; int reserved; } OpenPGPVerificationStatusEventParams;
Unicode (Windows) virtual INT FireVerificationStatus(OpenPGPVerificationStatusEventParams *e);
typedef struct {
LPCWSTR KeyId;
LPCWSTR Fingerprint;
INT Status; INT reserved; } OpenPGPVerificationStatusEventParams;
#define EID_OPENPGP_VERIFICATIONSTATUS 7 virtual INT IPWORKSOPENPGP_CALL FireVerificationStatus(LPSTR &lpszKeyId, LPSTR &lpszFingerprint, INT &iStatus);
class OpenPGPVerificationStatusEventParams { public: const QString &KeyId(); const QString &Fingerprint(); int Status(); int EventRetVal(); void SetEventRetVal(int iRetVal); };
// To handle, connect one or more slots to this signal. void VerificationStatus(OpenPGPVerificationStatusEventParams *e);
// Or, subclass OpenPGP and override this emitter function. virtual int FireVerificationStatus(OpenPGPVerificationStatusEventParams *e) {...}
Remarks
This event fires when VerifySignature or DecryptAndVerifySignature is called. It provides information about the result.
KeyId is the hex-encoded 4- or 8-byte Id of the key used to sign the message. For OpenPGP v4 keys and earlier, the key Id corresponds to the last 4 or 8 bytes of the key's Fingerprint. For OpenPGP v6 keys, the key Id corresponds to the first 8 bytes of the key's Fingerprint instead. For instance:
5E70662EA810E768
Fingerprint holds the hex-encoded, 20-byte fingerprint of the key. This is in the form:
5E70662EA810E768391A2FE8F7B7D49C89C9D7B1
Status holds the result of the operation. Possible values are:
0 | Verification succeeded |
1 | Verification failed |
2 | The required key could not be found |
3 | Verification succeeded but the key is expired. |
Header Type
This is an HTTP header as it is received from the server.
Syntax
IPWorksOpenPGPHeader (declared in ipworksopenpgp.h)
Remarks
When a header is received through a Header event, it is parsed into a Header type. This type contains a Field, and its corresponding Value.
Fields
Field
char*
Default Value: ""
This field contains the name of the HTTP Header (this is the same case as it is delivered).
Value
char*
Default Value: ""
This field contains the Header contents.
Constructors
Header()
Header(const char* lpszField, const char* lpszValue)
Key Type
The OpenPGP key being used.
Syntax
IPWorksOpenPGPKey (declared in ipworksopenpgp.h)
Remarks
This type describes the current key. The key may be a public or secret key. The fields are used to identify or select the key.
Fields
Curve
char* (read-only)
Default Value: ""
This field specifies the elliptic curve if PublicKeyAlgorithm is ECDSA, EdDSA, Ed25519, or Ed448. Possible values are:
Curve | Valid Public Key Algorithms | Description |
secp256r1 | ECDSA | NIST curve P-256 |
secp384r1 | ECDSA | NIST curve P-384 |
secp521r1 | ECDSA | NIST curve P-521 |
secp256k1 | ECDSA | Secp256k1 |
Ed25519 | EdDSA, Ed25519 | Ed25519 |
Ed448 | Ed448 | Ed448 |
EffectiveDate
char* (read-only)
Default Value: ""
The date when this key becomes valid. Prior to this it is not valid. The following is an example of a valid encoded date:
23-Jan-2000 15:00:00.
Encoded
char*
Default Value: ""
The key. This field can be used to assign a specific key. The Fingerprint, Id, and UserId fields may also be used to specify a key.
ExpirationDate
char* (read-only)
Default Value: ""
The date the key expires. After this date the key will no longer be valid. The following is an example of a valid encoded date:
23-Jan-2001 15:00:00.
Fingerprint
char*
Default Value: ""
The hex-encoded, 20-byte fingerprint of the key.
When a key is loaded, this field is populated with the Fingerprint associated with the key. This field may be set to load a key from the Keyring. When this field is set the classwill search the Keyring for a key associated with the Fingerprint specified.
This is in the form:
5E70662EA810E768391A2FE8F7B7D49C89C9D7B1
Id
char*
Default Value: ""
The hex-encoded, 4-byte or 8-byte key Id. For OpenPGP v4 keys and earlier, the key Id corresponds to the last 4 or 8 bytes of the key's Fingerprint. For OpenPGP v6 keys, the key Id corresponds to the first 8 bytes of the key's Fingerprint instead. For instance:
5E70662EA810E768
When a key is loaded, this field is populated with the Id associated with the key. This field may be set to load a key from the Keyring. When this field is set the class will search the Keyring for a key associated with the Id specified.
The KeyIdLength setting may be set to control the length of the returned key Id.
Note: It is recommended to use the Fingerprint field when loading a key from the Keyring, as it is possible for different keys to have the same Id.
Keyring
char*
Default Value: ""
The location of the keyring.
If the keyring is stored in a directory, set this property to the directory. The directory must contain the files "secring.gpg" and "pubring.gpg". A keyring may also be stored in a single file. If the keyring is a file this property should be set to the path of the file.
When This field is set the class will read the keyring and populate the Key property with the first key found in the keyring. Set UserId to select a different key in the current keyring.
OtherUserIds
char* (read-only)
Default Value: ""
If the specified key has alternate user Ids associated with it, this field returns a comma-separated list of the other user Ids.
Passphrase
char*
Default Value: ""
The passphrase for the key's secret key (if any). This must be specified before operations requiring the secret key are attempted. The passphrase may be supplied in this field or through the KeyPassphrase event, which will fire when a passphrase is required.
The passphrase is required when using the following methods in KeyMgr:
- AddUserId
- SignUserId
- ChangeExpirationDate
- ChangePassphrase
When using the OpenPGP class, or an email-based class, the following methods require a passphrase for the key:
- Decrypt
- Sign
- SignAndEncrypt
PublicKey
char* (read-only)
Default Value: ""
The public key of the key. The key is provided as ASCII armored data.
PublicKeyAlgorithm
char* (read-only)
Default Value: ""
A text description of the public key algorithm of the key. Possible values are:
- RSA
- DSA
- ECDSA
- EdDSA
- Ed25519
- Ed448
- RSA-Legacy
PublicKeyLength
int (read-only)
Default Value: 0
The length of the public key in bits. Common values are 512, 1024, and 2048.
If the PublicKeyAlgorithm field is ECDSA, EdDSA, Ed25519, or Ed448, the length of the public key is determined by the Curve. Possible lengths are:
Curve | Public Key Length (bits) |
secp256r1 | 256 |
secp384r1 | 384 |
secp521r1 | 528 |
secp256k1 | 256 |
Ed25519 | 256 |
Ed448 | 456 |
Revoked
int (read-only)
Default Value: FALSE
Whether or not the key is revoked.
SecretKey
char* (read-only)
Default Value: ""
The secret key of the key (if available). The key is provided as ASCII armored data.
SecretKeyAvailable
int (read-only)
Default Value: FALSE
Whether or not a secret key is available for the selected key.
Usage
char* (read-only)
Default Value: ""
A text description of UsageFlags.
The value will be of one or more of the following strings, separated by commas:
- Certifying Other Certificates
- Signing Emails and Files
- Encrypting Emails and Files
- Split Key
- Authenticate Against Servers
- Group Key
UsageFlags
int (read-only)
Default Value: 47
Flags that show the intended use for the key. The default value is 0x0F. The value of UsageFlags is a combination of the following flags:
0x01 | This key may be used to certify other keys. |
0x02 | This key may be used to sign data. |
0x0C | This key may be used to encrypt communications and encrypt storage. |
0x10 | The private component of this key may have been split by a secret-sharing mechanism. |
0x20 | This key may be used for authentication. |
0x80 | The private component of this key may be in the possession of more than one person. |
Please refer to the Usage field for a text representation of UsageFlags.
UserId
char*
Default Value: ""
The user Id of the key. When a key is loaded this field is populated with the user Id associated with the key. This field may be set to load a key from the Keyring. When this field is set the class will search the Keyring for a key associated with the UserId specified.
When loading a key with multiple user Ids, this field will be populated with the UserId that was most recently added to the key. To discover all of the UserIds associated with a key query this field and OtherUserIds after loading the key.
The UserId format is:
FirstName LastName (Comment) <Email>Not all values are required when selecting or generating a key, but at least FirstName or Email are required.
Note that for OpenPGP v6, a key may be created with or without a UserId, as the field is optional. If a key was created without a UserId, the key's Fingerprint can be used as it's identifier instead.
When using this field to select a key you may also specify the key's Id, or any of its subkeys' Ids, instead of a user Id. The class will then search for a key with a matching Id. This is helpful in situations where you do not have the UserId but still need to load the key, such as within the OpenPGP class's RecipientInfo event.
Version
int (read-only)
Default Value: 4
This field can be used to query the OpenPGP version of the currently selected Key. Possible values are:
- 4 - OpenPGP v4 (default)
- 6 - OpenPGP v6
IPWorksOpenPGPList Type
Syntax
IPWorksOpenPGPList<T> (declared in ipworksopenpgp.h)
Remarks
IPWorksOpenPGPList is a generic class that is used to hold a collection of objects of type T, where T is one of the custom types supported by the OpenPGP class.
Methods | |
GetCount |
This method returns the current size of the collection.
int GetCount() {}
|
SetCount |
This method sets the size of the collection. This method returns 0 if setting the size was successful; or -1 if the collection is ReadOnly. When adding additional objects to a collection call this method to specify the new size. Increasing the size of the collection preserves existing objects in the collection.
int SetCount() {}
|
Get |
This method gets the item at the specified position. The index parameter specifies the index of the item in the collection. This method returns NULL if an invalid index is specified.
T* Get(int index) {}
|
Set |
This method sets the item at the specified position. The index parameter specifies the index of the item in the collection that is being set. This method returns -1 if an invalid index is specified. Note: Objects created using the new operator must be freed using the delete operator; they will not be automatically freed by the class.
T* Set(int index, T* value) {}
|
IPWorksOpenPGPStream Type
Syntax
IPWorksOpenPGPStream (declared in ipworksopenpgp.h)
Remarks
The OpenPGP class includes one or more API members that take a stream object as a parameter. To use such API members, create a concrete class that implements the IPWorksOpenPGPStream interface and pass the OpenPGP class an instance of that concrete class.
When implementing the IPWorksOpenPGPStream interface's properties and methods, they must behave as described below. If the concrete class's implementation does not behave as expected, undefined behavior may occur.
Properties | |
CanRead |
Whether the stream supports reading.
bool CanRead() { return true; } |
CanSeek |
Whether the stream supports seeking.
bool CanSeek() { return true; } |
CanWrite |
Whether the stream supports writing.
bool CanWrite() { return true; } |
Length |
Gets the length of the stream, in bytes.
int64 GetLength() = 0; |
Methods | |
Close |
Closes the stream, releasing all resources currently allocated for it.
void Close() {} This method is called automatically when an IPWorksOpenPGPStream object is deleted. |
Flush |
Forces all data held by the stream's buffers to be written out to storage.
int Flush() { return 0; } Must return 0 if flushing is successful; or -1 if an error occurs or the stream is closed. If the stream does not support writing, this method must do nothing and return 0. |
Read |
Reads a sequence of bytes from the stream and advances the current position within the stream by the number of bytes read.
int Read(void* buffer, int count) = 0; Buffer specifies the buffer to populate with data from the stream. Count specifies the number of bytes that should be read from the stream. Must return the total number of bytes read into Buffer; this may be less than Count if that many bytes are not currently available, or 0 if the end of the stream has been reached. Must return -1 if an error occurs, if reading is not supported, or if the stream is closed. |
Seek |
Sets the current position within the stream based on a particular point of origin.
int64 Seek(int64 offset, int seekOrigin) = 0; Offset specifies the offset in the stream to seek to, relative to SeekOrigin. Valid values for SeekOrigin are:
Must return the new position within the stream; or -1 if an error occurs, if seeking is not supported, or if the stream is closed (however, see note below). If -1 is returned, the current position within the stream must remain unchanged. Note: If the stream is not closed, it must always be possible to call this method with an Offset of 0 and a SeekOrigin of 1 to obtain the current position within the stream, even if seeking is not otherwise supported. |
Write |
Writes a sequence of bytes to the stream and advances the current position within the stream by the number of bytes written.
int Write(const void* buffer, int count) = 0; Buffer specifies the buffer with data to write to the stream. Count specifies the number of bytes that should be written to the stream. Must return the total number of bytes written to the stream; this may be less than Count if that many bytes could not be written. Must return -1 if an error occurs, if writing is not supported, or if the stream is closed. |
Config Settings (OpenPGP Class)
The class accepts one or more of the following configuration settings. Configuration settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the class, access to these internal properties is provided through the Config method.OpenPGP Config Settings
By default, this value is 6. Valid values range from 6 to 22.
The chunk size is calculated as 2^exp (in octets, or bytes), where exp is the value of this configuration setting. For example, the default chunk size would be: 2^(6) = 64 bytes. In this case, the plaintext would be split into chunks of 64 bytes, each of which will be individually encrypted using the specified EncryptingAlgorithm.
When set to True the class will read the features from the recipient key to determine if the older packet type is required. If the key does require the old packet type, then the older packet type will be used. If the key does not require the old packet type, then the new integrity protected packet type will still be used.
By default this value is False. This means under no conditions is the older less secure packet type used. The newer integrity protected packet type is always used.
Only enable this setting if you have a requirement to do so.
The default value is 3. Valid values range from 1 to 2^(32)-1. Higher values provide more brute-force protection for the key passphrase at the cost of performance. This configuration can be used to tune the running time independently of the memory size (see Argon2MemorySizeExp).
The default value is 16. Valid values range from 3 to 31, though the minimum can vary depending on the value of Argon2Parallelism (see below). The memory size (in KB) is calculated as 2^exp, where exp is the value of this configuration setting. For example, the default memory size would be: 2^(16) = 65,536 KB.
Note: The memory size must be an integer number of kilobytes ranging from 8*p to 2^(32)-1, where p is the value of Argon2Parallelism. Therefore, Argon2MemorySizeExp must be an integer ranging from 3+ceil(log2(p)) to 31. For example, if Argon2Parallelism is set to 8, valid values for Argon2MemorySizeExp range from 6 to 31.
The default value is 4. Valid values range from 1 to 2^(24)-1.
zlib | 1-6 |
zip | 1-6 |
bzip2 | 1-9 |
89011C04000102000605025100459B000A0910E2...
DSA Notes
DSA requires that the hash be 160 bits or larger, which means MD5 is not a suitable algorithm. When DSA Signature Hash Algorithm selection is enabled (default) the class will use the preferred algorithm from the key if it meets the requirements for DSA. If the preferred algorithm is MD5 and does not meed the requirements for DSA the class will automatically use a suitable algorithm based on the Q element of the DSA key (may be SHA1, SHA224, or SHA256).
ECDSA Notes
The ECDSA Signature Hash Algorithm requirements are directly related to the Curve used by the key. When this setting is enabled (default) the class will use the preferred algorithm from the key if it meets the requirements for ECDSA. If the preferred algorithm does not meet the requirements the class will automatically select a valid hash algorithm based on the curve as follows:
Curve | Hash Algorithm |
secp256r1 | SHA256 |
secp384r1 | SHA384 |
secp521r1 | SHA512 |
secp256k1 | SHA256 |
For OpenPGP v4 keys and earlier, the key Id corresponds to the last 4 or 8 bytes of the key's Fingerprint. For OpenPGP v6 keys, the key Id corresponds to the first 8 bytes of the key's Fingerprint instead. For instance:
5E70662EA810E768
0 | Automatic selection, first suitable subkey. Expired keys accepted. |
1 | Automatic selection, first suitable subkey. Expired keys not accepted. |
2 | Automatic selection, newest suitable subkey. Expired keys not accepted (Default). |
99 | Manual Selection. |
Manual Selection
To manually select a key for any operation pass the key's Id in the constructor.
Openpgp pgp = new Openpgp();
pgp.Config("KeySelectionMethod=99");
pgp.RecipientKeys.Add(new Key(@"C:\path\to\key.asc", "7CA1376C39768977")); // Key with Id 7CA1376C39768977 will be used for encryption.
0 (None) | No events are logged. |
1 (Info - default) | Informational events are logged. |
2 (Verbose) | Detailed data is logged. |
3 (Debug) | Debug data is logged. |
- To create a PGP zip file set this value to a location on disk including a filemask and call Encrypt. For instance:
OpenPGP1.Config("PGPZipDir=C:\MyFiles\*.txt"); OpenPGP1.OutputFile = "C:\PGPZip.pgp"; OpenPGP1.Encrypt();
The created file returned in the OutputFile property is the PGP zip. If InputFile is specified it is used to temporarily hold the Tar archive while creating the PGP zip file. The temporary file is not automatically deleted. If InputFile is not specified the Tar archive is held in memory while creating the PGP zip file. - To extract a PGP zip file set this value to a location on disk and call Decrypt. For instance:
OpenPGP1.Config("PGPZipDir=C:\MyFiles"); OpenPGP1.InputFile = "C:\PGPZip.pgp"; OpenPGP1.Decrypt();
The extracted files will be present in the specified directory. If OutputFile is specified it is used to temporarily hold the Tar archive. The temporary file is not automatically deleted. If OutputFile is not specified the Tar archive is held in memory while extracting the PGP zip file. Note that if the OpenPGP message supplied is not a PGP zip file the decryption will occur as normal without error.
0 | Automatic - If the PGP message contains the special header version "PGP Command Line" then recursive decryption will be attempted. (Default) |
1 | Always attempt recursive decryption. |
2 | Never attempt recursive decryption. |
The default value is false.
The default value is false.
This configuration is only applicable when SymmetricPassphrase is specified and when calling Encrypt or Decrypt. Additionally, the following configuration settings are applicable when this config is set to True:
Note that if UseArgon2 is enabled, EncryptingAlgorithm must be specified as an AEAD encryption algorithm (e.g., AES192-OCB). Please see the EncryptingAlgorithm for additional details.
This config is True by default, and must be true when verifying an OpenPGP v6 cleartext signature. When enabled, the cleartext portion will be cached in memory until the signature is fully processed.
Note: If the signature is known to be an OpenPGP v4 cleartext signature beforehand (i.e., signed with a v4 key), this config may be set to False. However, if this config is disabled, the class will be unable to verify OpenPGP v6 cleartext signatures. In this case, the class will throw an exception when calling VerifySignature or DecryptAndVerifySignature.
This setting will be populated after calling Decrypt, VerifySignature, or DecryptAndVerifySignature.
Base Config Settings
The following is a list of valid code page identifiers:
Identifier | Name |
037 | IBM EBCDIC - U.S./Canada |
437 | OEM - United States |
500 | IBM EBCDIC - International |
708 | Arabic - ASMO 708 |
709 | Arabic - ASMO 449+, BCON V4 |
710 | Arabic - Transparent Arabic |
720 | Arabic - Transparent ASMO |
737 | OEM - Greek (formerly 437G) |
775 | OEM - Baltic |
850 | OEM - Multilingual Latin I |
852 | OEM - Latin II |
855 | OEM - Cyrillic (primarily Russian) |
857 | OEM - Turkish |
858 | OEM - Multilingual Latin I + Euro symbol |
860 | OEM - Portuguese |
861 | OEM - Icelandic |
862 | OEM - Hebrew |
863 | OEM - Canadian-French |
864 | OEM - Arabic |
865 | OEM - Nordic |
866 | OEM - Russian |
869 | OEM - Modern Greek |
870 | IBM EBCDIC - Multilingual/ROECE (Latin-2) |
874 | ANSI/OEM - Thai (same as 28605, ISO 8859-15) |
875 | IBM EBCDIC - Modern Greek |
932 | ANSI/OEM - Japanese, Shift-JIS |
936 | ANSI/OEM - Simplified Chinese (PRC, Singapore) |
949 | ANSI/OEM - Korean (Unified Hangul Code) |
950 | ANSI/OEM - Traditional Chinese (Taiwan; Hong Kong SAR, PRC) |
1026 | IBM EBCDIC - Turkish (Latin-5) |
1047 | IBM EBCDIC - Latin 1/Open System |
1140 | IBM EBCDIC - U.S./Canada (037 + Euro symbol) |
1141 | IBM EBCDIC - Germany (20273 + Euro symbol) |
1142 | IBM EBCDIC - Denmark/Norway (20277 + Euro symbol) |
1143 | IBM EBCDIC - Finland/Sweden (20278 + Euro symbol) |
1144 | IBM EBCDIC - Italy (20280 + Euro symbol) |
1145 | IBM EBCDIC - Latin America/Spain (20284 + Euro symbol) |
1146 | IBM EBCDIC - United Kingdom (20285 + Euro symbol) |
1147 | IBM EBCDIC - France (20297 + Euro symbol) |
1148 | IBM EBCDIC - International (500 + Euro symbol) |
1149 | IBM EBCDIC - Icelandic (20871 + Euro symbol) |
1200 | Unicode UCS-2 Little-Endian (BMP of ISO 10646) |
1201 | Unicode UCS-2 Big-Endian |
1250 | ANSI - Central European |
1251 | ANSI - Cyrillic |
1252 | ANSI - Latin I |
1253 | ANSI - Greek |
1254 | ANSI - Turkish |
1255 | ANSI - Hebrew |
1256 | ANSI - Arabic |
1257 | ANSI - Baltic |
1258 | ANSI/OEM - Vietnamese |
1361 | Korean (Johab) |
10000 | MAC - Roman |
10001 | MAC - Japanese |
10002 | MAC - Traditional Chinese (Big5) |
10003 | MAC - Korean |
10004 | MAC - Arabic |
10005 | MAC - Hebrew |
10006 | MAC - Greek I |
10007 | MAC - Cyrillic |
10008 | MAC - Simplified Chinese (GB 2312) |
10010 | MAC - Romania |
10017 | MAC - Ukraine |
10021 | MAC - Thai |
10029 | MAC - Latin II |
10079 | MAC - Icelandic |
10081 | MAC - Turkish |
10082 | MAC - Croatia |
12000 | Unicode UCS-4 Little-Endian |
12001 | Unicode UCS-4 Big-Endian |
20000 | CNS - Taiwan |
20001 | TCA - Taiwan |
20002 | Eten - Taiwan |
20003 | IBM5550 - Taiwan |
20004 | TeleText - Taiwan |
20005 | Wang - Taiwan |
20105 | IA5 IRV International Alphabet No. 5 (7-bit) |
20106 | IA5 German (7-bit) |
20107 | IA5 Swedish (7-bit) |
20108 | IA5 Norwegian (7-bit) |
20127 | US-ASCII (7-bit) |
20261 | T.61 |
20269 | ISO 6937 Non-Spacing Accent |
20273 | IBM EBCDIC - Germany |
20277 | IBM EBCDIC - Denmark/Norway |
20278 | IBM EBCDIC - Finland/Sweden |
20280 | IBM EBCDIC - Italy |
20284 | IBM EBCDIC - Latin America/Spain |
20285 | IBM EBCDIC - United Kingdom |
20290 | IBM EBCDIC - Japanese Katakana Extended |
20297 | IBM EBCDIC - France |
20420 | IBM EBCDIC - Arabic |
20423 | IBM EBCDIC - Greek |
20424 | IBM EBCDIC - Hebrew |
20833 | IBM EBCDIC - Korean Extended |
20838 | IBM EBCDIC - Thai |
20866 | Russian - KOI8-R |
20871 | IBM EBCDIC - Icelandic |
20880 | IBM EBCDIC - Cyrillic (Russian) |
20905 | IBM EBCDIC - Turkish |
20924 | IBM EBCDIC - Latin-1/Open System (1047 + Euro symbol) |
20932 | JIS X 0208-1990 & 0121-1990 |
20936 | Simplified Chinese (GB2312) |
21025 | IBM EBCDIC - Cyrillic (Serbian, Bulgarian) |
21027 | Extended Alpha Lowercase |
21866 | Ukrainian (KOI8-U) |
28591 | ISO 8859-1 Latin I |
28592 | ISO 8859-2 Central Europe |
28593 | ISO 8859-3 Latin 3 |
28594 | ISO 8859-4 Baltic |
28595 | ISO 8859-5 Cyrillic |
28596 | ISO 8859-6 Arabic |
28597 | ISO 8859-7 Greek |
28598 | ISO 8859-8 Hebrew |
28599 | ISO 8859-9 Latin 5 |
28605 | ISO 8859-15 Latin 9 |
29001 | Europa 3 |
38598 | ISO 8859-8 Hebrew |
50220 | ISO 2022 Japanese with no halfwidth Katakana |
50221 | ISO 2022 Japanese with halfwidth Katakana |
50222 | ISO 2022 Japanese JIS X 0201-1989 |
50225 | ISO 2022 Korean |
50227 | ISO 2022 Simplified Chinese |
50229 | ISO 2022 Traditional Chinese |
50930 | Japanese (Katakana) Extended |
50931 | US/Canada and Japanese |
50933 | Korean Extended and Korean |
50935 | Simplified Chinese Extended and Simplified Chinese |
50936 | Simplified Chinese |
50937 | US/Canada and Traditional Chinese |
50939 | Japanese (Latin) Extended and Japanese |
51932 | EUC - Japanese |
51936 | EUC - Simplified Chinese |
51949 | EUC - Korean |
51950 | EUC - Traditional Chinese |
52936 | HZ-GB2312 Simplified Chinese |
54936 | Windows XP: GB18030 Simplified Chinese (4 Byte) |
57002 | ISCII Devanagari |
57003 | ISCII Bengali |
57004 | ISCII Tamil |
57005 | ISCII Telugu |
57006 | ISCII Assamese |
57007 | ISCII Oriya |
57008 | ISCII Kannada |
57009 | ISCII Malayalam |
57010 | ISCII Gujarati |
57011 | ISCII Punjabi |
65000 | Unicode UTF-7 |
65001 | Unicode UTF-8 |
Identifier | Name |
1 | ASCII |
2 | NEXTSTEP |
3 | JapaneseEUC |
4 | UTF8 |
5 | ISOLatin1 |
6 | Symbol |
7 | NonLossyASCII |
8 | ShiftJIS |
9 | ISOLatin2 |
10 | Unicode |
11 | WindowsCP1251 |
12 | WindowsCP1252 |
13 | WindowsCP1253 |
14 | WindowsCP1254 |
15 | WindowsCP1250 |
21 | ISO2022JP |
30 | MacOSRoman |
10 | UTF16String |
0x90000100 | UTF16BigEndian |
0x94000100 | UTF16LittleEndian |
0x8c000100 | UTF32String |
0x98000100 | UTF32BigEndian |
0x9c000100 | UTF32LittleEndian |
65536 | Proprietary |
- Product: The product the license is for.
- Product Key: The key the license was generated from.
- License Source: Where the license was found (e.g., RuntimeLicense, License File).
- License Type: The type of license installed (e.g., Royalty Free, Single Server).
- Last Valid Build: The last valid build number for which the license will work.
This setting only works on these classes: AS3Receiver, AS3Sender, Atom, Client(3DS), FTP, FTPServer, IMAP, OFTPClient, SSHClient, SCP, Server(3DS), Sexec, SFTP, SFTPServer, SSHServer, TCPClient, TCPServer.
On Linux, the C++ edition requires installation of the FIPS-enabled OpenSSL library. The OpenSSL FIPS provider version must be at least 3.0.0. For additional information and instructions regarding the installation and activation of the FIPS-enabled OpenSSL library, please refer to the following link: https://github.com/openssl/openssl/blob/master/README-FIPS.md
To ensure the class utilizes the FIPS-enabled OpenSSL library, the obfuscated source code should first be compiled with OpenSSL enabled, as described in the Supported Platforms section. Additionally, the FIPS module should be enabled and active. If the obfuscated source code is not compiled as mentioned, or the FIPS module is inactive, the class will throw an appropriate error assuming FIPS mode is enabled.
FIPS mode can be enabled by setting the UseFIPSCompliantAPI configuration setting to true. This is a static setting that applies to all instances of all classes of the toolkit within the process. It is recommended to enable or disable this setting once before the component has been used to establish a connection. Enabling FIPS while an instance of the component is active and connected may result in unexpected behavior.
For more details, please see the FIPS 140-2 Compliance article.
Note: This setting is applicable only on Windows.
Note: Enabling FIPS compliance requires a special license; please contact sales@nsoftware.com for details.
Setting this configuration setting to true tells the class to use the internal implementation instead of using the system security libraries.
On Windows, this setting is set to false by default. On Linux/macOS, this setting is set to true by default.
To use the system security libraries for Linux, OpenSSL support must be enabled. For more information on how to enable OpenSSL, please refer to the OpenSSL Notes section.
Trappable Errors (OpenPGP Class)
Error Handling (C++)
Call the GetLastErrorCode() method to obtain the last called method's result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. Known error codes are listed below. If an error occurs, the GetLastError() method can be called to retrieve the associated error message.
OpenPGP Errors
101 | Cannot decode ASCII Armor data. |
102 | Unknown ASCII Armor data type. |
103 | Checksum failed. |
104 | Unknown ASCII Armor header. |
105 | Cannot decode PGP packet. |
106 | Cannot encode PGP packet. |
107 | Unknown PGP packet tag. |
108 | Unsupported version. |
109 | Unsupported algorithm. |
110 | Unknown subpacket. |
111 | Internal error. |
112 | Feature not supported. |
113 | Secret data was not encrypted. |
114 | Cannot find the key. |
115 | Error reading file. |
116 | Error writing file. |
117 | Error reading key. |
118 | Error writing key. |
119 | Cannot verify signature. |
120 | Cannot create signature. |
121 | Invalid UserId. |
122 | Invalid passphrase. |
123 | Data encryption failed. |
124 | Error creating key. |
125 | Unsupported symmetric algorithm. |
126 | Unsupported hash. |
127 | Unsupported compression algorithm. |
128 | Invalid key usage. |
129 | Component is busy. |
130 | Error decrypting data. |
131 | Data is not compressed. |
132 | Error decompressing data. |
133 | Error compressing data. |
134 | Unsupported signature. |
135 | Failed to overwrite file. |
141 | No input. |
142 | Signing was required, but the message was not signed. |
143 | Encryption was required, but the message was not encrypted. |
146 | No data integrity packet was found (MDC), but one was required. |
200 | Out of memory. |