// CkCrypt2W.h: interface for the CkCrypt2W class.
//
//////////////////////////////////////////////////////////////////////

// This header is generated for Chilkat 11.3.0

#ifndef _CkCrypt2W_H
#define _CkCrypt2W_H
	
#include "chilkatDefs.h"
#include "CkString.h"
#include "CkClassWithCallbacksW.h"

class CkCertW;
class CkBinDataW;
class CkByteData;
class CkTaskW;
class CkStringBuilderW;
class CkSecureStringW;
class CkStreamW;
class CkJsonObjectW;
class CkCertChainW;
class CkPrivateKeyW;
class CkHttpW;
class CkXmlCertVaultW;
class CkBaseProgressW;



#if !defined(__sun__) && !defined(__sun)
#pragma pack (push, 8)
#endif
 

// CLASS: CkCrypt2W
class CK_VISIBLE_PUBLIC CkCrypt2W  : public CkClassWithCallbacksW
{
	private:
	bool m_cbOwned;

	private:
	
	// Don't allow assignment or copying these objects.
	CkCrypt2W(const CkCrypt2W &);
	CkCrypt2W &operator=(const CkCrypt2W &);

    public:
	CkCrypt2W(void);
	virtual ~CkCrypt2W(void);

	

	static CkCrypt2W *createNew(void);
	

	CkCrypt2W(bool bCallbackOwned);
	static CkCrypt2W *createNew(bool bCallbackOwned);

	
	void CK_VISIBLE_PRIVATE inject(void *impl);

	// May be called when finished with the object to free/dispose of any
	// internal resources held by the object. 
	void dispose(void);

	CkBaseProgressW *get_EventCallbackObject(void) const;
	void put_EventCallbackObject(CkBaseProgressW *progress);


	// BEGIN PUBLIC INTERFACE

	// ----------------------
	// Properties
	// ----------------------
	// Setting this property to true will abort the current method, but only for
	// those methods having an Async alternative. The property automatically resets to
	// false at the start of each method and after an abort. Both synchronous and
	// asynchronous methods can be aborted; synchronous methods require setting this
	// property from another thread.
	bool get_AbortCurrent(void);
	// Setting this property to true will abort the current method, but only for
	// those methods having an Async alternative. The property automatically resets to
	// false at the start of each method and after an abort. Both synchronous and
	// asynchronous methods can be aborted; synchronous methods require setting this
	// property from another thread.
	void put_AbortCurrent(bool newVal);

	// The BCrypt work factor determines the computational cost of BCryptHash and
	// BCryptVerify . It represents the base-2 logarithm of the number of hashing
	// rounds. For instance, a work factor of 12 corresponds to 2^12 hashing rounds.
	// This cost factor is designed to make computations challenging enough to deter
	// brute-force attacks. The work factor must be set between 4 and 31, inclusive,
	// with a default value of 10 .
	// 
	// References:
	// 1: #BCryptHash
	// 2: #BCryptVerify
	int get_BCryptWorkFactor(void);
	// The BCrypt work factor determines the computational cost of BCryptHash and
	// BCryptVerify . It represents the base-2 logarithm of the number of hashing
	// rounds. For instance, a work factor of 12 corresponds to 2^12 hashing rounds.
	// This cost factor is designed to make computations challenging enough to deter
	// brute-force attacks. The work factor must be set between 4 and 31, inclusive,
	// with a default value of 10 .
	// 
	// References:
	// 1: #BCryptHash
	// 2: #BCryptVerify
	void put_BCryptWorkFactor(int newVal);

	// This property indicates the block size in bytes for the chosen encryption
	// algorithm. For instance, if the CryptAlgorithm is set to AES , the BlockSize is
	// automatically set to 16 bytes. In contrast, the block size for the ChaCha20
	// streaming algorithm is 1 byte.
	// 
	// References:
	// 1: #CryptAlgorithm
	int get_BlockSize(void);

	// This property applies to all PKCS7 signature creation methods. When set to
	// true, it ensures the inclusion of required attributes (such as content-type ,
	// message-digest , and signing-certificate-v2 ) to qualify the signature as at
	// least a CAdES-BES signature. By default, this property is set to false.
	bool get_CadesEnabled(void);
	// This property applies to all PKCS7 signature creation methods. When set to
	// true, it ensures the inclusion of required attributes (such as content-type ,
	// message-digest , and signing-certificate-v2 ) to qualify the signature as at
	// least a CAdES-BES signature. By default, this property is set to false.
	void put_CadesEnabled(bool newVal);

	// This property is for PKCS7 CMS signatures that wish to include CAdES signature
	// policy attributes . Set it to the base64 -encoded hash of the policy document at
	// the CadesSigPolicyUri using either SHA256 or SHA1 .
	// 
	// References:
	// 1: #CadesSigPolicyUri
	void get_CadesSigPolicyHash(CkString &str);
	// This property is for PKCS7 CMS signatures that wish to include CAdES signature
	// policy attributes . Set it to the base64 -encoded hash of the policy document at
	// the CadesSigPolicyUri using either SHA256 or SHA1 .
	// 
	// References:
	// 1: #CadesSigPolicyUri
	const wchar_t *cadesSigPolicyHash(void);
	// This property is for PKCS7 CMS signatures that wish to include CAdES signature
	// policy attributes . Set it to the base64 -encoded hash of the policy document at
	// the CadesSigPolicyUri using either SHA256 or SHA1 .
	// 
	// References:
	// 1: #CadesSigPolicyUri
	void put_CadesSigPolicyHash(const wchar_t *newVal);

	// This property is for PKCS7 CMS signatures that wish to include CAdES signature
	// policy attributes . The CAdES Signature Policy ID is an object identifier ( OID
	// ) included in a CAdES signature that specifies the exact signature policy the
	// signer followed. It is the OID associated with the policy URL. An example OID
	// would look like this: 2.16.840.1.101.3.2.1.48.1
	// 
	// An application that wishes to include signature policy attributes should set all
	// three properties: CadesSigPolicyHash , CadesSigPolicyUri , and CadesSigPolicyId
	// .
	// 
	// 
	// References:
	// 1: #CadesSigPolicyHash
	// 2: #CadesSigPolicyUri
	// 3: #CadesSigPolicyId
	void get_CadesSigPolicyId(CkString &str);
	// This property is for PKCS7 CMS signatures that wish to include CAdES signature
	// policy attributes . The CAdES Signature Policy ID is an object identifier ( OID
	// ) included in a CAdES signature that specifies the exact signature policy the
	// signer followed. It is the OID associated with the policy URL. An example OID
	// would look like this: 2.16.840.1.101.3.2.1.48.1
	// 
	// An application that wishes to include signature policy attributes should set all
	// three properties: CadesSigPolicyHash , CadesSigPolicyUri , and CadesSigPolicyId
	// .
	// 
	// 
	// References:
	// 1: #CadesSigPolicyHash
	// 2: #CadesSigPolicyUri
	// 3: #CadesSigPolicyId
	const wchar_t *cadesSigPolicyId(void);
	// This property is for PKCS7 CMS signatures that wish to include CAdES signature
	// policy attributes . The CAdES Signature Policy ID is an object identifier ( OID
	// ) included in a CAdES signature that specifies the exact signature policy the
	// signer followed. It is the OID associated with the policy URL. An example OID
	// would look like this: 2.16.840.1.101.3.2.1.48.1
	// 
	// An application that wishes to include signature policy attributes should set all
	// three properties: CadesSigPolicyHash , CadesSigPolicyUri , and CadesSigPolicyId
	// .
	// 
	// 
	// References:
	// 1: #CadesSigPolicyHash
	// 2: #CadesSigPolicyUri
	// 3: #CadesSigPolicyId
	void put_CadesSigPolicyId(const wchar_t *newVal);

	// This property is for PKCS7 CMS signatures that wish to include CAdES signature
	// policy attributes . The signature policy URI in a CAdES digital signature is a
	// link that points to a document describing the rules and conditions under which
	// the signature was created. Typically the Signature Policy URI in a CAdES
	// signature points to a .der file, not a PDF or human-readable document. For
	// example: http://example.com/policies/my-policy.der
	void get_CadesSigPolicyUri(CkString &str);
	// This property is for PKCS7 CMS signatures that wish to include CAdES signature
	// policy attributes . The signature policy URI in a CAdES digital signature is a
	// link that points to a document describing the rules and conditions under which
	// the signature was created. Typically the Signature Policy URI in a CAdES
	// signature points to a .der file, not a PDF or human-readable document. For
	// example: http://example.com/policies/my-policy.der
	const wchar_t *cadesSigPolicyUri(void);
	// This property is for PKCS7 CMS signatures that wish to include CAdES signature
	// policy attributes . The signature policy URI in a CAdES digital signature is a
	// link that points to a document describing the rules and conditions under which
	// the signature was created. Typically the Signature Policy URI in a CAdES
	// signature points to a .der file, not a PDF or human-readable document. For
	// example: http://example.com/policies/my-policy.der
	void put_CadesSigPolicyUri(const wchar_t *newVal);

	// This property specifies the character encoding used to represent text as bytes
	// for encryption and hashing. By default, it uses the computer's ANSI charset,
	// such as Windows-1252 for locales like the United States, United Kingdom, Western
	// Europe, Australia, and New Zealand.
	// 
	// Most applications are advised to set this property to UTF-8 . Chilkat plans to
	// change its default to UTF-8 in a future major version to align with current
	// standards. The current default of ANSI stems from a time when UTF-8 was not
	// widely adopted.
	// 
	void get_Charset(CkString &str);
	// This property specifies the character encoding used to represent text as bytes
	// for encryption and hashing. By default, it uses the computer's ANSI charset,
	// such as Windows-1252 for locales like the United States, United Kingdom, Western
	// Europe, Australia, and New Zealand.
	// 
	// Most applications are advised to set this property to UTF-8 . Chilkat plans to
	// change its default to UTF-8 in a future major version to align with current
	// standards. The current default of ANSI stems from a time when UTF-8 was not
	// widely adopted.
	// 
	const wchar_t *charset(void);
	// This property specifies the character encoding used to represent text as bytes
	// for encryption and hashing. By default, it uses the computer's ANSI charset,
	// such as Windows-1252 for locales like the United States, United Kingdom, Western
	// Europe, Australia, and New Zealand.
	// 
	// Most applications are advised to set this property to UTF-8 . Chilkat plans to
	// change its default to UTF-8 in a future major version to align with current
	// standards. The current default of ANSI stems from a time when UTF-8 was not
	// widely adopted.
	// 
	void put_Charset(const wchar_t *newVal);

	// Sets the cipher mode for block encryption algorithms (AES, Blowfish,TwoFish,
	// DES, 3DES, RC2). Possible values are CBC (the default) , ECB , CTR , OFB , GCM ,
	// and CFB . These acronyms have the following meanings:
	// 
	//     * CBC : Cipher Block Chaining,
	//     * ECB : Electronic CookBook
	//     * CTR : Counter Mode
	//     * CFB : Cipher Feedback
	//     * OFB : Output Feedback
	//     * GCM : Galois/Counter Mode
	//     * XTS : AES-XTS (starting in Chilkat v9.5.0.91, only works with AES
	//     encryption)
	// 
	// The GCM (Galois/Counter Mode) is available with any cipher having a 16-byte
	// block size, such as AES. The CFB, OFB, CTR, and GCM modes convert block ciphers
	// into stream ciphers. In these modes of operation, the PaddingScheme property is
	// unused because no padding occurs.
	// 
	// Starting in v9.5.0.91 Chilkat supports AES-XTS mode. XTS mode additionally uses
	// a tweak key and tweak value, which are set via the XtsSetEncodedTweakKey ,
	// XtsSetEncodedTweakValue , and XtsSetDataUnitNumber . (The latter two functions
	// provide alternative means of setting the tweak value.) Chilkat fully supports
	// AES-XTS mode with ciphertext-stealing , which means it will correctly
	// encrypt/decrypt data with size not divisible by the block size (i.e. divisible
	// by 16 bytes).
	// 
	// 
	// References:
	// 1: #PaddingScheme
	// 2: #XtsSetEncodedTweakKey
	// 3: #XtsSetEncodedTweakValue
	// 4: #XtsSetDataUnitNumber
	void get_CipherMode(CkString &str);
	// Sets the cipher mode for block encryption algorithms (AES, Blowfish,TwoFish,
	// DES, 3DES, RC2). Possible values are CBC (the default) , ECB , CTR , OFB , GCM ,
	// and CFB . These acronyms have the following meanings:
	// 
	//     * CBC : Cipher Block Chaining,
	//     * ECB : Electronic CookBook
	//     * CTR : Counter Mode
	//     * CFB : Cipher Feedback
	//     * OFB : Output Feedback
	//     * GCM : Galois/Counter Mode
	//     * XTS : AES-XTS (starting in Chilkat v9.5.0.91, only works with AES
	//     encryption)
	// 
	// The GCM (Galois/Counter Mode) is available with any cipher having a 16-byte
	// block size, such as AES. The CFB, OFB, CTR, and GCM modes convert block ciphers
	// into stream ciphers. In these modes of operation, the PaddingScheme property is
	// unused because no padding occurs.
	// 
	// Starting in v9.5.0.91 Chilkat supports AES-XTS mode. XTS mode additionally uses
	// a tweak key and tweak value, which are set via the XtsSetEncodedTweakKey ,
	// XtsSetEncodedTweakValue , and XtsSetDataUnitNumber . (The latter two functions
	// provide alternative means of setting the tweak value.) Chilkat fully supports
	// AES-XTS mode with ciphertext-stealing , which means it will correctly
	// encrypt/decrypt data with size not divisible by the block size (i.e. divisible
	// by 16 bytes).
	// 
	// 
	// References:
	// 1: #PaddingScheme
	// 2: #XtsSetEncodedTweakKey
	// 3: #XtsSetEncodedTweakValue
	// 4: #XtsSetDataUnitNumber
	const wchar_t *cipherMode(void);
	// Sets the cipher mode for block encryption algorithms (AES, Blowfish,TwoFish,
	// DES, 3DES, RC2). Possible values are CBC (the default) , ECB , CTR , OFB , GCM ,
	// and CFB . These acronyms have the following meanings:
	// 
	//     * CBC : Cipher Block Chaining,
	//     * ECB : Electronic CookBook
	//     * CTR : Counter Mode
	//     * CFB : Cipher Feedback
	//     * OFB : Output Feedback
	//     * GCM : Galois/Counter Mode
	//     * XTS : AES-XTS (starting in Chilkat v9.5.0.91, only works with AES
	//     encryption)
	// 
	// The GCM (Galois/Counter Mode) is available with any cipher having a 16-byte
	// block size, such as AES. The CFB, OFB, CTR, and GCM modes convert block ciphers
	// into stream ciphers. In these modes of operation, the PaddingScheme property is
	// unused because no padding occurs.
	// 
	// Starting in v9.5.0.91 Chilkat supports AES-XTS mode. XTS mode additionally uses
	// a tweak key and tweak value, which are set via the XtsSetEncodedTweakKey ,
	// XtsSetEncodedTweakValue , and XtsSetDataUnitNumber . (The latter two functions
	// provide alternative means of setting the tweak value.) Chilkat fully supports
	// AES-XTS mode with ciphertext-stealing , which means it will correctly
	// encrypt/decrypt data with size not divisible by the block size (i.e. divisible
	// by 16 bytes).
	// 
	// 
	// References:
	// 1: #PaddingScheme
	// 2: #XtsSetEncodedTweakKey
	// 3: #XtsSetEncodedTweakValue
	// 4: #XtsSetDataUnitNumber
	void put_CipherMode(const wchar_t *newVal);

	// A JSON string to manage additional CMS (PKCS7) signature and validation options.
	// Possible options are:
	//     * boolean OmitAlgorithmIdNull : Set this JSON member to true to omit the
	//     explicit NULL within an AlgorithmIdentifier ASN.1 within the PKCS7. This should
	//     almost never be used, but helps for rare cases where a validator dislikes the
	//     explicit NULL being present.
	//     * boolean ValidateTimestampTokens : Tells Chilkat to also validate the
	//     timestamp tokens when validating a signature that includes a timestamp.
	//     * boolean ConstructedOctets : When set to true , tells Chilkat to use the
	//     ASN.1 constructed octets format for the data contained in the CMS (PKCS7)
	//     signed-data.
	//     * boolean CanonicalizeITIDA : This applies to Egypt ITIDA , which requires
	//     signed documents in a CAdES-BES CMS format, using ITIDA’s JSON canonicalization
	//     (for JSON payloads), with only the Base64‑encoded signature attached—not the
	//     original data itself. When set to true , Chilkat will automatically do the
	//     special ITIDA JSON canonicalization .
	void get_CmsOptions(CkString &str);
	// A JSON string to manage additional CMS (PKCS7) signature and validation options.
	// Possible options are:
	//     * boolean OmitAlgorithmIdNull : Set this JSON member to true to omit the
	//     explicit NULL within an AlgorithmIdentifier ASN.1 within the PKCS7. This should
	//     almost never be used, but helps for rare cases where a validator dislikes the
	//     explicit NULL being present.
	//     * boolean ValidateTimestampTokens : Tells Chilkat to also validate the
	//     timestamp tokens when validating a signature that includes a timestamp.
	//     * boolean ConstructedOctets : When set to true , tells Chilkat to use the
	//     ASN.1 constructed octets format for the data contained in the CMS (PKCS7)
	//     signed-data.
	//     * boolean CanonicalizeITIDA : This applies to Egypt ITIDA , which requires
	//     signed documents in a CAdES-BES CMS format, using ITIDA’s JSON canonicalization
	//     (for JSON payloads), with only the Base64‑encoded signature attached—not the
	//     original data itself. When set to true , Chilkat will automatically do the
	//     special ITIDA JSON canonicalization .
	const wchar_t *cmsOptions(void);
	// A JSON string to manage additional CMS (PKCS7) signature and validation options.
	// Possible options are:
	//     * boolean OmitAlgorithmIdNull : Set this JSON member to true to omit the
	//     explicit NULL within an AlgorithmIdentifier ASN.1 within the PKCS7. This should
	//     almost never be used, but helps for rare cases where a validator dislikes the
	//     explicit NULL being present.
	//     * boolean ValidateTimestampTokens : Tells Chilkat to also validate the
	//     timestamp tokens when validating a signature that includes a timestamp.
	//     * boolean ConstructedOctets : When set to true , tells Chilkat to use the
	//     ASN.1 constructed octets format for the data contained in the CMS (PKCS7)
	//     signed-data.
	//     * boolean CanonicalizeITIDA : This applies to Egypt ITIDA , which requires
	//     signed documents in a CAdES-BES CMS format, using ITIDA’s JSON canonicalization
	//     (for JSON payloads), with only the Base64‑encoded signature attached—not the
	//     original data itself. When set to true , Chilkat will automatically do the
	//     special ITIDA JSON canonicalization .
	void put_CmsOptions(const wchar_t *newVal);

	// Selects the encryption algorithm for encrypting and decrypting. Possible values
	// are: Algorithm
	// Type
	// Symmetric?
	// Key Size(s)
	// Block/Stream
	// Mode of Operation
	// Notes
	// 
	// aes
	// Block cipher
	// ✔ Yes
	// 128, 192, 256 bits
	// Block (128-bit)
	// CBC, CTR, GCM, etc.
	// Widely used, FIPS-approved
	// 
	// pki (Public-Key Encryption)
	// Asymmetric
	// ✗ No
	// 1024–4096+ bits
	// N/A
	// N/A
	// Used for key exchange, not bulk data
	// 
	// chacha20
	// Stream cipher
	// ✔ Yes
	// 256 bits
	// Stream
	// N/A
	// High speed, secure, designed for simplicity
	// 
	// des
	// Block cipher
	// ✔ Yes
	// 56 bits
	// Block (64-bit)
	// ECB, CBC, etc.
	// Deprecated, insecure
	// 
	// 3des
	// Block cipher
	// ✔ Yes
	// 112 or 168 bits
	// Block (64-bit)
	// ECB, CBC, etc.
	// Legacy use, weak by modern standards
	// 
	// rc2
	// Block cipher
	// ✔ Yes
	// 40–128 bits (variable)
	// Block (64-bit)
	// ECB, CBC, etc.
	// Obsolete, variable strength
	// 
	// blowfish2 (Blowfish)
	// Block cipher
	// ✔ Yes
	// 32–448 bits (variable)
	// Block (64-bit)
	// ECB, CBC, etc.
	// Fast, but 64-bit block size is a limitation
	// 
	// twofish
	// Block cipher
	// ✔ Yes
	// Up to 256 bits
	// Block (128-bit)
	// ECB, CBC, etc.
	// AES finalist, secure and flexible
	// 
	// pbes1
	// Key derivation
	// ✔ Yes
	// Based on underlying cipher
	// Block (varies)
	// PKCS#5 v1.5
	// Obsolete, uses DES/RC2
	// 
	// pbes2
	// Key derivation
	// ✔ Yes
	// Based on underlying cipher
	// Block (varies)
	// PKCS#5 v2.0
	// Modern, supports AES, SHA, etc.
	// 
	// arc4 (RC4)
	// Stream cipher
	// ✔ Yes
	// 40–2048 bits (variable)
	// Stream
	// N/A
	// Deprecated, insecure due to biases
	// 
	void get_CryptAlgorithm(CkString &str);
	// Selects the encryption algorithm for encrypting and decrypting. Possible values
	// are: Algorithm
	// Type
	// Symmetric?
	// Key Size(s)
	// Block/Stream
	// Mode of Operation
	// Notes
	// 
	// aes
	// Block cipher
	// ✔ Yes
	// 128, 192, 256 bits
	// Block (128-bit)
	// CBC, CTR, GCM, etc.
	// Widely used, FIPS-approved
	// 
	// pki (Public-Key Encryption)
	// Asymmetric
	// ✗ No
	// 1024–4096+ bits
	// N/A
	// N/A
	// Used for key exchange, not bulk data
	// 
	// chacha20
	// Stream cipher
	// ✔ Yes
	// 256 bits
	// Stream
	// N/A
	// High speed, secure, designed for simplicity
	// 
	// des
	// Block cipher
	// ✔ Yes
	// 56 bits
	// Block (64-bit)
	// ECB, CBC, etc.
	// Deprecated, insecure
	// 
	// 3des
	// Block cipher
	// ✔ Yes
	// 112 or 168 bits
	// Block (64-bit)
	// ECB, CBC, etc.
	// Legacy use, weak by modern standards
	// 
	// rc2
	// Block cipher
	// ✔ Yes
	// 40–128 bits (variable)
	// Block (64-bit)
	// ECB, CBC, etc.
	// Obsolete, variable strength
	// 
	// blowfish2 (Blowfish)
	// Block cipher
	// ✔ Yes
	// 32–448 bits (variable)
	// Block (64-bit)
	// ECB, CBC, etc.
	// Fast, but 64-bit block size is a limitation
	// 
	// twofish
	// Block cipher
	// ✔ Yes
	// Up to 256 bits
	// Block (128-bit)
	// ECB, CBC, etc.
	// AES finalist, secure and flexible
	// 
	// pbes1
	// Key derivation
	// ✔ Yes
	// Based on underlying cipher
	// Block (varies)
	// PKCS#5 v1.5
	// Obsolete, uses DES/RC2
	// 
	// pbes2
	// Key derivation
	// ✔ Yes
	// Based on underlying cipher
	// Block (varies)
	// PKCS#5 v2.0
	// Modern, supports AES, SHA, etc.
	// 
	// arc4 (RC4)
	// Stream cipher
	// ✔ Yes
	// 40–2048 bits (variable)
	// Stream
	// N/A
	// Deprecated, insecure due to biases
	// 
	const wchar_t *cryptAlgorithm(void);
	// Selects the encryption algorithm for encrypting and decrypting. Possible values
	// are: Algorithm
	// Type
	// Symmetric?
	// Key Size(s)
	// Block/Stream
	// Mode of Operation
	// Notes
	// 
	// aes
	// Block cipher
	// ✔ Yes
	// 128, 192, 256 bits
	// Block (128-bit)
	// CBC, CTR, GCM, etc.
	// Widely used, FIPS-approved
	// 
	// pki (Public-Key Encryption)
	// Asymmetric
	// ✗ No
	// 1024–4096+ bits
	// N/A
	// N/A
	// Used for key exchange, not bulk data
	// 
	// chacha20
	// Stream cipher
	// ✔ Yes
	// 256 bits
	// Stream
	// N/A
	// High speed, secure, designed for simplicity
	// 
	// des
	// Block cipher
	// ✔ Yes
	// 56 bits
	// Block (64-bit)
	// ECB, CBC, etc.
	// Deprecated, insecure
	// 
	// 3des
	// Block cipher
	// ✔ Yes
	// 112 or 168 bits
	// Block (64-bit)
	// ECB, CBC, etc.
	// Legacy use, weak by modern standards
	// 
	// rc2
	// Block cipher
	// ✔ Yes
	// 40–128 bits (variable)
	// Block (64-bit)
	// ECB, CBC, etc.
	// Obsolete, variable strength
	// 
	// blowfish2 (Blowfish)
	// Block cipher
	// ✔ Yes
	// 32–448 bits (variable)
	// Block (64-bit)
	// ECB, CBC, etc.
	// Fast, but 64-bit block size is a limitation
	// 
	// twofish
	// Block cipher
	// ✔ Yes
	// Up to 256 bits
	// Block (128-bit)
	// ECB, CBC, etc.
	// AES finalist, secure and flexible
	// 
	// pbes1
	// Key derivation
	// ✔ Yes
	// Based on underlying cipher
	// Block (varies)
	// PKCS#5 v1.5
	// Obsolete, uses DES/RC2
	// 
	// pbes2
	// Key derivation
	// ✔ Yes
	// Based on underlying cipher
	// Block (varies)
	// PKCS#5 v2.0
	// Modern, supports AES, SHA, etc.
	// 
	// arc4 (RC4)
	// Stream cipher
	// ✔ Yes
	// 40–2048 bits (variable)
	// Stream
	// N/A
	// Deprecated, insecure due to biases
	// 
	void put_CryptAlgorithm(const wchar_t *newVal);

	// The EncodingMode property specifies the binary encoding format (e.g., base64 ,
	// hex , base58 , base64url ) used by functions ending in "ENC" , like
	// EncryptStringENC and DecryptStringENC . For encryption functions, EncodingMode
	// determines the encoding of the output. For decryption functions, it specifies
	// the encoding of the input data.
	// 
	// A list of supported binary encodings is available at the link below.
	// 
	// The default value is base64
	// 
	// 
	// References:
	// 1: #EncryptStringENC
	// 2: #DecryptStringENC
	void get_EncodingMode(CkString &str);
	// The EncodingMode property specifies the binary encoding format (e.g., base64 ,
	// hex , base58 , base64url ) used by functions ending in "ENC" , like
	// EncryptStringENC and DecryptStringENC . For encryption functions, EncodingMode
	// determines the encoding of the output. For decryption functions, it specifies
	// the encoding of the input data.
	// 
	// A list of supported binary encodings is available at the link below.
	// 
	// The default value is base64
	// 
	// 
	// References:
	// 1: #EncryptStringENC
	// 2: #DecryptStringENC
	const wchar_t *encodingMode(void);
	// The EncodingMode property specifies the binary encoding format (e.g., base64 ,
	// hex , base58 , base64url ) used by functions ending in "ENC" , like
	// EncryptStringENC and DecryptStringENC . For encryption functions, EncodingMode
	// determines the encoding of the output. For decryption functions, it specifies
	// the encoding of the input data.
	// 
	// A list of supported binary encodings is available at the link below.
	// 
	// The default value is base64
	// 
	// 
	// References:
	// 1: #EncryptStringENC
	// 2: #DecryptStringENC
	void put_EncodingMode(const wchar_t *newVal);

	// Using the FirstChunk and LastChunk properties is the way to do streaming
	// encryption or decryption with Chilkat.
	// 
	// By default, both FirstChunk and LastChunk are set to true, indicating that the
	// data passed to the encryption or decryption method is the full amount. To
	// process data in multiple chunks, adjust these settings as follows:
	// 
	// 1. For the first chunk, set FirstChunk = true and LastChunk = false.
	// 2. For intermediate chunks, set both FirstChunk = false and LastChunk =
	// false.
	// 3. For the final chunk, set FirstChunk = false and LastChunk = true.
	// 
	// You can feed data chunks of any size, regardless of the encryption algorithm's
	// block size (e.g., 16 bytes for AES). Chilkat will handle buffering and, upon
	// receiving the final chunk, pad the output to the appropriate block size
	// according to the selected PaddingScheme .
	// 
	// 
	// References:
	// 1: #LastChunk
	// 2: #PaddingScheme
	bool get_FirstChunk(void);
	// Using the FirstChunk and LastChunk properties is the way to do streaming
	// encryption or decryption with Chilkat.
	// 
	// By default, both FirstChunk and LastChunk are set to true, indicating that the
	// data passed to the encryption or decryption method is the full amount. To
	// process data in multiple chunks, adjust these settings as follows:
	// 
	// 1. For the first chunk, set FirstChunk = true and LastChunk = false.
	// 2. For intermediate chunks, set both FirstChunk = false and LastChunk =
	// false.
	// 3. For the final chunk, set FirstChunk = false and LastChunk = true.
	// 
	// You can feed data chunks of any size, regardless of the encryption algorithm's
	// block size (e.g., 16 bytes for AES). Chilkat will handle buffering and, upon
	// receiving the final chunk, pad the output to the appropriate block size
	// according to the selected PaddingScheme .
	// 
	// 
	// References:
	// 1: #LastChunk
	// 2: #PaddingScheme
	void put_FirstChunk(bool newVal);

	// Selects the hash algorithm used by methods that create hashes. The valid choices
	// are sha256 , sha384 , sha512 , sha3-224 , sha3-256 , sha3-384 , sha3-512 , sha1
	// , md2 , md5 , haval , ripemd128 , ripemd160 , ripemd256 , or ripemd320 .
	// 
	// (Chilkat supports SHA-2 because it includes the SHA-256, SHA-384, and SHA-512
	// hash functions.)
	// 
	// The default value is sha256 .
	// 
	// Note: The HAVAL hash algorithm is affected by two other properties: HavalRounds
	// and KeyLength .
	// 
	//     * The HavalRounds may have values of 3, 4, or 5.
	//     * For HAVAL hashing, the KeyLength can be 128, 160, 192, 224, or 256.
	// 
	// References:
	// 1: #HavalRounds
	// 2: #KeyLength
	void get_HashAlgorithm(CkString &str);
	// Selects the hash algorithm used by methods that create hashes. The valid choices
	// are sha256 , sha384 , sha512 , sha3-224 , sha3-256 , sha3-384 , sha3-512 , sha1
	// , md2 , md5 , haval , ripemd128 , ripemd160 , ripemd256 , or ripemd320 .
	// 
	// (Chilkat supports SHA-2 because it includes the SHA-256, SHA-384, and SHA-512
	// hash functions.)
	// 
	// The default value is sha256 .
	// 
	// Note: The HAVAL hash algorithm is affected by two other properties: HavalRounds
	// and KeyLength .
	// 
	//     * The HavalRounds may have values of 3, 4, or 5.
	//     * For HAVAL hashing, the KeyLength can be 128, 160, 192, 224, or 256.
	// 
	// References:
	// 1: #HavalRounds
	// 2: #KeyLength
	const wchar_t *hashAlgorithm(void);
	// Selects the hash algorithm used by methods that create hashes. The valid choices
	// are sha256 , sha384 , sha512 , sha3-224 , sha3-256 , sha3-384 , sha3-512 , sha1
	// , md2 , md5 , haval , ripemd128 , ripemd160 , ripemd256 , or ripemd320 .
	// 
	// (Chilkat supports SHA-2 because it includes the SHA-256, SHA-384, and SHA-512
	// hash functions.)
	// 
	// The default value is sha256 .
	// 
	// Note: The HAVAL hash algorithm is affected by two other properties: HavalRounds
	// and KeyLength .
	// 
	//     * The HavalRounds may have values of 3, 4, or 5.
	//     * For HAVAL hashing, the KeyLength can be 128, 160, 192, 224, or 256.
	// 
	// References:
	// 1: #HavalRounds
	// 2: #KeyLength
	void put_HashAlgorithm(const wchar_t *newVal);

	// Applies to the HAVAL hash algorithm only and must be set to the integer value 3,
	// 4, or 5. The default value is 3.
	int get_HavalRounds(void);
	// Applies to the HAVAL hash algorithm only and must be set to the integer value 3,
	// 4, or 5. The default value is 3.
	void put_HavalRounds(int newVal);

	// The interval in milliseconds between each AbortCheck event callback, which
	// enables an application to abort certain method calls before they complete. By
	// default, HeartbeatMs is set to 0 , meaning no AbortCheck event callbacks will
	// trigger. Methods with event callbacks include: CkDecryptFile , CkEncryptFile ,
	// HashFile , and HashFileENC .
	// 
	// References:
	// 1: #AbortCheck
	// 2: #CkDecryptFile
	// 3: #CkEncryptFile
	// 4: #HashFile
	// 5: #HashFileENC
	int get_HeartbeatMs(void);
	// The interval in milliseconds between each AbortCheck event callback, which
	// enables an application to abort certain method calls before they complete. By
	// default, HeartbeatMs is set to 0 , meaning no AbortCheck event callbacks will
	// trigger. Methods with event callbacks include: CkDecryptFile , CkEncryptFile ,
	// HashFile , and HashFileENC .
	// 
	// References:
	// 1: #AbortCheck
	// 2: #CkDecryptFile
	// 3: #CkEncryptFile
	// 4: #HashFile
	// 5: #HashFileENC
	void put_HeartbeatMs(int newVal);

	// This applies only to creating digital signatures. By default (true), any
	// additional certificates in the authentication chain are included in the PKCS7
	// digital signature.
	bool get_IncludeCertChain(void);
	// This applies only to creating digital signatures. By default (true), any
	// additional certificates in the authentication chain are included in the PKCS7
	// digital signature.
	void put_IncludeCertChain(bool newVal);

	// The initial counter for the ChaCha20 encryption algorithm, which has a default
	// value of 0, is pre-agreed by both the encryptor and decryptor.
	int get_InitialCount(void);
	// The initial counter for the ChaCha20 encryption algorithm, which has a default
	// value of 0, is pre-agreed by both the encryptor and decryptor.
	void put_InitialCount(int newVal);

	// The iteration count in password-based encryption (PBE) establishes the
	// computational difficulty for encryption and decryption, thereby enhancing
	// resistance to exhaustive search attacks. The default iteration count is 1024 ,
	// which is considered low, so it is recommended that applications increase this
	// number when using pbes2 encryption.
	// 
	// PBES2 Iteration Count Recommendations
	// 
	// Aim for a 100–200 ms derive time on your target hardware.
	// 
	//     * Server/Desktop: 100000 – 1000000+
	//     * Mobile/Embedded: 50000 - 100000
	// 
	// Benchmark annually and increase iterations as hardware improves.
	// 
	int get_IterationCount(void);
	// The iteration count in password-based encryption (PBE) establishes the
	// computational difficulty for encryption and decryption, thereby enhancing
	// resistance to exhaustive search attacks. The default iteration count is 1024 ,
	// which is considered low, so it is recommended that applications increase this
	// number when using pbes2 encryption.
	// 
	// PBES2 Iteration Count Recommendations
	// 
	// Aim for a 100–200 ms derive time on your target hardware.
	// 
	//     * Server/Desktop: 100000 – 1000000+
	//     * Mobile/Embedded: 50000 - 100000
	// 
	// Benchmark annually and increase iterations as hardware improves.
	// 
	void put_IterationCount(int newVal);

	// The key length in bits for symmetric encryption algorithms. The default value is
	// 256 .
	int get_KeyLength(void);
	// The key length in bits for symmetric encryption algorithms. The default value is
	// 256 .
	void put_KeyLength(int newVal);

	// See the documentation for the FirstChunk property.
	// 
	// References:
	// 1: #FirstChunk
	bool get_LastChunk(void);
	// See the documentation for the FirstChunk property.
	// 
	// References:
	// 1: #FirstChunk
	void put_LastChunk(bool newVal);

	// Selects the MAC algorithm to be used for any of the Mac methods, such as
	// MacStringENC, MacBytes, etc. The default value is hmac . Possible values are
	// hmac and poly1305 .
	void get_MacAlgorithm(CkString &str);
	// Selects the MAC algorithm to be used for any of the Mac methods, such as
	// MacStringENC, MacBytes, etc. The default value is hmac . Possible values are
	// hmac and poly1305 .
	const wchar_t *macAlgorithm(void);
	// Selects the MAC algorithm to be used for any of the Mac methods, such as
	// MacStringENC, MacBytes, etc. The default value is hmac . Possible values are
	// hmac and poly1305 .
	void put_MacAlgorithm(const wchar_t *newVal);

	// This property is set upon verifying a digital signature and indicates the number
	// of signer certificates. You can retrieve each signing certificate using the
	// LastSignerCert method with an index ranging from 0 to NumSignerCerts -1.
	// 
	// References:
	// 1: #LastSignerCert
	int get_NumSignerCerts(void);

	// Selects the hash algorithm for use within OAEP padding when encrypting using pki
	// with RSAES-OAEP. The valid choices are sha1 , sha256 , sha384 , sha512 ,
	// 
	// The default value is sha256
	// 
	void get_OaepHash(CkString &str);
	// Selects the hash algorithm for use within OAEP padding when encrypting using pki
	// with RSAES-OAEP. The valid choices are sha1 , sha256 , sha384 , sha512 ,
	// 
	// The default value is sha256
	// 
	const wchar_t *oaepHash(void);
	// Selects the hash algorithm for use within OAEP padding when encrypting using pki
	// with RSAES-OAEP. The valid choices are sha1 , sha256 , sha384 , sha512 ,
	// 
	// The default value is sha256
	// 
	void put_OaepHash(const wchar_t *newVal);

	// Selects the MGF hash algorithm for use within OAEP padding when encrypting using
	// pki with RSAES-OAEP. The valid choices are sha1 , sha256 , sha384 , sha512 , The
	// default is sha256 .
	void get_OaepMgfHash(CkString &str);
	// Selects the MGF hash algorithm for use within OAEP padding when encrypting using
	// pki with RSAES-OAEP. The valid choices are sha1 , sha256 , sha384 , sha512 , The
	// default is sha256 .
	const wchar_t *oaepMgfHash(void);
	// Selects the MGF hash algorithm for use within OAEP padding when encrypting using
	// pki with RSAES-OAEP. The valid choices are sha1 , sha256 , sha384 , sha512 , The
	// default is sha256 .
	void put_OaepMgfHash(const wchar_t *newVal);

	// Selects the RSA encryption scheme when encrypting using pki (with a certificate
	// and private key). The default value is false, which selects RSAES_PKCS1-V1_5.
	// If set to true, then RSAES_OAEP is used.
	bool get_OaepPadding(void);
	// Selects the RSA encryption scheme when encrypting using pki (with a certificate
	// and private key). The default value is false, which selects RSAES_PKCS1-V1_5.
	// If set to true, then RSAES_OAEP is used.
	void put_OaepPadding(bool newVal);

	// This property defines the padding scheme Chilkat uses for adding padding to
	// input data during encryption and removing it during decryption. It is applicable
	// only to symmetric block ciphers, such as AES, Blowfish, and Twofish, which
	// require input sizes matching their exact block size. Padding ensures the last
	// block is completely filled.
	// 
	// The possible values are:
	//     1. PKCS#5/PKCS#7 (RFC 1423) default
	//     Each pad byte = number of padding bytes.
	// 
	//     Block size: 8
	//     Data: "HELLO" (5 bytes)
	//     Padding: 0x03 0x03 0x03
	//     2. FIPS 81
	//     Last byte = count; others = random.
	// 
	//     Block size: 8
	//     Data: "HELLO"
	//     Padding: 0xA4 0x2F 0x9C 0x03
	//     3. Random
	//     All pad bytes random; decryptor must know original length.
	// 
	//     Block size: 8
	//     Data: "HELLO"
	//     Padding: 0x7D 0x20 0xCB 0x81
	//     4. Null (0x00)
	//     Pad with zeros; no padding if already exact.
	// 
	//     Block size: 8
	//     Data: "HEL" (3 bytes)
	//     Padding: 0x00 0x00 0x00 0x00 0x00
	//     5. Space (0x20)
	//     Pad with spaces; no padding if already exact.
	// 
	//     Block size: 8
	//     Data: "HEL" (3 bytes)
	//     Padding: 0x20 0x20 0x20 0x20 0x20
	// 
	int get_PaddingScheme(void);
	// This property defines the padding scheme Chilkat uses for adding padding to
	// input data during encryption and removing it during decryption. It is applicable
	// only to symmetric block ciphers, such as AES, Blowfish, and Twofish, which
	// require input sizes matching their exact block size. Padding ensures the last
	// block is completely filled.
	// 
	// The possible values are:
	//     1. PKCS#5/PKCS#7 (RFC 1423) default
	//     Each pad byte = number of padding bytes.
	// 
	//     Block size: 8
	//     Data: "HELLO" (5 bytes)
	//     Padding: 0x03 0x03 0x03
	//     2. FIPS 81
	//     Last byte = count; others = random.
	// 
	//     Block size: 8
	//     Data: "HELLO"
	//     Padding: 0xA4 0x2F 0x9C 0x03
	//     3. Random
	//     All pad bytes random; decryptor must know original length.
	// 
	//     Block size: 8
	//     Data: "HELLO"
	//     Padding: 0x7D 0x20 0xCB 0x81
	//     4. Null (0x00)
	//     Pad with zeros; no padding if already exact.
	// 
	//     Block size: 8
	//     Data: "HEL" (3 bytes)
	//     Padding: 0x00 0x00 0x00 0x00 0x00
	//     5. Space (0x20)
	//     Pad with spaces; no padding if already exact.
	// 
	//     Block size: 8
	//     Data: "HEL" (3 bytes)
	//     Padding: 0x20 0x20 0x20 0x20 0x20
	// 
	void put_PaddingScheme(int newVal);

	// If the CryptAlgorithm property is set to pbes1 or pbes2 , this property defines
	// the symmetric encryption algorithm to be used for password-based encryption
	// (PBE). The default is "des" . Applications should set this property equal to
	// "aes" .
	// 
	// References:
	// 1: #CryptAlgorithm
	void get_PbesAlgorithm(CkString &str);
	// If the CryptAlgorithm property is set to pbes1 or pbes2 , this property defines
	// the symmetric encryption algorithm to be used for password-based encryption
	// (PBE). The default is "des" . Applications should set this property equal to
	// "aes" .
	// 
	// References:
	// 1: #CryptAlgorithm
	const wchar_t *pbesAlgorithm(void);
	// If the CryptAlgorithm property is set to pbes1 or pbes2 , this property defines
	// the symmetric encryption algorithm to be used for password-based encryption
	// (PBE). The default is "des" . Applications should set this property equal to
	// "aes" .
	// 
	// References:
	// 1: #CryptAlgorithm
	void put_PbesAlgorithm(const wchar_t *newVal);

	// The password to be used when the CryptAlgorithm is "pbes1" or "pbes2" .
	// 
	// References:
	// 1: #CryptAlgorithm
	void get_PbesPassword(CkString &str);
	// The password to be used when the CryptAlgorithm is "pbes1" or "pbes2" .
	// 
	// References:
	// 1: #CryptAlgorithm
	const wchar_t *pbesPassword(void);
	// The password to be used when the CryptAlgorithm is "pbes1" or "pbes2" .
	// 
	// References:
	// 1: #CryptAlgorithm
	void put_PbesPassword(const wchar_t *newVal);

	// This property determines the underlying symmetric encryption algorithm when the
	// CryptAlgorithm property is set to pki for selecting PKCS7 public-key encryption.
	// 
	// The default is aes .
	// 
	// 
	// References:
	// 1: #CryptAlgorithm
	void get_Pkcs7CryptAlg(CkString &str);
	// This property determines the underlying symmetric encryption algorithm when the
	// CryptAlgorithm property is set to pki for selecting PKCS7 public-key encryption.
	// 
	// The default is aes .
	// 
	// 
	// References:
	// 1: #CryptAlgorithm
	const wchar_t *pkcs7CryptAlg(void);
	// This property determines the underlying symmetric encryption algorithm when the
	// CryptAlgorithm property is set to pki for selecting PKCS7 public-key encryption.
	// 
	// The default is aes .
	// 
	// 
	// References:
	// 1: #CryptAlgorithm
	void put_Pkcs7CryptAlg(const wchar_t *newVal);

	// The effective key length (in bits) for the RC2 encryption algorithm. When using
	// RC2, set both the KeyLength and Rc2EffectiveKeyLength properties to values
	// between 8 and 1024, inclusive. The default setting for both is 128.
	// 
	// The default value is 128
	// 
	// RC2 is an old symmetric encryption algorithm, now considered insecure due to its
	// small key size and vulnerability to cryptanalysis. Modern algorithms like AES
	// are recommended instead.
	// 
	// 
	// References:
	// 1: #KeyLength
	int get_Rc2EffectiveKeyLength(void);
	// The effective key length (in bits) for the RC2 encryption algorithm. When using
	// RC2, set both the KeyLength and Rc2EffectiveKeyLength properties to values
	// between 8 and 1024, inclusive. The default setting for both is 128.
	// 
	// The default value is 128
	// 
	// RC2 is an old symmetric encryption algorithm, now considered insecure due to its
	// small key size and vulnerability to cryptanalysis. Modern algorithms like AES
	// are recommended instead.
	// 
	// 
	// References:
	// 1: #KeyLength
	void put_Rc2EffectiveKeyLength(int newVal);

	// This property applies when creating RSA signatures.
	// 
	// It defines the RSA signature scheme . The default is PKCS1-v1_5 . You can change
	// it to RSASSA-PSS (or pss ) to use the RSASSA-PSS signature scheme.
	// 
	//     1. PKCS#1 v1.5
	//     Older, deterministic scheme.
	//     - Simple padding.
	//     - Vulnerable to certain attacks if not used carefully.
	//     - Still widely used for compatibility.
	//     2. RSASSA-PSS
	//     Newer, probabilistic scheme (recommended by modern standards).
	//     - Adds random salt for each signature.
	//     - More secure against chosen-plaintext and padding oracle attacks.
	//     - Recommended by modern standards like PKCS#1 v2.1 and FIPS.
	// 
	void get_SigningAlg(CkString &str);
	// This property applies when creating RSA signatures.
	// 
	// It defines the RSA signature scheme . The default is PKCS1-v1_5 . You can change
	// it to RSASSA-PSS (or pss ) to use the RSASSA-PSS signature scheme.
	// 
	//     1. PKCS#1 v1.5
	//     Older, deterministic scheme.
	//     - Simple padding.
	//     - Vulnerable to certain attacks if not used carefully.
	//     - Still widely used for compatibility.
	//     2. RSASSA-PSS
	//     Newer, probabilistic scheme (recommended by modern standards).
	//     - Adds random salt for each signature.
	//     - More secure against chosen-plaintext and padding oracle attacks.
	//     - Recommended by modern standards like PKCS#1 v2.1 and FIPS.
	// 
	const wchar_t *signingAlg(void);
	// This property applies when creating RSA signatures.
	// 
	// It defines the RSA signature scheme . The default is PKCS1-v1_5 . You can change
	// it to RSASSA-PSS (or pss ) to use the RSASSA-PSS signature scheme.
	// 
	//     1. PKCS#1 v1.5
	//     Older, deterministic scheme.
	//     - Simple padding.
	//     - Vulnerable to certain attacks if not used carefully.
	//     - Still widely used for compatibility.
	//     2. RSASSA-PSS
	//     Newer, probabilistic scheme (recommended by modern standards).
	//     - Adds random salt for each signature.
	//     - More secure against chosen-plaintext and padding oracle attacks.
	//     - Recommended by modern standards like PKCS#1 v2.1 and FIPS.
	// 
	void put_SigningAlg(const wchar_t *newVal);

	// Contains JSON to specify the authenticated (signed) attributes or
	// unauthenticated (unsigned) attributes that are to be included in CMS signatures.
	// The default value is:{
	//     "contentType": true,
	//     "signingTime": true,
	//     "messageDigest": true
	// }
	void get_SigningAttributes(CkString &str);
	// Contains JSON to specify the authenticated (signed) attributes or
	// unauthenticated (unsigned) attributes that are to be included in CMS signatures.
	// The default value is:{
	//     "contentType": true,
	//     "signingTime": true,
	//     "messageDigest": true
	// }
	const wchar_t *signingAttributes(void);
	// Contains JSON to specify the authenticated (signed) attributes or
	// unauthenticated (unsigned) attributes that are to be included in CMS signatures.
	// The default value is:{
	//     "contentType": true,
	//     "signingTime": true,
	//     "messageDigest": true
	// }
	void put_SigningAttributes(const wchar_t *newVal);

	// This is a catch-all property to be used for uncommon needs. This property
	// defaults to the empty string and should typically remain empty.
	// 
	// Can be set to a list of the following comma separated keywords:
	//     * UseConstructedOctets - Introduced in v9.5.0.83. When creating opaque CMS
	//     signatures (signatures that embed the data being signed), will use the
	//     constructed octets form of the ASN.1 that holds the data. This is to satify
	//     some validators that are brittle/fragile/picky and require a particular format,
	//     such as for the ICP-Brazil Digital Signature Standard.
	// 
	void get_UncommonOptions(CkString &str);
	// This is a catch-all property to be used for uncommon needs. This property
	// defaults to the empty string and should typically remain empty.
	// 
	// Can be set to a list of the following comma separated keywords:
	//     * UseConstructedOctets - Introduced in v9.5.0.83. When creating opaque CMS
	//     signatures (signatures that embed the data being signed), will use the
	//     constructed octets form of the ASN.1 that holds the data. This is to satify
	//     some validators that are brittle/fragile/picky and require a particular format,
	//     such as for the ICP-Brazil Digital Signature Standard.
	// 
	const wchar_t *uncommonOptions(void);
	// This is a catch-all property to be used for uncommon needs. This property
	// defaults to the empty string and should typically remain empty.
	// 
	// Can be set to a list of the following comma separated keywords:
	//     * UseConstructedOctets - Introduced in v9.5.0.83. When creating opaque CMS
	//     signatures (signatures that embed the data being signed), will use the
	//     constructed octets form of the ASN.1 that holds the data. This is to satify
	//     some validators that are brittle/fragile/picky and require a particular format,
	//     such as for the ICP-Brazil Digital Signature Standard.
	// 
	void put_UncommonOptions(const wchar_t *newVal);

	// When UU encoding, this is the filename to be embedded in UU encoded output. The
	// default is file.dat . When UU decoding, this is the filename found in the UU
	// encoded input.
	void get_UuFilename(CkString &str);
	// When UU encoding, this is the filename to be embedded in UU encoded output. The
	// default is file.dat . When UU decoding, this is the filename found in the UU
	// encoded input.
	const wchar_t *uuFilename(void);
	// When UU encoding, this is the filename to be embedded in UU encoded output. The
	// default is file.dat . When UU decoding, this is the filename found in the UU
	// encoded input.
	void put_UuFilename(const wchar_t *newVal);

	// When UU encoding, this is the file permissions mode to be embedded in UU encoded
	// output. The default is 644 . When UU decoding, this property is set to the mode
	// found in the UU encoded input.
	void get_UuMode(CkString &str);
	// When UU encoding, this is the file permissions mode to be embedded in UU encoded
	// output. The default is 644 . When UU decoding, this property is set to the mode
	// found in the UU encoded input.
	const wchar_t *uuMode(void);
	// When UU encoding, this is the file permissions mode to be embedded in UU encoded
	// output. The default is 644 . When UU decoding, this property is set to the mode
	// found in the UU encoded input.
	void put_UuMode(const wchar_t *newVal);



	// ----------------------
	// Methods
	// ----------------------
	// Adds a certificate for public-key encryption. To enable public-key encryption
	// with digital certificates, set the CryptAlgorithm property to pki . Call
	// AddEncryptCert separately for each certificate you wish to use for encryption.
	// 
	// Any of the Encrypt* methods will do RSA public-key encryption when the
	// CryptAlgorithm is set to the keyword pki . The output is a PKCS#7 enveloped-data
	// secure container.
	// 
	// 
	// References:
	// 1: #CryptAlgorithm
	// 2: #AddEncryptCert
	void AddEncryptCert(CkCertW &cert);

	// Adds a PFX file to the object's list of sources for locating certificates and
	// private keys during public-key decryption or signing. To add multiple PFX
	// sources, call this method multiple times. bd should contain the bytes of a PFX
	// file (also known as PKCS12 or .p12 ).
	// 
	// Note: Information about the certificate(s) needed for public-key decryption are
	// included in the PKCS#7 enveloped-data . Chilkat will automatically find a usable
	// certificate and private key from sources like Windows certificate stores, the
	// Apple keychain, or other sources provided by the application.
	// 
	bool AddPfxSourceBd(CkBinDataW &bd, const wchar_t *password);

	// Adds a PFX file to the object's list of sources for locating certificates and
	// private keys during public-key decryption or signing. To add multiple PFX
	// sources, call this method multiple times. pfxBytes should contain the bytes of a PFX
	// file (also known as PKCS12 or .p12 ).
	bool AddPfxSourceData(CkByteData &pfxBytes, const wchar_t *pfxPassword);

	// Adds a PFX file to the object's list of sources for locating certificates and
	// private keys during public-key decryption or signing. To add multiple PFX
	// sources, call this method multiple times.
	// 
	// Note: Information about the certificate(s) needed for public-key decryption are
	// included in the PKCS#7 enveloped-data . Chilkat will automatically find a usable
	// certificate and private key from sources like Windows certificate stores, the
	// Apple keychain, or other sources provided by the application.
	// 
	bool AddPfxSourceFile(const wchar_t *pfxFilePath, const wchar_t *pfxPassword);

	// Call this method once per certificate to add multiple certificates for signing .
	// If signing with a single certificate, then the SetSigningCert or SetSigningCert2
	// methods can be used instead.
	bool AddSigningCert(CkCertW &cert);

	// Implements the AES Key Wrap Algorithm (RFC 3394) for unwrapping. The kek is the
	// Key Encryption Key (the AES key used to unwrap the wrappedKeyData). The arguments and
	// return value are binary encoded strings using the encoding specified by encoding
	// (which can be base64 , hex , base64url , etc.) The full list of supported
	// encodings is available at the link below.
	// 
	// The kek should be an AES key of 16 bytes , 24 bytes , or 32 bytes (i.e.
	// 128-bits, 192- bits, or 256-bits). For example, if passed as a hex string, then
	// the kek should be 32 chars in length, 48 chars, or 64 chars (because each byte
	// is represented as 2 chars in hex).
	// 
	// The wrappedKeyData contains the data to be unwrapped. The result, if decoded, is 8 bytes
	// less than the wrapped key data. For example, if a 256-bit AES key (32 bytes) is
	// wrapped, the size of the wrapped key data is 40 bytes. Unwrapping restores it to
	// the original 32 bytes.
	// 
	bool AesKeyUnwrap(const wchar_t *kek, const wchar_t *wrappedKeyData, const wchar_t *encoding, CkString &outStr);
	// Implements the AES Key Wrap Algorithm (RFC 3394) for unwrapping. The kek is the
	// Key Encryption Key (the AES key used to unwrap the wrappedKeyData). The arguments and
	// return value are binary encoded strings using the encoding specified by encoding
	// (which can be base64 , hex , base64url , etc.) The full list of supported
	// encodings is available at the link below.
	// 
	// The kek should be an AES key of 16 bytes , 24 bytes , or 32 bytes (i.e.
	// 128-bits, 192- bits, or 256-bits). For example, if passed as a hex string, then
	// the kek should be 32 chars in length, 48 chars, or 64 chars (because each byte
	// is represented as 2 chars in hex).
	// 
	// The wrappedKeyData contains the data to be unwrapped. The result, if decoded, is 8 bytes
	// less than the wrapped key data. For example, if a 256-bit AES key (32 bytes) is
	// wrapped, the size of the wrapped key data is 40 bytes. Unwrapping restores it to
	// the original 32 bytes.
	// 
	const wchar_t *aesKeyUnwrap(const wchar_t *kek, const wchar_t *wrappedKeyData, const wchar_t *encoding);

	// Implements the AES Key Wrap with Padding Algorithm (RFC 5649) for unwrapping.
	// The kek is the Key Encryption Key (the AES key used to unwrap the wrappedKeyData). The
	// arguments and return value are binary encoded strings using the encoding
	// specified by encoding (which can be base64 , hex , base64url , etc.)
	// 
	// The kek should be an AES key of 16 bytes , 24 bytes , or 32 bytes (i.e.
	// 128-bits, 192- bits, or 256-bits). For example, if passed as a hex string, then
	// the kek should be 32 chars in length, 48 chars, or 64 chars (because each byte
	// is represented as 2 chars in hex).
	// 
	// The wrappedKeyData contains the data to be unwrapped.
	// 
	// The unwrapped key is returned as an encoded string (using the encoding specified
	// in encoding).
	// 
	bool AesKeyUnwrapWithPadding(const wchar_t *kek, const wchar_t *wrappedKeyData, const wchar_t *encoding, CkString &outStr);
	// Implements the AES Key Wrap with Padding Algorithm (RFC 5649) for unwrapping.
	// The kek is the Key Encryption Key (the AES key used to unwrap the wrappedKeyData). The
	// arguments and return value are binary encoded strings using the encoding
	// specified by encoding (which can be base64 , hex , base64url , etc.)
	// 
	// The kek should be an AES key of 16 bytes , 24 bytes , or 32 bytes (i.e.
	// 128-bits, 192- bits, or 256-bits). For example, if passed as a hex string, then
	// the kek should be 32 chars in length, 48 chars, or 64 chars (because each byte
	// is represented as 2 chars in hex).
	// 
	// The wrappedKeyData contains the data to be unwrapped.
	// 
	// The unwrapped key is returned as an encoded string (using the encoding specified
	// in encoding).
	// 
	const wchar_t *aesKeyUnwrapWithPadding(const wchar_t *kek, const wchar_t *wrappedKeyData, const wchar_t *encoding);

	// Implements the AES Key Wrap Algorithm (RFC 3394). The kek is the Key Encryption
	// Key (the AES key used to encrypt the keyData). The arguments and return value are
	// binary encoded strings using the encoding specified by encoding (which can be base64
	// , hex , base64url , etc.) The full list of supported encodings is available at
	// the link below.
	// 
	// The kek should be an AES key of 16 bytes , 24 bytes , or 32 bytes (i.e.
	// 128-bits, 192- bits, or 256-bits). For example, if passed as a hex string, then
	// the kek should be 32 chars in length, 48 chars, or 64 chars (because each byte
	// is represented as 2 chars in hex).
	// 
	// The keyData contains the data to be key wrapped. It must be a multiple of 64-bits
	// in length. In other words, if the keyData is decoded to binary, it should be a
	// number of bytes that is a multiple of 8.
	// 
	// The return string, if decoded to binary bytes, is equal to the size of the key
	// data + 8 additional bytes.
	// 
	bool AesKeyWrap(const wchar_t *kek, const wchar_t *keyData, const wchar_t *encoding, CkString &outStr);
	// Implements the AES Key Wrap Algorithm (RFC 3394). The kek is the Key Encryption
	// Key (the AES key used to encrypt the keyData). The arguments and return value are
	// binary encoded strings using the encoding specified by encoding (which can be base64
	// , hex , base64url , etc.) The full list of supported encodings is available at
	// the link below.
	// 
	// The kek should be an AES key of 16 bytes , 24 bytes , or 32 bytes (i.e.
	// 128-bits, 192- bits, or 256-bits). For example, if passed as a hex string, then
	// the kek should be 32 chars in length, 48 chars, or 64 chars (because each byte
	// is represented as 2 chars in hex).
	// 
	// The keyData contains the data to be key wrapped. It must be a multiple of 64-bits
	// in length. In other words, if the keyData is decoded to binary, it should be a
	// number of bytes that is a multiple of 8.
	// 
	// The return string, if decoded to binary bytes, is equal to the size of the key
	// data + 8 additional bytes.
	// 
	const wchar_t *aesKeyWrap(const wchar_t *kek, const wchar_t *keyData, const wchar_t *encoding);

	// Implements the AES Key Wrap with Padding Algorithm (RFC 5649). The kek is the
	// Key Encryption Key (the AES key used to encrypt the keyData). The arguments and
	// return value are binary encoded strings using the encoding specified by encoding
	// (which can be base64 , hex , base64url , etc.)
	// 
	// The kek should be an AES key of 16 bytes , 24 bytes , or 32 bytes (i.e.
	// 128-bits, 192- bits, or 256-bits). For example, if passed as a hex string, then
	// the kek should be 32 chars in length, 48 chars, or 64 chars (because each byte
	// is represented as 2 chars in hex).
	// 
	// The keyData contains the data to be key wrapped.
	// 
	// Returns the wrapped key using the encoding specified in encoding.
	// 
	bool AesKeyWrapWithPadding(const wchar_t *kek, const wchar_t *keyData, const wchar_t *encoding, CkString &outStr);
	// Implements the AES Key Wrap with Padding Algorithm (RFC 5649). The kek is the
	// Key Encryption Key (the AES key used to encrypt the keyData). The arguments and
	// return value are binary encoded strings using the encoding specified by encoding
	// (which can be base64 , hex , base64url , etc.)
	// 
	// The kek should be an AES key of 16 bytes , 24 bytes , or 32 bytes (i.e.
	// 128-bits, 192- bits, or 256-bits). For example, if passed as a hex string, then
	// the kek should be 32 chars in length, 48 chars, or 64 chars (because each byte
	// is represented as 2 chars in hex).
	// 
	// The keyData contains the data to be key wrapped.
	// 
	// Returns the wrapped key using the encoding specified in encoding.
	// 
	const wchar_t *aesKeyWrapWithPadding(const wchar_t *kek, const wchar_t *keyData, const wchar_t *encoding);

	// Computes and returns a bcrypt hash of the password. The number of rounds of hashing
	// is determined by the BCryptWorkFactor property.
	// 
	// Starting in v9.5.0.76, if the password is prefixed with $2b$ then the output will
	// use the $2b version of bcrypt. For example, to create a $2b$ bcrypt has for the
	// password secret , pass in the string $2b$secret for password.
	// 
	bool BCryptHash(const wchar_t *password, CkString &outStr);
	// Computes and returns a bcrypt hash of the password. The number of rounds of hashing
	// is determined by the BCryptWorkFactor property.
	// 
	// Starting in v9.5.0.76, if the password is prefixed with $2b$ then the output will
	// use the $2b version of bcrypt. For example, to create a $2b$ bcrypt has for the
	// password secret , pass in the string $2b$secret for password.
	// 
	const wchar_t *bCryptHash(const wchar_t *password);

	// Verifies the password against a previously computed BCrypt hash. Returns true if
	// the password matches the bcryptHash. Returns false if the password does not match.
	bool BCryptVerify(const wchar_t *password, const wchar_t *bcryptHash);

	// File-to-file decryption that supports files of any size by using internal
	// streaming mode.
	bool CkDecryptFile(const wchar_t *srcFile, const wchar_t *destFile);

	// Creates an asynchronous task to call the CkDecryptFile method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *CkDecryptFileAsync(const wchar_t *srcFile, const wchar_t *destFile);

	// File-to-file encryption that operates in streaming mode, allowing it to encrypt
	// files of any size.
	bool CkEncryptFile(const wchar_t *srcFile, const wchar_t *destFile);

	// Creates an asynchronous task to call the CkEncryptFile method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *CkEncryptFileAsync(const wchar_t *srcFile, const wchar_t *destFile);

	// Clears the internal list of digital certificates to be used for public-key
	// encryption.
	void ClearEncryptCerts(void);

	// Clears the set of certificates to be used in signing.
	void ClearSigningCerts(void);

	// Co-sign's an existing CMS signature. bdIn contains the existing CMS signature.
	// If successful, cert is the output co-signed CMS signature.
	bool CoSign(CkBinDataW &bdIn, CkCertW &cert, CkBinDataW &bdOut);

	// Computes a CRC for data contained in crcAlg, which can be either crc-32 used in
	// the Zip file format, or crc8 for the CRC8 algorithm.
	unsigned long CrcBd(const wchar_t *crcAlg, CkBinDataW &bd);

	// Calculates a CRC for byte data in memory using the CRC algorithm specified by
	// crcAlg. Possible algorithms are:
	//     * crc-32 - This is the CRC used in the Zip file format.
	//     * crc8
	unsigned long CrcBytes(const wchar_t *crcAlg, CkByteData &byteData);

	// Calculates the CRC for a file's contents using the CRC algorithm specified by
	// crcAlg. Possible algorithms are:
	//     * crc-32 - This is the CRC used in the Zip file format.
	//     * crc8
	unsigned long CrcFile(const wchar_t *crcAlg, const wchar_t *path);

	// Creates an asynchronous task to call the CrcFile method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *CrcFileAsync(const wchar_t *crcAlg, const wchar_t *path);

	// Signs the contents of inFilePath and writes the detached PKCS7 signature ( .p7s ) to
	// sigFilePath.
	bool CreateDetachedSignature(const wchar_t *inFilePath, const wchar_t *sigFilePath);

	// Signs the contents of inFilename and writes the enveloping (i.e. opaque) PKCS7
	// signature ( .p7m ) to p7mPath.
	// 
	// In a PKCS#7/CMS signature, the signer computes a cryptographic hash (e.g.
	// SHA-256) of the data, then uses their private key to sign that hash.
	// 
	// The signature = Sign( Hash(data) )
	// 
	// This signed hash is what gets stored in the signature file. For
	// enveloping/opaque signatures, the signed data is also stored in the signature
	// file.
	// 
	// Set the HashAlgorithm property to specify the hash algorithmg. The valid options
	// are sha256 , sha1 , sha384 , and sha512 .
	// 
	bool CreateP7M(const wchar_t *inFilename, const wchar_t *p7mPath);

	// Creates an asynchronous task to call the CreateP7M method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *CreateP7MAsync(const wchar_t *inFilename, const wchar_t *p7mPath);

	// Signs the contents of inFilename and writes the detached PKCS7 signature ( .p7s ) to
	// p7sPath.
	// 
	// In a PKCS#7/CMS detached signature, the signer computes a cryptographic hash
	// (e.g. SHA-256) of the data, then uses their private key to sign that hash.
	// 
	// The signature = Sign( Hash(data) )
	// 
	// This signed hash is what gets stored in the signature file.
	// 
	// Set the HashAlgorithm property to specify the hash algorithmg. The valid options
	// are sha256 , sha1 , sha384 , and sha512 .
	// 
	bool CreateP7S(const wchar_t *inFilename, const wchar_t *p7sPath);

	// Creates an asynchronous task to call the CreateP7S method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *CreateP7SAsync(const wchar_t *inFilename, const wchar_t *p7sPath);

	// Applications should instead call BinData.AppendEncoded to append binary encoded
	// data (such as base64) to a BinData object. The decoded binary bytes can then be
	// obtained from the BinData object.
	// 
	// Decode binary data from an encoded string. The encoding can be set to any of the
	// following strings: base64 , hex , quoted-printable , url , base32 , Q , B ,
	// url_rc1738 , url_rfc2396 , url_rfc3986 , url_oauth , uu , modBase64 , or html
	// (for HTML entity encoding).
	// 
	bool Decode(const wchar_t *str, const wchar_t *encoding, CkByteData &outData);

	// Decodes from an encoding back to the original string. The encoding can be set to any
	// of the following strings: base64 , hex , quoted-printable , url , base32 , Q , B
	// , url_rc1738 , url_rfc2396 , url_rfc3986 , url_oauth , uu , modBase64 , or html
	// (for HTML entity encoding).
	bool DecodeString(const wchar_t *inStr, const wchar_t *charset, const wchar_t *encoding, CkString &outStr);
	// Decodes from an encoding back to the original string. The encoding can be set to any
	// of the following strings: base64 , hex , quoted-printable , url , base32 , Q , B
	// , url_rc1738 , url_rfc2396 , url_rfc3986 , url_oauth , uu , modBase64 , or html
	// (for HTML entity encoding).
	const wchar_t *decodeString(const wchar_t *inStr, const wchar_t *charset, const wchar_t *encoding);

	// Decrypts the contents of bd. This method can do either symmetric key
	// decryption or CMS public key decryption (e.g., PKCS#7 EnvelopedData ).
	// 
	// Before calling this method for symmetric key decryption (e.g., AES , ChaCha20 ,
	// Blowfish , etc.), ensure the following setup:
	// 
	//     1. Define the encryption algorithm using the CryptAlgorithm property.
	//     2. Specify the encryption key length with the KeyLength property.
	//     3. Establish the cipher mode through the CipherMode property.
	//     4. Use the SetEncodedIV method to set the IV, if needed by the cipher mode.
	//     5. Set the encryption key with the SetEncodedKey method.
	//     6. Ensure the PaddingScheme property matches the encryptor's value.
	// 
	// When calling this method for public key decryption (i.e. decrypting a PKCS7 CMS
	// message ), the following setup is required:
	// 
	//     1. The CryptAlgorithm property should be set to the string "pki" .
	//     2. Optionally specify the certificate to be used for decryption by calling
	//     SetDecryptCert . If SetDecryptCert is not called, then Chilkat will
	//     automatically search certificate sources ( Windows certificate stores ,
	//     Apple keychain , etc.) for the required certificate.
	bool DecryptBd(CkBinDataW &bd);

	// Decrypts a byte array and returns the unencrypted byte array. The property
	// settings used when encrypting the data must match the settings when decrypting.
	// Specifically, the CryptAlgorithm, CipherMode, PaddingScheme, KeyLength, IV, and
	// SecretKey properties must match.
	bool DecryptBytes(CkByteData &data, CkByteData &outData);

	// The same as DecryptBytes except the binary data is passed via a pointer and
	// length.
	bool DecryptBytes2(const void *pByteData, unsigned long szByteData, CkByteData &outBytes);

	// Decrypts string-encoded encrypted data and returns the unencrypted byte array.
	// Data encrypted with EncryptBytesENC can be decrypted with this method. The
	// property settings used when encrypting the data must match the settings when
	// decrypting. Specifically, the EncodingMode, CryptAlgorithm, CipherMode,
	// PaddingScheme, KeyLength, IV, and SecretKey properties must match.
	bool DecryptBytesENC(const wchar_t *str, CkByteData &outData);

	// Decrypts encoded encrypted data, and returns the decrypted data as a binary
	// encoded string. For example:
	// Input → Decode EncodingMode → Decrypt → Encode EncodingMode → Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key decryption. For more
	// information on properties that affect decryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the DecryptBd method documentation.
	// 
	// 
	// References:
	// 1: #EncodingMode
	// 2: #CryptAlgorithm
	// 3: #CipherMode
	// 4: #DecryptBd
	bool DecryptEncoded(const wchar_t *encodedEncryptedData, CkString &outStr);
	// Decrypts encoded encrypted data, and returns the decrypted data as a binary
	// encoded string. For example:
	// Input → Decode EncodingMode → Decrypt → Encode EncodingMode → Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key decryption. For more
	// information on properties that affect decryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the DecryptBd method documentation.
	// 
	// 
	// References:
	// 1: #EncodingMode
	// 2: #CryptAlgorithm
	// 3: #CipherMode
	// 4: #DecryptBd
	const wchar_t *decryptEncoded(const wchar_t *encodedEncryptedData);

	// This function is intended for use when the expected decrypted output is text. It
	// decrypts the contents of bdIn and appends the resulting string to sbOut. Ensure
	// that the Charset property, such as utf-8, matches the one used during encryption
	// to interpret the decrypted bytes correctly as characters.
	// Input → Decrypt → Interpret Bytes according to Charset → Append to StringBuilder
	// 
	// This method supports symmetric key and public key decryption. For more
	// information on properties that affect decryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the DecryptBd method documentation.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #CryptAlgorithm
	// 3: #CipherMode
	// 4: #DecryptBd
	bool DecryptSb(CkBinDataW &bdIn, CkStringBuilderW &sbOut);

	// This function is intended for use when the expected decrypted output is text. It
	// decrypts binary encoded encrypted bytes passed in cipherText and appends the resulting
	// string to secureStr. Ensure that the Charset property, such as utf-8, matches the one
	// used during encryption to interpret the decrypted bytes correctly as characters.
	// Input → Decode using EncodingMode → Decrypt → Interpret Bytes according to
	// Charset → Append to Secure String
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key decryption. For more
	// information on properties that affect decryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the DecryptBd method documentation.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #EncodingMode
	// 3: #CryptAlgorithm
	// 4: #CipherMode
	// 5: #DecryptBd
	bool DecryptSecureENC(const wchar_t *cipherText, CkSecureStringW &secureStr);

	// This method is deprecated. Applications should implement streaming decryption by
	// using the FirstChunk and LastChunk properties.
	// 
	// References:
	// 1: #FirstChunk
	// 2: #LastChunk
	bool DecryptStream(CkStreamW &strm);

	// Creates an asynchronous task to call the DecryptStream method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *DecryptStreamAsync(CkStreamW &strm);

	// Decrypts a previously encrypted string, using the Charset property to interpret
	// the decrypted bytes as characters.
	bool DecryptString(CkByteData &data, CkString &outStr);
	// Decrypts a previously encrypted string, using the Charset property to interpret
	// the decrypted bytes as characters.
	const wchar_t *decryptString(CkByteData &data);

	// This function is intended for use when the expected decrypted output is text. It
	// decrypts binary encoded encrypted bytes passed in str and appends the resulting
	// string to ARG2. Ensure that the Charset property, such as utf-8, matches the one
	// used during encryption to interpret the decrypted bytes correctly as characters.
	// Input → Decode using EncodingMode → Decrypt → Interpret Bytes according to
	// Charset → Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key decryption. For more
	// information on properties that affect decryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the DecryptBd method documentation.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #EncodingMode
	// 3: #CryptAlgorithm
	// 4: #CipherMode
	// 5: #DecryptBd
	bool DecryptStringENC(const wchar_t *str, CkString &outStr);
	// This function is intended for use when the expected decrypted output is text. It
	// decrypts binary encoded encrypted bytes passed in str and appends the resulting
	// string to ARG2. Ensure that the Charset property, such as utf-8, matches the one
	// used during encryption to interpret the decrypted bytes correctly as characters.
	// Input → Decode using EncodingMode → Decrypt → Interpret Bytes according to
	// Charset → Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key decryption. For more
	// information on properties that affect decryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the DecryptBd method documentation.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #EncodingMode
	// 3: #CryptAlgorithm
	// 4: #CipherMode
	// 5: #DecryptBd
	const wchar_t *decryptStringENC(const wchar_t *str);

	// Encode binary data to base64 , hex , quoted-printable , URL encoding , etc. The
	// encoding can be set to any of the binary encodings supported by Chilkat. See the web
	// page linked below.
	bool Encode(CkByteData &byteData, const wchar_t *encoding, CkString &outStr);
	// Encode binary data to base64 , hex , quoted-printable , URL encoding , etc. The
	// encoding can be set to any of the binary encodings supported by Chilkat. See the web
	// page linked below.
	const wchar_t *encode(CkByteData &byteData, const wchar_t *encoding);

	// Encode binary data to base64, hex, quoted-printable, or URL-encoding. The encoding
	// can be set to any of the following strings: base64 , hex , quoted-printable ,
	// url , base32 , Q , B , url_rc1738 , url_rfc2396 , url_rfc3986 , url_oauth , uu ,
	// modBase64 , or html (for HTML entity encoding).
	// 
	// The pByteData points to the bytes to be encoded. The szByteData specifies the number of
	// bytes to encode.
	// 
	bool EncodeBytes(const void *pByteData, unsigned long szByteData, const wchar_t *encoding, CkString &outStr);
	// Encode binary data to base64, hex, quoted-printable, or URL-encoding. The encoding
	// can be set to any of the following strings: base64 , hex , quoted-printable ,
	// url , base32 , Q , B , url_rc1738 , url_rfc2396 , url_rfc3986 , url_oauth , uu ,
	// modBase64 , or html (for HTML entity encoding).
	// 
	// The pByteData points to the bytes to be encoded. The szByteData specifies the number of
	// bytes to encode.
	// 
	const wchar_t *encodeBytes(const void *pByteData, unsigned long szByteData, const wchar_t *encoding);

	// Encodes an integer to N bytes and returns in the specified encoding. If littleEndian is
	// true, then little-endian byte ordering is used. Otherwise big-endian byte
	// order is used.
	bool EncodeInt(int value, int numBytes, bool littleEndian, const wchar_t *encoding, CkString &outStr);
	// Encodes an integer to N bytes and returns in the specified encoding. If littleEndian is
	// true, then little-endian byte ordering is used. Otherwise big-endian byte
	// order is used.
	const wchar_t *encodeInt(int value, int numBytes, bool littleEndian, const wchar_t *encoding);

	// Binary encodes a string. The toEncodingName can be set to any of the binary encodings
	// supported by Chilkat, such as base64 , hex , etc. (see the link below for the
	// full list of encodings). The charsetName, such as "utf-8" , determines the bytes that
	// are encoded.
	// 
	// The toEncodingName can also be set to the value html for HTML entity encoding.
	// 
	bool EncodeString(const wchar_t *strToEncode, const wchar_t *charsetName, const wchar_t *toEncodingName, CkString &outStr);
	// Binary encodes a string. The toEncodingName can be set to any of the binary encodings
	// supported by Chilkat, such as base64 , hex , etc. (see the link below for the
	// full list of encodings). The charsetName, such as "utf-8" , determines the bytes that
	// are encoded.
	// 
	// The toEncodingName can also be set to the value html for HTML entity encoding.
	// 
	const wchar_t *encodeString(const wchar_t *strToEncode, const wchar_t *charsetName, const wchar_t *toEncodingName);

	// Encrypts the contents of bd. This method can do either symmetric key
	// encryption or CMS public key encryption (e.g., PKCS#7 EnvelopedData ).
	// 
	// Before calling this method for symmetric key encryption (e.g., AES , ChaCha20 ,
	// Blowfish , etc.), ensure the following setup:
	// 
	//     1. Define the encryption algorithm using the CryptAlgorithm property.
	//     2. Specify the encryption key length with the KeyLength property.
	//     3. Establish the cipher mode through the CipherMode property.
	//     4. Use the SetEncodedIV method to set the IV, if needed by the cipher mode.
	//     5. Set the encryption key with the SetEncodedKey method.
	//     6. Set the PaddingScheme property if needing something different than the
	//     default.
	// 
	// When calling this method for public key encryption (i.e. creating a PKCS7 CMS
	// message ), the following setup is required:
	// 
	//     1. The CryptAlgorithm property should be set to the string "pki" .
	//     2. To specify the encryption certificate, use SetEncryptCert . For multiple
	//     certificates, call AddEncryptCert for each one.
	// 
	// References:
	// 1: #CryptAlgorithm
	// 2: #KeyLength
	// 3: #CipherMode
	// 4: #SetEncodedIV
	// 5: #SetEncodedKey
	// 6: #PaddingScheme
	// 7: #SetEncryptCert
	// 8: #AddEncryptCert
	bool EncryptBd(CkBinDataW &bd);

	// Encrypts a byte array. The minimal set of properties that should be set before
	// encrypting are: CryptAlgorithm, SecretKey. Other properties that control
	// encryption are: CipherMode, PaddingScheme, KeyLength, IV. When decrypting, all
	// property settings must match otherwise garbled data is returned.
	bool EncryptBytes(CkByteData &data, CkByteData &outData);

	// The same as EncryptBytes except the binary data is passed via a pointer and
	// length.
	bool EncryptBytes2(const void *pByteData, unsigned long szByteData, CkByteData &outBytes);

	// Encrypts a byte array and returns the encrypted data as an encoded (printable)
	// string. The minimal set of properties that should be set before encrypting are:
	// CryptAlgorithm, SecretKey, EncodingMode. Other properties that control
	// encryption are: CipherMode, PaddingScheme, KeyLength, IV. When decrypting, all
	// property settings must match otherwise garbled data is returned. The encoding of
	// the string that is returned is controlled by the EncodingMode property, which
	// can be set to Base64 , QP , or Hex .
	bool EncryptBytesENC(CkByteData &data, CkString &outStr);
	// Encrypts a byte array and returns the encrypted data as an encoded (printable)
	// string. The minimal set of properties that should be set before encrypting are:
	// CryptAlgorithm, SecretKey, EncodingMode. Other properties that control
	// encryption are: CipherMode, PaddingScheme, KeyLength, IV. When decrypting, all
	// property settings must match otherwise garbled data is returned. The encoding of
	// the string that is returned is controlled by the EncodingMode property, which
	// can be set to Base64 , QP , or Hex .
	const wchar_t *encryptBytesENC(CkByteData &data);

	// Encrypts binary-encoded data and returns it as a binary-encoded string. For
	// example:
	// Input → Decode EncodingMode → Encrypt → Encode EncodingMode → Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key decryption. For more
	// information on properties that affect decryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the method documentation.
	// 
	// 
	// References:
	// 1: #EncodingMode
	// 2: #CryptAlgorithm
	// 3: #CipherMode
	// 4: #DecryptBd
	bool EncryptEncoded(const wchar_t *str, CkString &outStr);
	// Encrypts binary-encoded data and returns it as a binary-encoded string. For
	// example:
	// Input → Decode EncodingMode → Encrypt → Encode EncodingMode → Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key decryption. For more
	// information on properties that affect decryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the method documentation.
	// 
	// 
	// References:
	// 1: #EncodingMode
	// 2: #CryptAlgorithm
	// 3: #CipherMode
	// 4: #DecryptBd
	const wchar_t *encryptEncoded(const wchar_t *str);

	// Encrypts text and appends the encrypted bytes in bdOut. The Charset property,
	// such as utf-8 , determines the actual bytes that are encrypted.
	// StringBuilder → Get bytes according to Charset → Encrypt → Append to BinData
	// 
	// This method supports symmetric key and public key encryption. For more
	// information on properties that affect encryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the EncryptBd method documentation.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #CryptAlgorithm
	// 3: #CipherMode
	// 4: #EncryptBd
	bool EncryptSb(CkStringBuilderW &sbIn, CkBinDataW &bdOut);

	// Encrypts the secure string and returns the encrypted bytes as a binary encoded
	// string. The Charset property determines the actual bytes that are encrypted.
	// SecureString → Get bytes according to Charset → Encrypt → Encode using
	// EncodingMode → Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key encryption. For more
	// information on properties that affect encryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the EncryptBd method documentation.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #EncodingMode
	// 3: #CryptAlgorithm
	// 4: #CipherMode
	// 5: #EncryptBd
	bool EncryptSecureENC(CkSecureStringW &secureStr, CkString &outStr);
	// Encrypts the secure string and returns the encrypted bytes as a binary encoded
	// string. The Charset property determines the actual bytes that are encrypted.
	// SecureString → Get bytes according to Charset → Encrypt → Encode using
	// EncodingMode → Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key encryption. For more
	// information on properties that affect encryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the EncryptBd method documentation.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #EncodingMode
	// 3: #CryptAlgorithm
	// 4: #CipherMode
	// 5: #EncryptBd
	const wchar_t *encryptSecureENC(CkSecureStringW &secureStr);

	// This method is deprecated. Applications should implement streaming encryption or
	// decryption by using the FirstChunk and LastChunk properties.
	// 
	// References:
	// 1: #FirstChunk
	// 2: #LastChunk
	bool EncryptStream(CkStreamW &strm);

	// Creates an asynchronous task to call the EncryptStream method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *EncryptStreamAsync(CkStreamW &strm);

	// Encrypts a string and returns the result as bytes, with the Charset property
	// determining the specific byte encoding of what gets encrypted.
	// 
	// References:
	// 1: #Charset
	bool EncryptString(const wchar_t *str, CkByteData &outData);

	// Encrypts the str and returns the encrypted bytes as a binary encoded string.
	// The Charset property determines the actual bytes that are encrypted.
	// Input → Get bytes according to Charset → Encrypt → Encode using EncodingMode →
	// Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key encryption. For more
	// information on properties that affect encryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the EncryptBd method documentation.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #EncodingMode
	// 3: #CryptAlgorithm
	// 4: #CipherMode
	// 5: #EncryptBd
	bool EncryptStringENC(const wchar_t *str, CkString &outStr);
	// Encrypts the str and returns the encrypted bytes as a binary encoded string.
	// The Charset property determines the actual bytes that are encrypted.
	// Input → Get bytes according to Charset → Encrypt → Encode using EncodingMode →
	// Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// This method supports symmetric key and public key encryption. For more
	// information on properties that affect encryption, such as CryptAlgorithm ,
	// CipherMode , etc., refer to the EncryptBd method documentation.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #EncodingMode
	// 3: #CryptAlgorithm
	// 4: #CipherMode
	// 5: #EncryptBd
	const wchar_t *encryptStringENC(const wchar_t *str);

	// This method is deprecated and should be avoided because it transforms the
	// password into a binary secret key using a transformation that is undocumented
	// and specific to this Chilkat method. PBKDF2 is a standard and more secure method
	// of generating a binary secret key from a password.
	bool GenEncodedSecretKey(const wchar_t *password, const wchar_t *encoding, CkString &outStr);
	// This method is deprecated and should be avoided because it transforms the
	// password into a binary secret key using a transformation that is undocumented
	// and specific to this Chilkat method. PBKDF2 is a standard and more secure method
	// of generating a binary secret key from a password.
	const wchar_t *genEncodedSecretKey(const wchar_t *password, const wchar_t *encoding);

	// This method is deprecated and should be avoided because it transforms the
	// password into a binary secret key using a transformation that is undocumented
	// and specific to this Chilkat method. PBKDF2 is a standard and more secure method
	// of generating a binary secret key from a password. An example using PBKDF2 is
	// shown below.
	// 
	// This method converts a string into a byte array matching the bit length of the
	// KeyLength property. For instance, if KeyLength is 128 bits, the resulting array
	// will be 16 bytes. This byte array can be assigned to the SecretKey property. For
	// decryption to work, the SecretKey must match exactly. To use password-based
	// encryption, pass the password to this method to generate an appropriate binary
	// secret key for the SecretKey property.
	// 
	// IMPORTANT : Do not use this method to decrypt data if another party has provided
	// you with the secret key. It is intended to transform a password of any length
	// into a correctly sized binary secret key.
	// 
	bool GenerateSecretKey(const wchar_t *password, CkByteData &outData);

	// Generates a random UUID string having standard UUID format, such as
	// de305d54-75b4-431b-adb2-eb6b9e546014 .
	// 
	// Note: This generates a version 4 UUID using random byte values. See RFC 4122.
	// 
	bool GenerateUuid(CkString &outStr);
	// Generates a random UUID string having standard UUID format, such as
	// de305d54-75b4-431b-adb2-eb6b9e546014 .
	// 
	// Note: This generates a version 4 UUID using random byte values. See RFC 4122.
	// 
	const wchar_t *generateUuid(void);

	// Generates numBytes random bytes and returns them as an encoded string. The encoding
	// format (e.g., base64, hex) is determined by the EncodingMode property. It
	// utilizes the Fortuna cryptographically secure random number generator,
	// auto-seeded by an OS-dependent secure entropy source.
	// 
	// References:
	// 1: #EncodingMode
	bool GenRandomBytesENC(int numBytes, CkString &outStr);
	// Generates numBytes random bytes and returns them as an encoded string. The encoding
	// format (e.g., base64, hex) is determined by the EncodingMode property. It
	// utilizes the Fortuna cryptographically secure random number generator,
	// auto-seeded by an OS-dependent secure entropy source.
	// 
	// References:
	// 1: #EncodingMode
	const wchar_t *genRandomBytesENC(int numBytes);

	// This method is deprecated. Application should instead call LastDecryptCert
	// 
	// Returns the last certificate used for public-key decryption.
	// 
	// The caller is responsible for deleting the object returned by this method.
	CkCertW *GetDecryptCert(void);

	// This method retrieves the authenticated additional data (AAD) set by the
	// application during the last call to SetEncodedAad . However, using this method
	// is redundant (and therefore deprecated), as the application can store and
	// retrieve the AAD independently after calling SetEncodedAad.
	// 
	// References:
	// 1: #SetEncodedAad
	bool GetEncodedAad(const wchar_t *encoding, CkString &outStr);
	// This method retrieves the authenticated additional data (AAD) set by the
	// application during the last call to SetEncodedAad . However, using this method
	// is redundant (and therefore deprecated), as the application can store and
	// retrieve the AAD independently after calling SetEncodedAad.
	// 
	// References:
	// 1: #SetEncodedAad
	const wchar_t *getEncodedAad(const wchar_t *encoding);
	// This method retrieves the authenticated additional data (AAD) set by the
	// application during the last call to SetEncodedAad . However, using this method
	// is redundant (and therefore deprecated), as the application can store and
	// retrieve the AAD independently after calling SetEncodedAad.
	// 
	// References:
	// 1: #SetEncodedAad
	const wchar_t *encodedAad(const wchar_t *encoding);

	// When encrypting in GCM mode, Chilkat generates the GCM authentication tag . The
	// application can then use this method to retrieve the tag, which should be sent
	// to the decrypting party along with the encrypted data. For further details on
	// GCM authenticated encryption, please refer to the web pages linked below.
	bool GetEncodedAuthTag(const wchar_t *encoding, CkString &outStr);
	// When encrypting in GCM mode, Chilkat generates the GCM authentication tag . The
	// application can then use this method to retrieve the tag, which should be sent
	// to the decrypting party along with the encrypted data. For further details on
	// GCM authenticated encryption, please refer to the web pages linked below.
	const wchar_t *getEncodedAuthTag(const wchar_t *encoding);
	// When encrypting in GCM mode, Chilkat generates the GCM authentication tag . The
	// application can then use this method to retrieve the tag, which should be sent
	// to the decrypting party along with the encrypted data. For further details on
	// GCM authenticated encryption, please refer to the web pages linked below.
	const wchar_t *encodedAuthTag(const wchar_t *encoding);

	// This method retrieves the IV set by the application during the last call to
	// SetEncodedIV or RandomizeIV .
	// 
	// References:
	// 1: #SetEncodedIV
	// 2: #RandomizeIV
	bool GetEncodedIV(const wchar_t *encoding, CkString &outIV);
	// This method retrieves the IV set by the application during the last call to
	// SetEncodedIV or RandomizeIV .
	// 
	// References:
	// 1: #SetEncodedIV
	// 2: #RandomizeIV
	const wchar_t *getEncodedIV(const wchar_t *encoding);
	// This method retrieves the IV set by the application during the last call to
	// SetEncodedIV or RandomizeIV .
	// 
	// References:
	// 1: #SetEncodedIV
	// 2: #RandomizeIV
	const wchar_t *encodedIV(const wchar_t *encoding);

	// This method retrieves the symmetric encryption secret key set by the application
	// during the last call to SetEncodedKey or RandomizeKey . However, using this
	// method is redundant (and therefore deprecated), as the application can store and
	// retrieve the key independently after calling SetEncodedKey.
	// 
	// References:
	// 1: #SetEncodedKey
	// 2: #RandomizeKey
	bool GetEncodedKey(const wchar_t *encoding, CkString &outKey);
	// This method retrieves the symmetric encryption secret key set by the application
	// during the last call to SetEncodedKey or RandomizeKey . However, using this
	// method is redundant (and therefore deprecated), as the application can store and
	// retrieve the key independently after calling SetEncodedKey.
	// 
	// References:
	// 1: #SetEncodedKey
	// 2: #RandomizeKey
	const wchar_t *getEncodedKey(const wchar_t *encoding);
	// This method retrieves the symmetric encryption secret key set by the application
	// during the last call to SetEncodedKey or RandomizeKey . However, using this
	// method is redundant (and therefore deprecated), as the application can store and
	// retrieve the key independently after calling SetEncodedKey.
	// 
	// References:
	// 1: #SetEncodedKey
	// 2: #RandomizeKey
	const wchar_t *encodedKey(const wchar_t *encoding);

	// This method retrieves the password-based encryption (PBE) salt set by the
	// application during the last call to SetEncodedSalt . However, using this method
	// is redundant (and therefore deprecated), as the application can store and
	// retrieve the salt independently after calling SetEncodedSalt.
	// 
	// References:
	// 1: #SetEncodedSalt
	bool GetEncodedSalt(const wchar_t *encoding, CkString &outStr);
	// This method retrieves the password-based encryption (PBE) salt set by the
	// application during the last call to SetEncodedSalt . However, using this method
	// is redundant (and therefore deprecated), as the application can store and
	// retrieve the salt independently after calling SetEncodedSalt.
	// 
	// References:
	// 1: #SetEncodedSalt
	const wchar_t *getEncodedSalt(const wchar_t *encoding);
	// This method retrieves the password-based encryption (PBE) salt set by the
	// application during the last call to SetEncodedSalt . However, using this method
	// is redundant (and therefore deprecated), as the application can store and
	// retrieve the salt independently after calling SetEncodedSalt.
	// 
	// References:
	// 1: #SetEncodedSalt
	const wchar_t *encodedSalt(const wchar_t *encoding);

	// Offers details on the last method executed. While many methods provide no
	// information, some do through GetLastJsonData. For instance, after invoking a
	// signature verification method, GetLastJsonData will return JSON detailing the
	// algorithms used.
	void GetLastJsonData(CkJsonObjectW &json);

	// This method retrieves the signing time of the Nth certificate in a digital
	// signature after verification. The signing time for the first certificate is at
	// index 0. The NumSignerCerts property indicates the total number of signing
	// certificates, although typically only one is used. Note: Before accessing the
	// signing time, use the HasSignatureSigningTime method to verify its availability,
	// and skip indices lacking a signing time. The signing time is returned in RFC822
	// string format .
	// 
	// References:
	// 1: #NumSignerCerts
	// 2: #HasSignatureSigningTime
	bool GetSignatureSigningTimeStr(int index, CkString &outStr);
	// This method retrieves the signing time of the Nth certificate in a digital
	// signature after verification. The signing time for the first certificate is at
	// index 0. The NumSignerCerts property indicates the total number of signing
	// certificates, although typically only one is used. Note: Before accessing the
	// signing time, use the HasSignatureSigningTime method to verify its availability,
	// and skip indices lacking a signing time. The signing time is returned in RFC822
	// string format .
	// 
	// References:
	// 1: #NumSignerCerts
	// 2: #HasSignatureSigningTime
	const wchar_t *getSignatureSigningTimeStr(int index);
	// This method retrieves the signing time of the Nth certificate in a digital
	// signature after verification. The signing time for the first certificate is at
	// index 0. The NumSignerCerts property indicates the total number of signing
	// certificates, although typically only one is used. Note: Before accessing the
	// signing time, use the HasSignatureSigningTime method to verify its availability,
	// and skip indices lacking a signing time. The signing time is returned in RFC822
	// string format .
	// 
	// References:
	// 1: #NumSignerCerts
	// 2: #HasSignatureSigningTime
	const wchar_t *signatureSigningTimeStr(int index);

	// Extracts the signed (authenticated) attributes for the Nth signer, where signerIndex is
	// typically 0, as most signatures have only one signer. Provide the binary PKCS7
	// in pkcs7Der. If successful, sbJson will hold the signed attributes in JSON format.
	// 
	// Sample JSON output:{
	//   "signedAttributes": [
	//     {
	//       "oid": "1.2.840.113549.1.9.3",
	//       "name": "Content Type"
	//     },
	//     {
	//       "oid": "1.2.840.113549.1.9.5",
	//       "name": "Signing Time"
	//     },
	//     {
	//       "oid": "1.2.840.113549.1.9.4"
	//       "name": "Message Digest"
	//     },
	//     {
	//       "oid": "1.2.840.113549.1.9.16.2.47",
	//       "name": "Signing Certificate V2"
	//     }
	//   ]
	// }
	// 
	bool GetSignedAttributes(int signerIndex, CkBinDataW &pkcs7Der, CkStringBuilderW &sbJson);

	// This method is deprecated. Application should instead call LastSignerCert
	// 
	// Gets the Nth certificate used for signing. This method can be called after
	// verifying a digital signature to get the signer certs. The 1st certificate is at
	// index 0. The NumSignerCerts property contains the total number of signing
	// certificates. (Typically, a single certificate is used in creating a digital
	// signature.)
	// 
	// The caller is responsible for deleting the object returned by this method.
	CkCertW *GetSignerCert(int index);

	// This method is deprecated. Applications can get the cert chain by calling
	// LastSignerCert to get the certificate object, and then get the certificate chain
	// from the certificate object.
	// 
	// Returns the full certificate chain for the Nth certificate used to for signing.
	// Indexing begins at 0.
	// 
	// The caller is responsible for deleting the object returned by this method.
	CkCertChainW *GetSignerCertChain(int index);

	// Hashes the bytes in bd and returns the hash as a binary-encoded string. The
	// hash algorithm is determined by the HashAlgorithm property, while the encoding
	// is specified by the EncodingMode property. Encoding options include base64 , hex
	// , base64url , or others listed at the link below.
	// 
	// References:
	// 1: #HashAlgorithm
	// 2: #EncodingMode
	bool HashBdENC(CkBinDataW &bd, CkString &outStr);
	// Hashes the bytes in bd and returns the hash as a binary-encoded string. The
	// hash algorithm is determined by the HashAlgorithm property, while the encoding
	// is specified by the EncodingMode property. Encoding options include base64 , hex
	// , base64url , or others listed at the link below.
	// 
	// References:
	// 1: #HashAlgorithm
	// 2: #EncodingMode
	const wchar_t *hashBdENC(CkBinDataW &bd);

	// To hash binary data in chunks, start by hashing the first chunk using this
	// method. For additional chunks, use the HashMoreBytes method as needed. Complete
	// the process with HashFinal or HashFinalENC to obtain the hash result. The hash
	// algorithm used is determined by the HashAlgorithm property setting.
	// 
	// References:
	// 1: #HashMoreBytes
	// 2: #HashFinal
	// 3: #HashFinalENC
	// 4: #HashAlgorithm
	bool HashBeginBytes(CkByteData &data);

	// To hash binary data in chunks, start by hashing the first chunk using this
	// method. For additional chunks, use the HashMoreBytes method as needed. Complete
	// the process with HashFinal or HashFinalENC to obtain the hash result. The hash
	// algorithm used is determined by the HashAlgorithm property setting.
	// 
	// References:
	// 1: #HashMoreBytes
	// 2: #HashFinal
	// 3: #HashFinalENC
	// 4: #HashAlgorithm
	bool HashBeginBytes2(const void *pByteData, unsigned long szByteData);

	// To hash a large amount of text, start by processing the first chunk using this
	// method. For subsequent chunks, use the HashMoreString method as needed. Conclude
	// by calling HashFinalENC to obtain the final result. The hash algorithm is
	// determined by the HashAlgorithm property setting.
	// 
	// References:
	// 1: #HashMoreString
	// 2: #HashFinalENC
	// 3: #HashAlgorithm
	bool HashBeginString(const wchar_t *strData);

	// Hashes a byte array using the algorithm specified by the HashAlgorithm property.
	bool HashBytes(CkByteData &data, CkByteData &outData);

	// The same as HashBytes except the binary data is passed via a pointer and length.
	bool HashBytes2(const void *pByteData, unsigned long szByteData, CkByteData &outBytes);

	// Hashes a byte array and returns the hash as a binary encoded string.
	// 
	// The hash algorithm is specified by the HashAlgorithm property, The encoding is
	// controlled by the EncodingMode property, which can be set to base64 , hex ,
	// base64url , or any of the encodings listed at the link below.
	// 
	bool HashBytesENC(CkByteData &data, CkString &outStr);
	// Hashes a byte array and returns the hash as a binary encoded string.
	// 
	// The hash algorithm is specified by the HashAlgorithm property, The encoding is
	// controlled by the EncodingMode property, which can be set to base64 , hex ,
	// base64url , or any of the encodings listed at the link below.
	// 
	const wchar_t *hashBytesENC(CkByteData &data);

	// Start or continue hashing data in chunks. Set firstChunk to true for the first
	// chunk, and false for subsequent chunks. Finish by calling HashFinalENC to
	// obtain the result. The hash algorithm used is determined by the HashAlgorithm
	// property.
	bool HashChunkBd(bool firstChunk, CkBinDataW &bd);

	// Hashes a file using the specified HashAlgorithm and returns the hash bytes. The
	// file is processed in streaming mode, allowing any file size to be hashed
	// efficiently while minimizing memory usage.
	bool HashFile(const wchar_t *path, CkByteData &outBytes);

	// Creates an asynchronous task to call the HashFile method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *HashFileAsync(const wchar_t *path);

	// Hashes a file and returns the hash as an encoded string.
	// 
	// The hash algorithm is specified by the HashAlgorithm property, The encoding is
	// controlled by the EncodingMode property, which can be set to base64 , hex ,
	// base64url , or any of the encodings listed at the link below.
	// 
	// Any size file is supported because the file is hashed internally in streaming
	// mode (keeping memory usage low and constant).
	// 
	bool HashFileENC(const wchar_t *path, CkString &outStr);
	// Hashes a file and returns the hash as an encoded string.
	// 
	// The hash algorithm is specified by the HashAlgorithm property, The encoding is
	// controlled by the EncodingMode property, which can be set to base64 , hex ,
	// base64url , or any of the encodings listed at the link below.
	// 
	// Any size file is supported because the file is hashed internally in streaming
	// mode (keeping memory usage low and constant).
	// 
	const wchar_t *hashFileENC(const wchar_t *path);

	// Creates an asynchronous task to call the HashFileENC method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *HashFileENCAsync(const wchar_t *path);

	// Finalizes a multi-step hash computation and returns the hash bytes.
	bool HashFinal(CkByteData &outBytes);

	// Finalizes a multi-step hash computation and returns the hash bytes encoded
	// according to the EncodingMode property setting.
	// 
	// References:
	// 1: #EncodingMode
	bool HashFinalENC(CkString &outStr);
	// Finalizes a multi-step hash computation and returns the hash bytes encoded
	// according to the EncodingMode property setting.
	// 
	// References:
	// 1: #EncodingMode
	const wchar_t *hashFinalENC(void);

	// Adds more bytes to the hash currently under computation. (See HashBeginBytes )
	bool HashMoreBytes(CkByteData &data);

	// The same as HashMoreBytes except the binary data is passed via a pointer and
	// length.
	bool HashMoreBytes2(const void *pByteData, unsigned long szByteData);

	// Adds more text to the hash currently under computation. (See HashBeginString )
	// 
	// References:
	// 1: #HashBeginString
	bool HashMoreString(const wchar_t *strData);

	// Hashes a string using the Charset property to determine the bytes and returns
	// the hash.
	bool HashString(const wchar_t *str, CkByteData &outData);

	// Hashes the str and returns the hash as a binary encoded string. The Charset
	// property determines the actual bytes that are hashed.
	// Input → Get bytes according to Charset → Hash → Encode using EncodingMode →
	// Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// The hash algorithm is determined by the HashAlgorithm property.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #EncodingMode
	// 3: #HashAlgorithm
	bool HashStringENC(const wchar_t *str, CkString &outStr);
	// Hashes the str and returns the hash as a binary encoded string. The Charset
	// property determines the actual bytes that are hashed.
	// Input → Get bytes according to Charset → Hash → Encode using EncodingMode →
	// Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// The hash algorithm is determined by the HashAlgorithm property.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #EncodingMode
	// 3: #HashAlgorithm
	const wchar_t *hashStringENC(const wchar_t *str);

	// After verifying a digital signature with a signature verification method, you
	// can call this method. It returns true if the signing time for the Nth
	// certificate is available and can be accessed using the
	// GetSignatureSigningTimeStr method.
	// 
	// References:
	// 1: #GetSignatureSigningTimeStr
	bool HasSignatureSigningTime(int index);

	// Implements RFC 4226: HOTP: An HMAC-Based One-Time Password Algorithm. The
	// arguments to this method are:
	//     * secret: The shared secret in an enocded representation such as base64, hex,
	//     ascii, etc.
	//     * secretEnc: The encoding of the shared secret, such as base64
	//     * counterHex: The 8-byte counter in hexidecimal format.
	//     * numDigits: The number of decimal digits to return.
	//     * truncOffset: Normally set this to -1 for dynamic truncation. Otherwise can be set
	//     in the range 0..15.
	//     * hashAlg: Normally set to sha1 . Can be set to other hash algorithms such as
	//     sha256 , sha512 , etc.
	bool Hotp(const wchar_t *secret, const wchar_t *secretEnc, const wchar_t *counterHex, int numDigits, int truncOffset, const wchar_t *hashAlg, CkString &outStr);
	// Implements RFC 4226: HOTP: An HMAC-Based One-Time Password Algorithm. The
	// arguments to this method are:
	//     * secret: The shared secret in an enocded representation such as base64, hex,
	//     ascii, etc.
	//     * secretEnc: The encoding of the shared secret, such as base64
	//     * counterHex: The 8-byte counter in hexidecimal format.
	//     * numDigits: The number of decimal digits to return.
	//     * truncOffset: Normally set this to -1 for dynamic truncation. Otherwise can be set
	//     in the range 0..15.
	//     * hashAlg: Normally set to sha1 . Can be set to other hash algorithms such as
	//     sha256 , sha512 , etc.
	const wchar_t *hotp(const wchar_t *secret, const wchar_t *secretEnc, const wchar_t *counterHex, int numDigits, int truncOffset, const wchar_t *hashAlg);

	// Returns in cert the last certificate used for public-key decryption.
	bool LastDecryptCert(CkCertW &cert);

	// This method is deprecated. Please use GetLastJsonData instead. GetLastJsonData
	// provides details about the most recently executed method. While many methods
	// don't provide additional information, some do, such as after verifying a
	// signature. In such cases, LastJsonData will return JSON with details like the
	// algorithms used in the verification process.
	// The caller is responsible for deleting the object returned by this method.
	CkJsonObjectW *LastJsonData(void);

	// Retrieves the Nth certificate used for signing in cert, where the first
	// certificate is at index 0. Use this method after verifying a digital signature
	// to access the signer certificates. The NumSignerCerts property indicates the
	// total number of signing certificates. Usually, only one certificate is used when
	// creating a digital signature.
	// 
	// References:
	// 1: #NumSignerCerts
	bool LastSignerCert(int index, CkCertW &cert);

	// Loads the caller of the task's async method.
	bool LoadTaskCaller(CkTaskW &task);

	// Generates a Message Authentication Code (MAC) for the bytes in bd using the
	// algorithm defined by the MacAlgorithm property. The resulting MAC is encoded
	// into a string based on the EncodingMode property (e.g., base64 or hex ). The
	// HashAlgorithm property determines the internal hash function. Before generating
	// the MAC, specify the secret key using SetMacKeyEncoded .
	// 
	// References:
	// 1: #MacAlgorithm
	// 2: #EncodingMode
	// 3: #HashAlgorithm
	// 4: #SetMacKeyEncoded
	bool MacBdENC(CkBinDataW &bd, CkString &outStr);
	// Generates a Message Authentication Code (MAC) for the bytes in bd using the
	// algorithm defined by the MacAlgorithm property. The resulting MAC is encoded
	// into a string based on the EncodingMode property (e.g., base64 or hex ). The
	// HashAlgorithm property determines the internal hash function. Before generating
	// the MAC, specify the secret key using SetMacKeyEncoded .
	// 
	// References:
	// 1: #MacAlgorithm
	// 2: #EncodingMode
	// 3: #HashAlgorithm
	// 4: #SetMacKeyEncoded
	const wchar_t *macBdENC(CkBinDataW &bd);

	// Computes a Message Authentication Code using the algorithm defined in the
	// MacAlgorithm property. The HashAlgorithm property setting determines the hash
	// algorithm used internally. (A MAC algorithm like HMAC uses a hash function such
	// as SHA-256 internally, along with a secret key, to create a secure and
	// verifiable digest.)
	bool MacBytes(CkByteData &inBytes, CkByteData &outBytes);

	// The same as MacBytes except the binary data is passed via a pointer and length.
	bool MacBytes2(const void *pByteData, unsigned long szByteData, CkByteData &outBytes);

	// Computes a Message Authentication Code using the MAC algorithm specified in the
	// MacAlgorithm property. The result is encoded to a string using the encoding (
	// base64 , hex , etc.) specified by the EncodingMode property.
	bool MacBytesENC(CkByteData &inBytes, CkString &outStr);
	// Computes a Message Authentication Code using the MAC algorithm specified in the
	// MacAlgorithm property. The result is encoded to a string using the encoding (
	// base64 , hex , etc.) specified by the EncodingMode property.
	const wchar_t *macBytesENC(CkByteData &inBytes);

	// Computes a Message Authentication Code using the specified MacAlgorithm
	// property. The Charset property determines the actual bytes presented to the MAC
	// algorithm. The HashAlgorithm property setting determines the hash algorithm used
	// internally. (A MAC algorithm like HMAC uses a hash function such as SHA-256
	// internally, along with a secret key, to create a secure and verifiable digest.)
	bool MacString(const wchar_t *inText, CkByteData &outBytes);

	// Computes a Message Authentication Code (MAC) and returns it as a binary encoded
	// string. The MAC algorithm is defined by the MacAlgorithm property. The Charset
	// property determines the actual bytes that are hashed.
	// Input → Get bytes according to Charset → MAC → Encode using EncodingMode →
	// Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// The hash algorithm is determined by the HashAlgorithm property. The secret key
	// must be set beforehand by calling SetMacKeyEncoded .
	// 
	// 
	// References:
	// 1: #MacAlgorithm
	// 2: #Charset
	// 3: #EncodingMode
	// 4: #HashAlgorithm
	// 5: #SetMacKeyEncoded
	bool MacStringENC(const wchar_t *inText, CkString &outStr);
	// Computes a Message Authentication Code (MAC) and returns it as a binary encoded
	// string. The MAC algorithm is defined by the MacAlgorithm property. The Charset
	// property determines the actual bytes that are hashed.
	// Input → Get bytes according to Charset → MAC → Encode using EncodingMode →
	// Output
	// 
	// The encoding (e.g. base64 , hex , etc.) is determined by the EncodingMode
	// property.
	// 
	// The hash algorithm is determined by the HashAlgorithm property. The secret key
	// must be set beforehand by calling SetMacKeyEncoded .
	// 
	// 
	// References:
	// 1: #MacAlgorithm
	// 2: #Charset
	// 3: #EncodingMode
	// 4: #HashAlgorithm
	// 5: #SetMacKeyEncoded
	const wchar_t *macStringENC(const wchar_t *inText);

	// Matches MySQL 's AES_DECRYPT function. strEncryptedHex is a hex-encoded AES-encrypted
	// string, and the return value is the original unencrypted string.
	bool MySqlAesDecrypt(const wchar_t *strEncryptedHex, const wchar_t *strPassword, CkString &outStr);
	// Matches MySQL 's AES_DECRYPT function. strEncryptedHex is a hex-encoded AES-encrypted
	// string, and the return value is the original unencrypted string.
	const wchar_t *mySqlAesDecrypt(const wchar_t *strEncryptedHex, const wchar_t *strPassword);

	// This function replicates MySQL 's AES_ENCRYPT , returning the encrypted data as
	// a hex-encoded string. In MySQL, this is done using: HEX(AES_ENCRYPT('The quick
	// brown fox jumps over the lazy dog', 'password')) .
	bool MySqlAesEncrypt(const wchar_t *strData, const wchar_t *strPassword, CkString &outStr);
	// This function replicates MySQL 's AES_ENCRYPT , returning the encrypted data as
	// a hex-encoded string. In MySQL, this is done using: HEX(AES_ENCRYPT('The quick
	// brown fox jumps over the lazy dog', 'password')) .
	const wchar_t *mySqlAesEncrypt(const wchar_t *strData, const wchar_t *strPassword);

	// Digitally signs the contents of bd. If successful, the contents of bd are
	// replaced with the PKCS#7 signed-data , which embeds the original data within the
	// signature. Ensure a certificate is set using SetSigningCert before invoking this
	// method. The HashAlgorithm property specifies the hash algorithm for creating the
	// data's hash during signing.
	// 
	// References:
	// 1: #SetSigningCert
	// 2: #HashAlgorithm
	bool OpaqueSignBd(CkBinDataW &bd);

	// Creates an asynchronous task to call the OpaqueSignBd method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *OpaqueSignBdAsync(CkBinDataW &bd);

	// Digitally signs a binary data and returns the signature in PKCS#7 signed-data
	// format, which embeds the original data within the signature. Ensure a
	// certificate is set using SetSigningCert before invoking this method. The
	// HashAlgorithm property specifies the hash algorithm for creating the data's hash
	// during signing.
	// 
	// References:
	// 1: #SetSigningCert
	// 2: #HashAlgorithm
	bool OpaqueSignBytes(CkByteData &data, CkByteData &outData);

	// Creates an asynchronous task to call the OpaqueSignBytes method with the
	// arguments provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *OpaqueSignBytesAsync(CkByteData &data);

	// The same as OpaqueSignBytes except the binary data is passed via a pointer and
	// length.
	// 
	// References:
	// 1: #OpaqueSignBytes
	bool OpaqueSignBytes2(const void *pByteData, unsigned long szByteData, CkByteData &outBytes);

	// Digitally signs a binary data and returns a PKCS#7 signed-data signature
	// binary-encoded as a string. The returned signature embeds the original data.
	// Ensure to set a certificate by calling SetSigningCert beforehand. The
	// EncodingMode property determines the output encoding such as base64 , hex ,
	// base64_mime , etc. The HashAlgorithm property specifies the hash algorithm for
	// creating the data's hash during signing.
	// 
	// References:
	// 1: #SetSigningCert
	// 2: #EncodingMode
	// 3: #HashAlgorithm
	bool OpaqueSignBytesENC(CkByteData &data, CkString &outStr);
	// Digitally signs a binary data and returns a PKCS#7 signed-data signature
	// binary-encoded as a string. The returned signature embeds the original data.
	// Ensure to set a certificate by calling SetSigningCert beforehand. The
	// EncodingMode property determines the output encoding such as base64 , hex ,
	// base64_mime , etc. The HashAlgorithm property specifies the hash algorithm for
	// creating the data's hash during signing.
	// 
	// References:
	// 1: #SetSigningCert
	// 2: #EncodingMode
	// 3: #HashAlgorithm
	const wchar_t *opaqueSignBytesENC(CkByteData &data);

	// Creates an asynchronous task to call the OpaqueSignBytesENC method with the
	// arguments provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *OpaqueSignBytesENCAsync(CkByteData &data);

	// Digitally signs a string and returns PKCS#7 signed-data . The Charset property
	// determines the actual bytes that are hashed and signed. The HashAlgorithm
	// property specifies the hash algorithm for creating the data's hash during
	// signing.
	// 
	// References:
	// 1: #Charset
	// 2: #HashAlgorithm
	bool OpaqueSignString(const wchar_t *str, CkByteData &outData);

	// Creates an asynchronous task to call the OpaqueSignString method with the
	// arguments provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *OpaqueSignStringAsync(const wchar_t *str);

	// Digitally signs a string and returns PKCS#7 signed-data as a binary encoded
	// string . The EncodingMode property determines the binary encoding, such as
	// base64 , hex , hex_lower , base64_mime , etc. The Charset property determines
	// the actual bytes that are hashed and signed. The HashAlgorithm property
	// specifies the hash algorithm for creating the data's hash during signing.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #Charset
	// 3: #HashAlgorithm
	bool OpaqueSignStringENC(const wchar_t *str, CkString &outStr);
	// Digitally signs a string and returns PKCS#7 signed-data as a binary encoded
	// string . The EncodingMode property determines the binary encoding, such as
	// base64 , hex , hex_lower , base64_mime , etc. The Charset property determines
	// the actual bytes that are hashed and signed. The HashAlgorithm property
	// specifies the hash algorithm for creating the data's hash during signing.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #Charset
	// 3: #HashAlgorithm
	const wchar_t *opaqueSignStringENC(const wchar_t *str);

	// Creates an asynchronous task to call the OpaqueSignStringENC method with the
	// arguments provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *OpaqueSignStringENCAsync(const wchar_t *str);

	// The method performs in-place verification of the PKCS#7 signed-data content of
	// bd. If the signature is successfully verified, the content of bd is replaced
	// with the original data, and the method returns true. If verification fails,
	// bd remains unchanged, and the method returns false. Afterwards, you can
	// retrieve signer certificates by using the NumSignerCerts property and the
	// LastSignerCert method.
	// 
	// References:
	// 1: #NumSignerCerts
	// 2: #LastSignerCert
	bool OpaqueVerifyBd(CkBinDataW &bd);

	// Verifies a PKCS#7 signed-data signature and returns the original data. If the
	// signature fails verification, the returned data will be empty. Afterwards, you
	// can retrieve signer certificates by using the NumSignerCerts property and the
	// LastSignerCert method.
	// 
	// References:
	// 1: #NumSignerCerts
	// 2: #LastSignerCert
	bool OpaqueVerifyBytes(CkByteData &p7m, CkByteData &outOriginal);

	// The same as OpaqueVerifyBytes except the binary data is passed via a pointer and
	// length.
	// 
	// References:
	// 1: #OpaqueVerifyBytes
	bool OpaqueVerifyBytes2(const void *pByteData, unsigned long szByteData, CkByteData &outBytes);

	// Verifies a PKCS#7 signed-data signature and returns the original data. If the
	// signature fails verification, the returned data will be empty. The p7m is a
	// binary-encoded string, using the encoding set by the EncodingMode property.
	// Afterwards, you can retrieve signer certificates by using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #NumSignerCerts
	// 3: #LastSignerCert
	bool OpaqueVerifyBytesENC(const wchar_t *p7m, CkByteData &outOriginal);

	// This function verifies a PKCS#7 signed-data signature and returns the original
	// text data. If the signature does not verify successfully, it returns an empty
	// string. The Charset property specifies how the original data bytes are converted
	// to characters. You can obtain signer certificates using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// References:
	// 1: #Charset
	// 2: #NumSignerCerts
	// 3: #LastSignerCert
	bool OpaqueVerifyString(CkByteData &p7m, CkString &outOriginal);
	// This function verifies a PKCS#7 signed-data signature and returns the original
	// text data. If the signature does not verify successfully, it returns an empty
	// string. The Charset property specifies how the original data bytes are converted
	// to characters. You can obtain signer certificates using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// References:
	// 1: #Charset
	// 2: #NumSignerCerts
	// 3: #LastSignerCert
	const wchar_t *opaqueVerifyString(CkByteData &p7m);

	// This function verifies a PKCS#7 signed-data binary-encoded signature and returns
	// the original text data. The EncodingMode property determines how p7m is decoded
	// to bytes. If the signature does not verify successfully, it returns an empty
	// string. The Charset property specifies how the original data bytes are converted
	// to characters. You can obtain signer certificates using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #Charset
	// 3: #NumSignerCerts
	// 4: #LastSignerCert
	bool OpaqueVerifyStringENC(const wchar_t *p7m, CkString &outOriginal);
	// This function verifies a PKCS#7 signed-data binary-encoded signature and returns
	// the original text data. The EncodingMode property determines how p7m is decoded
	// to bytes. If the signature does not verify successfully, it returns an empty
	// string. The Charset property specifies how the original data bytes are converted
	// to characters. You can obtain signer certificates using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #Charset
	// 3: #NumSignerCerts
	// 4: #LastSignerCert
	const wchar_t *opaqueVerifyStringENC(const wchar_t *p7m);

	// This function implements the PBKDF1 (Password-Based Key Derivation Function #1)
	// algorithm. Follow these guidelines to use it:
	//     1. password (the password) is first converted using the character encoding
	//     specified by charset before being processed by the key derivation function.
	//     2. hashAlg specifies the hash function to use, such as md5 , sha1 , or md2 .
	//     3. salt represents the salt, which should be random data of at least 8 bytes
	//     (64 bits). You can use the GenRandomBytesENC method to generate this.
	//     4. iterationCount sets the iteration count, which must be a minimum of 1000.
	//     5. outputKeyBitLen determines the length (in bits) of the derived key.
	//     6. encoding defines the output encoding format, such as base64 or hex , and also
	//     the expected encoding of salt (the salt).
	// 
	// The function returns the derived key.
	// 
	// Note: If charset is specified as hex or base64, the password (password) will be treated
	// as binary data encoded in that format. It will be decoded into binary form and
	// used directly as such.
	// 
	// 
	// References:
	// 1: #GenRandomBytesENC
	bool Pbkdf1(const wchar_t *password, const wchar_t *charset, const wchar_t *hashAlg, const wchar_t *salt, int iterationCount, int outputKeyBitLen, const wchar_t *encoding, CkString &outStr);
	// This function implements the PBKDF1 (Password-Based Key Derivation Function #1)
	// algorithm. Follow these guidelines to use it:
	//     1. password (the password) is first converted using the character encoding
	//     specified by charset before being processed by the key derivation function.
	//     2. hashAlg specifies the hash function to use, such as md5 , sha1 , or md2 .
	//     3. salt represents the salt, which should be random data of at least 8 bytes
	//     (64 bits). You can use the GenRandomBytesENC method to generate this.
	//     4. iterationCount sets the iteration count, which must be a minimum of 1000.
	//     5. outputKeyBitLen determines the length (in bits) of the derived key.
	//     6. encoding defines the output encoding format, such as base64 or hex , and also
	//     the expected encoding of salt (the salt).
	// 
	// The function returns the derived key.
	// 
	// Note: If charset is specified as hex or base64, the password (password) will be treated
	// as binary data encoded in that format. It will be decoded into binary form and
	// used directly as such.
	// 
	// 
	// References:
	// 1: #GenRandomBytesENC
	const wchar_t *pbkdf1(const wchar_t *password, const wchar_t *charset, const wchar_t *hashAlg, const wchar_t *salt, int iterationCount, int outputKeyBitLen, const wchar_t *encoding);

	// Implements the PBKDF2 algorithm as follows:
	//     1. Convert password to the character encoding specified by charset before using it
	//     in the key derivation function.
	//     2. hashAlg specifies the hash algorithm. Options include sha256 , sha384 ,
	//     sha512 , md5 , sha1 , md2 , or any algorithm listed in the HashAlgorithm
	//     property.
	//     3. Provide a random salt value that is at least 8 bytes (64 bits) long. Use
	//     methods like GenRandomBytesENC to generate this salt value.
	//     4. Ensure iterationCount is 1000 or greater.
	//     5. Control the length of the derived key output using outputKeyBitLen.
	//     6. Set encoding to specify the encoding format for the output and the expected
	//     encoding for salt. Options include base64 and hex .
	// 
	// The derived key is the output of this process. Internally, PBKDF2 uses a
	// pseudorandom function (PRF), specifically a keyed HMAC. The hash algorithm
	// chosen with hashAlg dictates this PRF; for example, SHA256 uses HMAC-SHA256, while
	// SHA1 uses HMAC-SHA1.
	// 
	// Note: If charset is hex or base64 , password is treated as binary data. It will be
	// decoded and used directly as a binary password. SHA256 uses HMAC-SHA256, while
	// SHA1 uses HMAC-SHA1.
	// 
	// PBKDF1 and PBKDF2 are both key derivation functions used to strengthen passwords
	// for cryptographic purposes, but PBKDF2 is the improved version.
	// 
	//     * PBKDF1: Older and limited—it can only generate small keys (up to the hash
	//     function’s output size), making it less flexible and secure.
	//     * PBKDF2: More advanced—it can generate longer keys, is more resistant to
	//     attacks, and is widely recommended for modern security needs.
	// 
	// In short, PBKDF2 is stronger and more versatile than PBKDF1 .
	// 
	// 
	// References:
	// 1: #GenRandomBytesENC
	bool Pbkdf2(const wchar_t *password, const wchar_t *charset, const wchar_t *hashAlg, const wchar_t *salt, int iterationCount, int outputKeyBitLen, const wchar_t *encoding, CkString &outStr);
	// Implements the PBKDF2 algorithm as follows:
	//     1. Convert password to the character encoding specified by charset before using it
	//     in the key derivation function.
	//     2. hashAlg specifies the hash algorithm. Options include sha256 , sha384 ,
	//     sha512 , md5 , sha1 , md2 , or any algorithm listed in the HashAlgorithm
	//     property.
	//     3. Provide a random salt value that is at least 8 bytes (64 bits) long. Use
	//     methods like GenRandomBytesENC to generate this salt value.
	//     4. Ensure iterationCount is 1000 or greater.
	//     5. Control the length of the derived key output using outputKeyBitLen.
	//     6. Set encoding to specify the encoding format for the output and the expected
	//     encoding for salt. Options include base64 and hex .
	// 
	// The derived key is the output of this process. Internally, PBKDF2 uses a
	// pseudorandom function (PRF), specifically a keyed HMAC. The hash algorithm
	// chosen with hashAlg dictates this PRF; for example, SHA256 uses HMAC-SHA256, while
	// SHA1 uses HMAC-SHA1.
	// 
	// Note: If charset is hex or base64 , password is treated as binary data. It will be
	// decoded and used directly as a binary password. SHA256 uses HMAC-SHA256, while
	// SHA1 uses HMAC-SHA1.
	// 
	// PBKDF1 and PBKDF2 are both key derivation functions used to strengthen passwords
	// for cryptographic purposes, but PBKDF2 is the improved version.
	// 
	//     * PBKDF1: Older and limited—it can only generate small keys (up to the hash
	//     function’s output size), making it less flexible and secure.
	//     * PBKDF2: More advanced—it can generate longer keys, is more resistant to
	//     attacks, and is widely recommended for modern security needs.
	// 
	// In short, PBKDF2 is stronger and more versatile than PBKDF1 .
	// 
	// 
	// References:
	// 1: #GenRandomBytesENC
	const wchar_t *pbkdf2(const wchar_t *password, const wchar_t *charset, const wchar_t *hashAlg, const wchar_t *salt, int iterationCount, int outputKeyBitLen, const wchar_t *encoding);

	// Sets the initialization vector (IV) to a random value. The CryptAlgorithm
	// property should be set prior to calling this method.
	// 
	// A random IV is used in symmetric encryption (like AES-CBC or AES-GCM) to ensure
	// that encrypting the same plaintext with the same key produces different
	// ciphertext each time. This prevents attackers from recognizing patterns in
	// encrypted data and strengthens security.
	// 
	// Why use a random IV?
	// 
	//     * It ensures semantic security (i.e. same plaintext never results in same
	//     ciphertext).
	//     * Prevents replay and pattern attacks.
	//     * Especially important in modes like CBC and GCM.
	// 
	// How is the IV sent to the decrypting party?
	// 
	// The IV is not secret, but it must be available for decryption. Common methods:
	// 
	//     * Prepended to the ciphertext (e.g., IV || ciphertext )
	//     * Sent in a separate field (e.g., JSON field, HTTP header)
	//     * Concatenated and encoded (e.g., base64 of IV + ciphertext)
	// 
	// At the receiving side, the decryptor extracts the IV and uses it with the shared
	// key to decrypt the ciphertext correctly.
	// 
	// 
	// References:
	// 1: #CryptAlgorithm
	void RandomizeIV(void);

	// Sets the secret key to a random value. This method should be replaced by calling
	// GenRandomBytesENC followed by SetEncodedKey .
	// 
	// References:
	// 1: #GenRandomBytesENC
	// 2: #SetEncodedKey
	void RandomizeKey(void);

	// This method converts between different encodings, such as from base64 to hex .
	// Each argument can be any binary encoding supported by Chilkat.
	bool ReEncode(const wchar_t *encodedData, const wchar_t *fromEncoding, const wchar_t *toEncoding, CkString &outStr);
	// This method converts between different encodings, such as from base64 to hex .
	// Each argument can be any binary encoding supported by Chilkat.
	const wchar_t *reEncode(const wchar_t *encodedData, const wchar_t *fromEncoding, const wchar_t *toEncoding);

	// Sets the digital certificate for decryption when the CryptAlgorithm property is
	// set to "pki" . This method requires that the certificate has a private key.
	// 
	// References:
	// 1: #CryptAlgorithm
	bool SetDecryptCert(CkCertW &cert);

	// Sets the digital certificate and associated private key for decryption when the
	// CryptAlgorithm property is set to "pki" . The private key must be the one that
	// matches the certificate's public key.
	// 
	// References:
	// 1: #CryptAlgorithm
	bool SetDecryptCert2(CkCertW &cert, CkPrivateKeyW &key);

	// Sets the optional authenticated additional data ( AAD ) for AES encryption in
	// GCM mode. The data is provided as a binary-encoded string using the specified
	// encoding, and any binary encoding supported by Chilkat can be used.
	// 
	// In GCM (Galois/Counter Mode) encryption, AAD (Additional Authenticated Data) is
	// optional input that is not encrypted but is authenticated along with the
	// ciphertext. It's used to verify integrity of associated data like headers or
	// metadata. If AAD is modified, decryption will fail due to authentication tag
	// mismatch.
	// 
	bool SetEncodedAad(const wchar_t *aadStr, const wchar_t *encoding);

	// In GCM mode, the authentication tag is a short value (e.g. 16 bytes) generated
	// during encryption that ensures the integrity and authenticity of both the
	// ciphertext and any AAD. It must be verified during decryption to confirm the
	// data hasn't been altered.
	// 
	// When decrypting AES-GCM, applications must call this method to provide the
	// expected authentication tag.
	// 
	// To prevent Chilkat from checking the authentication tag after decryption, you
	// can set the authentication tag to the special hex value
	// FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF (16 bytes of 0xFF).
	// 
	bool SetEncodedAuthTag(const wchar_t *authTagStr, const wchar_t *encoding);

	// Sets the initialization vector used in symmetric encrpytion ( AES , Blowfish ,
	// etc.) from a binary-encoded string using any Chilkat-supported encoding method
	// (e.g., base64 , hex ).
	// 
	// An Initialization Vector (IV) is a random or unique value used in symmetric
	// encryption to ensure that encrypting the same plaintext multiple times produces
	// different ciphertexts. It prevents pattern leakage.
	// 
	// Cipher Modes That Require an IV:
	// 
	//     * CBC (Cipher Block Chaining)
	//     * CFB (Cipher Feedback)
	//     * OFB (Output Feedback)
	//     * CTR (Counter Mode)
	//     * GCM (Galois/Counter Mode)
	// 
	// ECB (Electronic Codebook) does *not* use an IV, which makes it less secure.
	// 
	void SetEncodedIV(const wchar_t *ivStr, const wchar_t *encoding);

	// Sets the encryption key used in symmetric encryption ( AES , Blowfish , etc.)
	// from a binary-encoded string using any Chilkat-supported encoding method (e.g.,
	// base64 , hex ).
	// 
	// The key must have a byte size equal to the KeyLength property. For instance, a
	// KeyLength of 128 bits requires a 16-byte key, and a KeyLength of 256 bits
	// requires a 32-byte key.
	// 
	// 
	// References:
	// 1: #KeyLength
	void SetEncodedKey(const wchar_t *keyStr, const wchar_t *encoding);

	// Sets the pbes2 or pbes1 salt bytes from a binary-encoded string using any
	// Chilkat-supported encoding method (e.g., base64 , hex ).
	// 
	// This salt is used for encryption and decryption when the CryptAlgorithm property
	// is set to pbes1 or pbes2 . Note: This does not apply to the Pbkdf1 or Pbkdf2
	// methods, where the salt is provided as a function argument.
	// 
	// 
	// References:
	// 1: #CryptAlgorithm
	// 2: #Pbkdf1
	// 3: #Pbkdf2
	void SetEncodedSalt(const wchar_t *saltStr, const wchar_t *encoding);

	// Instructs the encryption library to use a specified digital certificate for
	// public-key encryption. To encrypt using multiple certificates, call
	// AddEncryptCert for each one. This action is equivalent to calling
	// ClearEncryptCerts before AddEncryptCert .
	// 
	// References:
	// 1: #AddEncryptCert
	// 2: #ClearEncryptCerts
	bool SetEncryptCert(CkCertW &cert);

	// Sets the initialization vector (IV) for a symmetric encryption algorithm like
	// AES.
	void SetIV(const void *pByteData, unsigned long szByteData);

	// Sets the MAC key to be used for one of the Mac methods.
	bool SetMacKeyBytes(CkByteData &keyBytes);

	// Sets the MAC key from a binary-encoded string using any Chilkat-supported
	// encoding method (e.g., base64 , hex ).
	bool SetMacKeyEncoded(const wchar_t *key, const wchar_t *encoding);

	// Sets the MAC key from a string. The Charset property determines the actual bytes
	// used for the MAC key.
	// 
	// References:
	// 1: #Charset
	bool SetMacKeyString(const wchar_t *key);

	// Sets the encryption key used in symmetric encrpytion ( AES , Blowfish , etc.).
	// 
	// The key must have a byte size equal to the KeyLength property. For instance, a
	// KeyLength of 128 bits requires a 16-byte key, and a KeyLength of 256 bits
	// requires a 32-byte key.
	// 
	// 
	// References:
	// 1: #KeyLength
	void SetSecretKey(const void *pByteData, unsigned long szByteData);

	// This method, created over 15 years ago, is cryptographically insecure.
	// Applications should use PBKDF2 for generating secret keys, as demonstrated
	// below.
	// 
	// This method accepts a password string to generate a binary secret key of the
	// necessary bit length, setting the SecretKey property. It should only be used
	// when using Chilkat for both encryption and decryption, as the
	// password-to-secret-key algorithm must match to ensure compatibility.
	// 
	// There is no restriction on password length. The password is converted into a
	// binary secret key by generating an MD5 digest of the UTF-8 encoded password,
	// producing 16 bytes. If the required KeyLength exceeds 16 bytes, the MD5 digest
	// of the Base64 encoded UTF-8 password is appended, generating up to 32 bytes of
	// key material. This is then truncated to meet the necessary KeyLength. Below is
	// an example of how to replicate this computation manually.
	// 
	void SetSecretKeyViaPassword(const wchar_t *password);

	// Sets the digital certificate to be used for signing. Signing requires that the
	// certificate has a private key.
	bool SetSigningCert(CkCertW &cert);

	// Sets the digital certificate and associated private key for signing. The private
	// key must be the one that matches the certificate's public key.
	bool SetSigningCert2(CkCertW &cert, CkPrivateKeyW &privateKey);

	// If timestamp server communications are needed for signing and special Internet
	// settings like a proxy server are necessary, this method can provide an Http
	// object configured with these settings.
	void SetTsaHttpObj(CkHttpW &http);

	// Assigns the digital certificate for signature verification. Typically, a PKCS7
	// (CMS) signature includes the signing certificate information, making it
	// unnecessary to call this method explicitly. This is only required in rare
	// instances.
	bool SetVerifyCert(CkCertW &cert);

	// Digitally signs the content in dataToSign and returns a detached signature ( PKCS#7
	// signed-data ) as a binary-encoded string. The EncodingMode property determines
	// the binary-encoding. Possible encodings include base64 , base64_mime , hex , and
	// hex_lower . The HashAlgorithm property specifies the hash algorithm for creating
	// the data's hash during signing.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #HashAlgorithm
	bool SignBdENC(CkBinDataW &dataToSign, CkString &outStr);
	// Digitally signs the content in dataToSign and returns a detached signature ( PKCS#7
	// signed-data ) as a binary-encoded string. The EncodingMode property determines
	// the binary-encoding. Possible encodings include base64 , base64_mime , hex , and
	// hex_lower . The HashAlgorithm property specifies the hash algorithm for creating
	// the data's hash during signing.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #HashAlgorithm
	const wchar_t *signBdENC(CkBinDataW &dataToSign);

	// Creates an asynchronous task to call the SignBdENC method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *SignBdENCAsync(CkBinDataW &dataToSign);

	// Digitally signs binary data and returns the binary detached signature ( PKCS#7
	// signed-data ). The HashAlgorithm property specifies the hash algorithm for
	// creating the data's hash during signing.
	bool SignBytes(CkByteData &data, CkByteData &outData);

	// Creates an asynchronous task to call the SignBytes method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *SignBytesAsync(CkByteData &data);

	// The same as SignBytes except the binary data is passed via a pointer and length.
	bool SignBytes2(const void *pByteData, unsigned long szByteData, CkByteData &outBytes);

	// Digitally signs binary data and returns a detached signature ( PKCS#7
	// signed-data ) as a binary-encoded string. The EncodingMode property determines
	// the binary-encoding. Possible encodings include base64 , base64_mime , hex , and
	// hex_lower . The HashAlgorithm property specifies the hash algorithm for creating
	// the data's hash during signing.
	bool SignBytesENC(CkByteData &data, CkString &outStr);
	// Digitally signs binary data and returns a detached signature ( PKCS#7
	// signed-data ) as a binary-encoded string. The EncodingMode property determines
	// the binary-encoding. Possible encodings include base64 , base64_mime , hex , and
	// hex_lower . The HashAlgorithm property specifies the hash algorithm for creating
	// the data's hash during signing.
	const wchar_t *signBytesENC(CkByteData &data);

	// Creates an asynchronous task to call the SignBytesENC method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *SignBytesENCAsync(CkByteData &data);

	// Digitally signs a pre-computed hash and returns a detached signature ( PKCS#7
	// signed-data ) as a binary-encoded string. The EncodingMode property determines
	// the binary-encoding. Possible encodings include base64 , base64_mime , hex , and
	// hex_lower
	// 
	// encodedHash is a binary-encoded hash to be signed, with its encoding format specified
	// by hashEncoding (e.g., base64 , hex ). hashAlg specifies the hash algorithm (e.g., sha256 ,
	// sha1 , sha512 ) used for encodedHash.
	// 
	// 
	// References:
	// 1: #EncodingMode
	bool SignHashENC(const wchar_t *encodedHash, const wchar_t *hashAlg, const wchar_t *hashEncoding, CkString &outStr);
	// Digitally signs a pre-computed hash and returns a detached signature ( PKCS#7
	// signed-data ) as a binary-encoded string. The EncodingMode property determines
	// the binary-encoding. Possible encodings include base64 , base64_mime , hex , and
	// hex_lower
	// 
	// encodedHash is a binary-encoded hash to be signed, with its encoding format specified
	// by hashEncoding (e.g., base64 , hex ). hashAlg specifies the hash algorithm (e.g., sha256 ,
	// sha1 , sha512 ) used for encodedHash.
	// 
	// 
	// References:
	// 1: #EncodingMode
	const wchar_t *signHashENC(const wchar_t *encodedHash, const wchar_t *hashAlg, const wchar_t *hashEncoding);

	// Creates an asynchronous task to call the SignHashENC method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *SignHashENCAsync(const wchar_t *encodedHash, const wchar_t *hashAlg, const wchar_t *hashEncoding);

	// Digitally signs the text contained in sb and returns a detached signature (
	// PKCS#7 signed-data ) as a binary-encoded string. The EncodingMode property
	// determines the binary-encoding. Possible encodings include base64 , base64_mime
	// , hex , and hex_lower . The HashAlgorithm property specifies the hash algorithm
	// for creating the data's hash during signing. The Charset property determines the
	// actual bytes that are hashed and signed.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #HashAlgorithm
	// 3: #Charset
	bool SignSbENC(CkStringBuilderW &sb, CkString &outStr);
	// Digitally signs the text contained in sb and returns a detached signature (
	// PKCS#7 signed-data ) as a binary-encoded string. The EncodingMode property
	// determines the binary-encoding. Possible encodings include base64 , base64_mime
	// , hex , and hex_lower . The HashAlgorithm property specifies the hash algorithm
	// for creating the data's hash during signing. The Charset property determines the
	// actual bytes that are hashed and signed.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #HashAlgorithm
	// 3: #Charset
	const wchar_t *signSbENC(CkStringBuilderW &sb);

	// Creates an asynchronous task to call the SignSbENC method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *SignSbENCAsync(CkStringBuilderW &sb);

	// Digitally signs a string and returns a the binary detached signature ( PKCS#7
	// signed-data ). The HashAlgorithm property specifies the hash algorithm for
	// creating the data's hash during signing. The Charset property determines the
	// actual bytes that are hashed and signed.
	bool SignString(const wchar_t *str, CkByteData &outData);

	// Creates an asynchronous task to call the SignString method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *SignStringAsync(const wchar_t *str);

	// Digitally signs a string and returns a detached signature ( PKCS#7 signed-data )
	// as a binary-encoded string. The EncodingMode property determines the
	// binary-encoding. Possible encodings include base64 , base64_mime , hex , and
	// hex_lower . The HashAlgorithm property specifies the hash algorithm for creating
	// the data's hash during signing. The Charset property determines the actual bytes
	// that are hashed and signed.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #HashAlgorithm
	// 3: #Charset
	bool SignStringENC(const wchar_t *str, CkString &outStr);
	// Digitally signs a string and returns a detached signature ( PKCS#7 signed-data )
	// as a binary-encoded string. The EncodingMode property determines the
	// binary-encoding. Possible encodings include base64 , base64_mime , hex , and
	// hex_lower . The HashAlgorithm property specifies the hash algorithm for creating
	// the data's hash during signing. The Charset property determines the actual bytes
	// that are hashed and signed.
	// 
	// References:
	// 1: #EncodingMode
	// 2: #HashAlgorithm
	// 3: #Charset
	const wchar_t *signStringENC(const wchar_t *str);

	// Creates an asynchronous task to call the SignStringENC method with the arguments
	// provided.
	// The caller is responsible for deleting the object returned by this method.
	CkTaskW *SignStringENCAsync(const wchar_t *str);

	// Implements RFC 6238: TOTP: Time-Based One-Time Password Algorithm. The arguments
	// to this method are:
	//     * secret: The shared secret in an enocded representation such as base64, hex,
	//     ascii, etc.
	//     * secretEnc: The encoding of the shared secret, such as base64
	//     * t0: The Unix time to start counting time steps. It is a number in
	//     decimal string form. A Unix time is the number of seconds elapsed since midnight
	//     UTC of January 1, 1970. 0 is a typical value used for this argument.
	//     * tNow: The current Unix time in decimal string form. To use the current
	//     system date/time, pass an empty string for this argument.
	//     * tStep: The time step in seconds. A typical value is 30. Note: Both client
	//     and server must pre-agree on the secret, the t0, and the tStep.
	//     * numDigits: The number of decimal digits to return.
	//     * truncOffset: Normally set this to -1 for dynamic truncation. Otherwise can be set
	//     in the range 0..15.
	//     * hashAlg: Normally set to sha1 . Can be set to other hash algorithms such as
	//     sha256 , sha512 , etc.
	bool Totp(const wchar_t *secret, const wchar_t *secretEnc, const wchar_t *t0, const wchar_t *tNow, int tStep, int numDigits, int truncOffset, const wchar_t *hashAlg, CkString &outStr);
	// Implements RFC 6238: TOTP: Time-Based One-Time Password Algorithm. The arguments
	// to this method are:
	//     * secret: The shared secret in an enocded representation such as base64, hex,
	//     ascii, etc.
	//     * secretEnc: The encoding of the shared secret, such as base64
	//     * t0: The Unix time to start counting time steps. It is a number in
	//     decimal string form. A Unix time is the number of seconds elapsed since midnight
	//     UTC of January 1, 1970. 0 is a typical value used for this argument.
	//     * tNow: The current Unix time in decimal string form. To use the current
	//     system date/time, pass an empty string for this argument.
	//     * tStep: The time step in seconds. A typical value is 30. Note: Both client
	//     and server must pre-agree on the secret, the t0, and the tStep.
	//     * numDigits: The number of decimal digits to return.
	//     * truncOffset: Normally set this to -1 for dynamic truncation. Otherwise can be set
	//     in the range 0..15.
	//     * hashAlg: Normally set to sha1 . Can be set to other hash algorithms such as
	//     sha256 , sha512 , etc.
	const wchar_t *totp(const wchar_t *secret, const wchar_t *secretEnc, const wchar_t *t0, const wchar_t *tNow, int tStep, int numDigits, int truncOffset, const wchar_t *hashAlg);

	// Adds an XML certificate vault to the object's internal list of sources to be
	// searched for certificates and private keys when encrypting/decrypting or
	// signing/verifying. Unlike the AddPfxSourceData and AddPfxSourceFile methods,
	// only a single XML certificate vault can be used. If UseCertVault is called
	// multiple times, only the last certificate vault will be used, as each call to
	// UseCertVault will replace the certificate vault provided in previous calls.
	bool UseCertVault(CkXmlCertVaultW &vault);

	// Verifies a detached digital signature against the original data contained in
	// data. Returns true if the signature is verified. The encodedSig holds a
	// binary-encoded PKCS#7 signed-data detached signature. The type of binary
	// encoding, such as base64, hex, or base64_mime, is determined by the EncodingMode
	// property.
	// 
	// Afterwards, you can retrieve signer certificates by using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// 
	// References:
	// 1: #EncodingMode
	// 2: #NumSignerCerts
	// 3: #LastSignerCert
	bool VerifyBdENC(CkBinDataW &data, const wchar_t *encodedSig);

	// Verifies a detached digital signature against the original binary data. Returns
	// true if the signature is verified.
	// 
	// Afterwards, you can retrieve signer certificates by using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// 
	// References:
	// 1: #NumSignerCerts
	// 2: #LastSignerCert
	bool VerifyBytes(CkByteData &data, CkByteData &sig);

	// Verifies a detached digital signature against the original binary data. Returns
	// true if the signature is verified. The encodedSig holds a binary-encoded PKCS#7
	// signed-data detached signature. The type of binary encoding, such as base64,
	// hex, or base64_mime, is determined by the EncodingMode property.
	// 
	// Afterwards, you can retrieve signer certificates by using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// 
	// References:
	// 1: #EncodingMode
	// 2: #NumSignerCerts
	// 3: #LastSignerCert
	bool VerifyBytesENC(CkByteData &data, const wchar_t *encodedSig);

	// This method is the same as VerifyP7S. Applications should instead call
	// VerifyP7S.
	// 
	// References:
	// 1: #VerifyP7S.
	bool VerifyDetachedSignature(const wchar_t *inFilename, const wchar_t *p7sFilename);

	// Verifies an opaque digital signature contained in a .p7m file and extracts the
	// original data to destPath. Returns true if the .p7m is validated and the original
	// data was extracted. Otherwise returns false.
	// 
	// Afterwards, you can retrieve signer certificates by using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// 
	// References:
	// 1: #NumSignerCerts
	// 2: #LastSignerCert
	bool VerifyP7M(const wchar_t *p7mPath, const wchar_t *destPath);

	// Verifies a detached digital signature contained in a .p7s file against the
	// original data contained in originalDataPath. Returns true if the signature is verified.
	// 
	// Afterwards, you can retrieve signer certificates by using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// 
	// References:
	// 1: #NumSignerCerts
	// 2: #LastSignerCert
	bool VerifyP7S(const wchar_t *originalDataPath, const wchar_t *p7sPath);

	// Verifies a detached digital signature against the original text contained in
	// sb. Returns true if the signature is verified. The encodedSig holds a
	// binary-encoded PKCS#7 signed-data detached signature. The type of binary
	// encoding, such as base64, hex, or base64_mime, is determined by the EncodingMode
	// property. The Charset property determines how the text in sb is converted to
	// bytes for signature validation.
	// 
	// Afterwards, you can retrieve signer certificates by using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// 
	// References:
	// 1: #EncodingMode
	// 2: #Charset
	// 3: #NumSignerCerts
	// 4: #LastSignerCert
	bool VerifySbENC(CkStringBuilderW &sb, const wchar_t *encodedSig);

	// Verifies a detached digital signature against the original text in str. Returns
	// true if the signature is verified. The sig holds a binary PKCS#7 signed-data
	// detached signature. The Charset property determines how the text in str is
	// converted to bytes for signature validation.
	// 
	// Afterwards, you can retrieve signer certificates by using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// 
	// References:
	// 1: #Charset
	// 2: #NumSignerCerts
	// 3: #LastSignerCert
	bool VerifyString(const wchar_t *str, CkByteData &sig);

	// Verifies a detached digital signature against the original text in str. Returns
	// true if the signature is verified. The encodedSig holds a binary-encoded PKCS#7
	// signed-data detached signature. The type of binary encoding, such as base64,
	// hex, or base64_mime, is determined by the EncodingMode property. The Charset
	// property determines how the text in str is converted to bytes for signature
	// validation.
	// 
	// Afterwards, you can retrieve signer certificates by using the NumSignerCerts
	// property and the LastSignerCert method.
	// 
	// 
	// References:
	// 1: #EncodingMode
	// 2: #Charset
	// 3: #NumSignerCerts
	// 4: #LastSignerCert
	bool VerifyStringENC(const wchar_t *str, const wchar_t *encodedSig);

	// Sets the XTS-AES mode data unit number. The data unit number is a 64-bit
	// unsigned integer. It is passed in as two 32-bit unsigned integers representing
	// the high and low 32-bits.
	// 
	// Setting the data unit number is one way of setting the tweak value. The tweak
	// value is 16 bytes in length and can alternatively be set by calling
	// XtsSetEncodedTweakValue.
	// 
	// This method sets the tweak value such that the first 8 bytes are composed of the
	// little-endian 64-bit data unit number, followed by 8 zero bytes.
	// 
	// (Unfortunately, Chilkat cannot use 64-bit integers in method arguments because
	// many older programming environments, such as ActiveX, do not support it. Chilkat
	// must present an identical and uniform API across all programming languages.)
	// 
	void XtsSetDataUnitNumber(unsigned long loUint32, unsigned long hiUint32);

	// Sets the XTS-AES mode tweak key from an encoded string. The encoding argument
	// can be set to any of the following strings: base64 , hex , quoted-printable ,
	// ascii , or url . The tweak key should be equal in size to the encryption key.
	// For example, to do 256-bit AES-XTS, the encryption key is 256-bits, and the
	// tweak key is also 256-bits.
	void XtsSetEncodedTweakKey(const wchar_t *key, const wchar_t *encoding);

	// Sets the XTS-AES mode tweak value from an encoded string. The encoding argument
	// can be set to any of the following strings: base64 , hex , quoted-printable ,
	// ascii , or url .
	// 
	// The tweak value must be 16 bytes in length. An application can set the initial
	// tweak value by calling this method, or by calling XtsSetDataUnitNumber (but not
	// both).
	// 
	void XtsSetEncodedTweakValue(const wchar_t *tweak, const wchar_t *encoding);





	// END PUBLIC INTERFACE


};
#if !defined(__sun__) && !defined(__sun)
#pragma pack (pop)
#endif
	
#endif
