DEFINITION MODULE diCrPKI;
FROM SYSTEM IMPORT LOC;

<*/CALLS:WINDOWSCALL/DLLDEF/NOHIGH*>
<*/ALIGN:8/NOPACK*>

  (* $Id: diCrPKI.h $  *)
  (* For `CryptoSys PKI Pro` Version 11.0.0.
    Requires `diCrPKI.lib` and `diCrPKI.dll` for Win32/64
    or `diCrPKI.a` or `libcryptosyspki.so` for Linux.
   *)
  (* Copyright (C) 2002-16 DI Management Services Pty Limited
    <www.di-mgt.com.au> <www.cryptosys.net>
    All rights reserved.

  Last updated:
  $Date: 2016-05-20 19:29:00 $
  $Revision: 11.1.0 $
  *)


  CONST
    DICRPKI_H_ = 1;
  (* GENERAL CONSTANTS  *)
    PKI_DIR_ENCRYPT = 1;
    PKI_DIR_DECRYPT = 0;
  (* Synonyms for direction  *)
    ENCRYPT = 1;
    DECRYPT = 0;
  (* Maximum number of bytes in hash digest byte array  *)
    PKI_MAX_HASH_BYTES = 64;
    PKI_SHA1_BYTES = 20;
    PKI_SHA224_BYTES = 28;
    PKI_SHA256_BYTES = 32;
    PKI_SHA384_BYTES = 48;
    PKI_SHA512_BYTES = 64;
    PKI_MD5_BYTES = 16;
    PKI_MD2_BYTES = 16;
    PKI_RMD160_BYTES = 20;
    PKI_BTC160_BYTES = 20;
  (* Maximum number of hex characters in hash digest (excl null)  *)
    PKI_MAX_HASH_CHARS = 2*PKI_MAX_HASH_BYTES;
    PKI_SHA1_CHARS = 2*PKI_SHA1_BYTES;
    PKI_SHA224_CHARS = 2*PKI_SHA224_BYTES;
    PKI_SHA256_CHARS = 2*PKI_SHA256_BYTES;
    PKI_SHA384_CHARS = 2*PKI_SHA384_BYTES;
    PKI_SHA512_CHARS = 2*PKI_SHA512_BYTES;
    PKI_MD5_CHARS = 2*PKI_MD5_BYTES;
    PKI_MD2_CHARS = 2*PKI_MD2_BYTES;
    PKI_RMD160_CHARS = 2*PKI_RMD160_BYTES;
    PKI_BTC160_CHARS = 2*PKI_BTC160_BYTES;
  (* Synonym retained for backwards compatibility  *)
    PKI_MAX_HASH_LEN = PKI_MAX_HASH_CHARS;
  (* Encryption block sizes in bytes  *)
    PKI_BLK_TDEA_BYTES = 8;
    PKI_BLK_AES_BYTES = 16;
  (* Key size in bytes  *)
    PKI_KEYSIZE_TDEA_BYTES = 24;
    PKI_KEYSIZE_MAX_BYTES = 32;
  (* Required size for RNG seed file  *)
    PKI_RNG_SEED_BYTES = 64;
  (* OPTIONS  *)
    PKI_DEFAULT = 0;
  (* Signature algorithms  *)
    PKI_SIG_SHA1RSA = 0;
    PKI_SIG_MD5RSA = 1;
    PKI_SIG_MD2RSA = 2;
    PKI_SIG_SHA256RSA = 3;
    PKI_SIG_SHA384RSA = 4;
    PKI_SIG_SHA512RSA = 5;
    PKI_SIG_SHA224RSA = 6;
  (* New in [v11.0] ...  *)
    PKI_SIG_ECDSA_SHA1 = 10H;
    PKI_SIG_ECDSA_SHA224 = 20H;
    PKI_SIG_ECDSA_SHA256 = 30H;
    PKI_SIG_ECDSA_SHA384 = 40H;
    PKI_SIG_ECDSA_SHA512 = 50H;
  (* PKCS#5 Password-based encryption algorithms  *)
  (* Default  *)
    PKI_PBE_SHA_3DES = 0;
  (* Added in [v11.0] as simpler alternative to PKI_PBE_PBES2 + PKI_BC  *)
    PKI_PBE_PBKDF2_DESEDE3 = 1010H;
    PKI_PBE_PBKDF2_AES128 = 1020H;
    PKI_PBE_PBKDF2_AES192 = 1030H;
    PKI_PBE_PBKDF2_AES256 = 1040H;
  (* --0x1820L Reserved for PKI_PBE_SCRYPT_AES128 *)
  (* --0x1840L Reserved for PKI_PBE_SCRYPT_AES256 *)
  (* These next 3 changed in [v11.0] (by adding 0x8000000)  *)
  (* [not recommended for new implementations]  *)
    PKI_PBE_MD5_DES = 8000001H;
  (* [not recommended for new implementations]  *)
    PKI_PBE_MD2_DES = 8000002H;
  (* [not recommended for new implementations]  *)
    PKI_PBE_SHA_DES = 8000003H;
  (* Synonym retained for backwards compatibility  *)
    PKI_PBES2_3DES = PKI_PBE_PBKDF2_DESEDE3;
  (* Older alternative to specify PBES2 PBKDF2  *)
  (* Add PKI_BC_* option to specify encryption alg   *)
    PKI_PBE_PBES2 = 1000H;
  (* Message digest hash algorithms  *)
    PKI_HASH_SHA1 = 0;
    PKI_HASH_MD5 = 1;
    PKI_HASH_MD2 = 2;
    PKI_HASH_SHA256 = 3;
    PKI_HASH_SHA384 = 4;
    PKI_HASH_SHA512 = 5;
    PKI_HASH_SHA224 = 6;
  (* RIPEMD160  - New in [v11.0]  *)
    PKI_HASH_RMD160 = 7;
  (* BITCOIN160 - New in [v11.0]  *)
    PKI_HASH_BTC160 = 8;
    PKI_HASH_MODE_TEXT = 10000H;
  (* New in [v11.0]  *)
    PKI_HASH_DOUBLE = 20000H;
  (* HMAC algorithms  *)
  (* Added [v11.0] as convenient synonyms  *)
    PKI_HMAC_SHA1 = 0;
    PKI_HMAC_SHA224 = 6;
    PKI_HMAC_SHA256 = 3;
    PKI_HMAC_SHA384 = 4;
    PKI_HMAC_SHA512 = 5;
  (* nFermatExp values for RSA exponent  *)
    PKI_RSAEXP_EQ_3 = 0;
    PKI_RSAEXP_EQ_5 = 1;
    PKI_RSAEXP_EQ_17 = 2;
    PKI_RSAEXP_EQ_257 = 3;
    PKI_RSAEXP_EQ_65537 = 4;
  (* Return values for RSA_CheckKey  *)
    PKI_VALID_PUBLICKEY = 1;
    PKI_VALID_PRIVATEKEY = 0;
  (* BIT FLAGS  *)
  (* Key generation  *)
    PKI_KEYGEN_INDICATE = 1000000H;
    PKI_KEY_FORMAT_PEM = 10000H;
    PKI_KEY_FORMAT_SSL = 20000H;
  (* New in [v11.0]  *)
    PKI_KEY_TYPE_PKCS8 = 40000H;
    PKI_PFX_PLAIN_CERT = 2000000H;
    PKI_PFX_CLONE_KEY = 4000000H;
    PKI_PFX_ALT_FORMAT = 100000H;
  (* New in [v10.0]  *)
    PKI_PFX_P7CHAIN = 0400H;
    PKI_CMS_FORMAT_BASE64 = 10000H;
    PKI_CMS_EXCLUDE_CERTS = 0100H;
    PKI_CMS_EXCLUDE_DATA = 0200H;
    PKI_CMS_CERTS_ONLY = 0400H;
    PKI_CMS_INCLUDE_ATTRS = 0800H;
    PKI_CMS_ADD_SIGNTIME = 1000H;
    PKI_CMS_ADD_SMIMECAP = 2000H;
  (* New in [v10.0]  *)
    PKI_CMS_NO_INFLATE = 1000000H;
    PKI_CMS_NO_OUTER = 2000000H;
    PKI_CMS_ALT_ALGID = 4000000H;
    PKI_CMS_BIGFILE = 8000000H;
(*ifndef PKI_XML_DEFINED_*)

  CONST
    PKI_XML_RSAKEYVALUE = 0001H;
    PKI_XML_EXCLPRIVATE = 0010H;
  (* New in [v10.0]  *)
    PKI_XML_REQPRIVATE = 0020H;
    PKI_XML_HEXBINARY = 0100H;
(*endif*)
  (* PKI_XML_DEFINED_  *)
(*ifndef PKI_ENCOD_DEFINED_*)

  CONST
    PKI_EME_DEFAULT = 00H;
    PKI_EME_PKCSV1_5 = 00H;
    PKI_EME_OAEP = 10H;
    PKI_EMSIG_DEFAULT = 20H;
    PKI_EMSIG_PKCSV1_5 = 20H;
    PKI_EMSIG_DIGESTONLY = 1000H;
    PKI_EMSIG_DIGINFO = 2000H;
    PKI_EMSIG_ISO9796 = 100000H;
(*$endif*)
  (* PKI_ENCOD_DEFINED_  *)
(*$ifndef PKI_X509_DEFINED_*)
  (* X.509 Option flags  *)

  CONST
    PKI_X509_FORMAT_PEM = 10000H;
    PKI_X509_FORMAT_BIN = 20000H;
    PKI_X509_REQ_KLUDGE = 100000H;
    PKI_X509_NO_TIMECHECK = 200000H;
    PKI_X509_LATIN1 = 400000H;
    PKI_X509_UTF8 = 800000H;
    PKI_X509_AUTHKEYID = 1000000H;
    PKI_X509_NO_BASIC = 2000000H;
    PKI_X509_CA_TRUE = 4000000H;
    PKI_X509_VERSION1 = 8000000H;
    PKI_X509_LDAP = 1000H;
    PKI_X509_DECIMAL = 8000H;
  (* Flags for X.509 Key Usage  *)
    PKI_X509_KEYUSAGE_DIGITALSIGNATURE = 0001H;
    PKI_X509_KEYUSAGE_NONREPUDIATION = 0002H;
    PKI_X509_KEYUSAGE_KEYENCIPHERMENT = 0004H;
    PKI_X509_KEYUSAGE_DATAENCIPHERMENT = 0008H;
    PKI_X509_KEYUSAGE_KEYAGREEMENT = 0010H;
    PKI_X509_KEYUSAGE_KEYCERTSIGN = 0020H;
    PKI_X509_KEYUSAGE_CRLSIGN = 0040H;
    PKI_X509_KEYUSAGE_ENCIPHERONLY = 0080H;
    PKI_X509_KEYUSAGE_DECIPHERONLY = 0100H;
  (* Specific return values  *)
    PKI_X509_EXPIRED = -(1);
    PKI_X509_VALID_NOW = 0;
    PKI_X509_VERIFY_SUCCESS = 0;
    PKI_X509_VERIFY_FAILURE = -(1);
    PKI_X509_REVOKED = 1;
    PKI_X509_INVALID = 1;
(*endif*)
  (* PKI_X509_DEFINED_  *)
  (* Return values for CNV_CheckUTF  *)

  CONST
    PKI_CHRS_NOT_UTF8 = 0;
    PKI_CHRS_ALL_ASCII = 1;
    PKI_CHRS_ANSI8 = 2;
    PKI_CHRS_MULTIBYTE = 3;
  (* Options for CNV_ByteEncoding  *)
    PKI_CNV_UTF8_FROM_LATIN1 = 1;
    PKI_CNV_LATIN1_FROM_UTF8 = 2;
  (* Options for CNV_Num[To/From]Bytes - new in [v11.0]  *)
    PKI_CNV_BIG_ENDIAN = 0H;
    PKI_CNV_LITTLE_ENDIAN = 1H;
  (* Flags and return values for X.509 and CMS query functions  *)
    PKI_QUERY_GETTYPE = 100000H;
    PKI_QUERY_NUMBER = 1;
    PKI_QUERY_STRING = 2;
  (* Options for RNG functions  *)
    PKI_RNG_STRENGTH_112 = 00H;
    PKI_RNG_STRENGTH_128 = 01H;
  (* Block cipher (BC) algorithm options  *)
    PKI_BC_TDEA = 10H;    (* ) *)
    PKI_BC_3DES = 10H;    (* ) equiv. synonyms for Triple DES *)
    PKI_BC_DESEDE3 = 10H;    (* ) *)
    PKI_BC_AES128 = 20H;
    PKI_BC_AES192 = 30H;
    PKI_BC_AES256 = 40H;
  (* Block cipher mode options  *)
    PKI_MODE_ECB = 000H;
    PKI_MODE_CBC = 100H;
    PKI_MODE_OFB = 200H;
    PKI_MODE_CFB = 300H;
    PKI_MODE_CTR = 400H;
  (* Block cipher padding options  *)
    PKI_PAD_DEFAULT = 0H;
    PKI_PAD_NOPAD = 10000H;
    PKI_PAD_PKCS5 = 20000H;
    PKI_PAD_1ZERO = 30000H;
  (* Added [v11.1] *)
    PKI_PAD_AX923 = 40000H;
    PKI_PAD_W3C   = 50000H;
  (* Cipher file option flags - added [v11.1]  *)
    PKI_IV_PREFIX = 1000H;
    PKI_PAD_LEAVE = 2000H;
  (* Key transport algorithms  *)
    PKI_KT_RSAES_PKCS = 0000H;
  (* --0x1000L Reserved for PKI_KT_RSAES_OEAP *)
  (* --0x2000L Reserved for PKI_KT_RSA_KEM *)
  (* Key derivation functions  *)
    PKI_KDF_KDF2 = 000H;
  (* --0x300L Reserved for PKI_KDF_KDF3 *)
  (* --0x800L Reserved for PKI_KDF_SCRYPT *)
  (* ASN.1 utilities - added [v10.0]  *)
    PKI_ASN1_NOCOMMENTS = 100000H;
    PKI_ASN1_ADDLEVELS = 800000H;
    PKI_ASN1_TYPE_MAXCHARS = 64;
  (* SIG functions  *)
  (* Added [v10.0]  *)
    PKI_SIG_USEDIGEST = 1000H;
  (* Added [v11.0]  *)
    PKI_SIG_DETERMINISTIC = 2000H;
  (* Added [v11.0]  *)
    PKI_SIG_ASN1DER = 200000H;
  (* SMIME functions - added [v10.0]  *)
    PKI_SMIME_ENCODE_BASE64 = 10000H;
    PKI_SMIME_ENCODE_BINARY = 20000H;
    PKI_SMIME_ADDX = 100000H;
  (* Encoding options - added [v11.0]  *)
    PKI_ENCODE_HEX = 30000H;
    PKI_ENCODE_BASE64URL = 40000H;
  (* General  *)
    PKI_GEN_PLATFORM = 40H;
  (* Added [v11.0]  *)
    PKI_GEN_LEGACY = 8000000H;

  (* GENERAL FUNCTIONS  *)
  PROCEDURE PKI_Version(VAR nReserved1: INTEGER; VAR nReserved2: INTEGER): INTEGER;
  PROCEDURE PKI_LicenceType(nOptions: INTEGER): INTEGER;
  PROCEDURE PKI_LastError(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER): INTEGER;
  PROCEDURE PKI_ErrorCode(): INTEGER;
  PROCEDURE PKI_ErrorLookup(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; nErrCode: INTEGER): INTEGER;
  PROCEDURE PKI_CompileTime(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER): INTEGER;
  PROCEDURE PKI_ModuleName(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE PKI_PowerUpTests(nOptions: INTEGER): INTEGER;
  (* CRYPTOGRAPHIC MESSAGE SYNTAX (CMS) FUNCTIONS  *)
  PROCEDURE CMS_MakeEnvData(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szCertList: NOHIGH ARRAY OF CHAR; VAR szSeed: NOHIGH ARRAY OF CHAR; nSeedLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_MakeEnvDataFromString(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szDataIn: NOHIGH ARRAY OF CHAR; VAR szCertList: NOHIGH ARRAY OF CHAR; VAR szSeed: NOHIGH ARRAY OF CHAR; nSeedLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_ReadEnvData(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szPrivateKey: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_ReadEnvDataToString(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szPrivateKey: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_MakeSigData(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szCertList: NOHIGH ARRAY OF CHAR; VAR szPrivateKey: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_MakeSigDataFromString(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szDataIn: NOHIGH ARRAY OF CHAR; VAR szCertList: NOHIGH ARRAY OF CHAR; VAR szPrivateKey: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_MakeSigDataFromSigValue(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR lpSigValue: NOHIGH ARRAY OF LOC; nSigLen: INTEGER; VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR szCertList: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_MakeDetachedSig(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szHexDigest: NOHIGH ARRAY OF CHAR; VAR szCertList: NOHIGH ARRAY OF CHAR; VAR szPrivateKey: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_ReadSigData(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_ReadSigDataToString(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szFileIn: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_GetSigDataDigest(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szCertFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_VerifySigData(VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szHexDigest: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_QuerySigData(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szQuery: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_QueryEnvData(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szQuery: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* New in v10.0  *)
  PROCEDURE CMS_MakeComprData(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CMS_ReadComprData(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* RSA KEY FUNCTIONS  *)
  PROCEDURE RSA_MakeKeys(VAR szPubKeyFile: NOHIGH ARRAY OF CHAR; VAR szEpkFile: NOHIGH ARRAY OF CHAR; nBits: INTEGER; nExpFermat: INTEGER; nTests: INTEGER; nCount: INTEGER; VAR szPassword: NOHIGH ARRAY OF CHAR; VAR lpSeed: NOHIGH ARRAY OF CHAR; nSeedLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_ReadEncPrivateKey(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szEpkFile: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_ReadPrivateKeyInfo(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szKeyFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_GetPrivateKeyFromPFX(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szPfxFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_ReadPublicKey(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szPubKeyFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_GetPublicKeyFromCert(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szCertFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_SavePublicKey(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szKeyString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_SavePrivateKeyInfo(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szKeyString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_SaveEncPrivateKey(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szKeyString: NOHIGH ARRAY OF CHAR; nCount: INTEGER; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_KeyBits(VAR szKeyString: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE RSA_KeyBytes(VAR szKeyString: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE RSA_ToXMLString(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szKeyString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_FromXMLString(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szXmlString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_CheckKey(VAR szKeyString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_KeyHashCode(VAR szKeyString: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE RSA_KeyMatch(VAR szPrivateKey: NOHIGH ARRAY OF CHAR; VAR szPublicKey: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE RSA_ReadPrivateKeyFromPFX(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szPfxFile: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_PublicKeyFromPrivate(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szKeyString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* New in v10.0  *)
  PROCEDURE RSA_ReadAnyPrivateKey(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szKeyFileOrString: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_ReadAnyPublicKey(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szKeyFileOrString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_KeyValue(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szKeyString: NOHIGH ARRAY OF CHAR; VAR szFieldName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* 'RAW' RSA ENCRYPTION/DECRYPTION FUNCTIONS  *)
  PROCEDURE RSA_RawPublic(VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR szPublicKey: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_RawPrivate(VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR szPrivateKey: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_EncodeMsg(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE RSA_DecodeMsg(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER; nOptions: INTEGER): INTEGER;
  (* ELLIPTIC CURVE CRYPTOGRAPHY FUNCTIONS  *)
  (* New in v11.0  *)
  PROCEDURE ECC_MakeKeys(VAR szPubKeyFile: NOHIGH ARRAY OF CHAR; VAR szPriKeyFile: NOHIGH ARRAY OF CHAR; VAR szCurveName: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; VAR szParams: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE ECC_ReadKeyByCurve(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szHexKey: NOHIGH ARRAY OF CHAR; VAR szCurveName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE ECC_ReadPrivateKey(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szKeyFileOrString: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE ECC_ReadPublicKey(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szKeyFileOrString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE ECC_SaveEncKey(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szIntKeyString: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; VAR szParams: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE ECC_SaveKey(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szIntKeyString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE ECC_PublicKeyFromPrivate(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szIntKeyString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE ECC_QueryKey(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szIntKeyString: NOHIGH ARRAY OF CHAR; VAR szQuery: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* PKCS12 FILE FUNCTIONS  *)
  PROCEDURE PFX_MakeFile(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szEpkFile: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; VAR szFriendlyName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE PFX_VerifySig(VAR szFileName: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* X509 CERTIFICATE FUNCTIONS  *)
  PROCEDURE X509_MakeCert(VAR szNewCertFile: NOHIGH ARRAY OF CHAR; VAR szIssuerCertFile: NOHIGH ARRAY OF CHAR; VAR szSubjectPubKeyFile: NOHIGH ARRAY OF CHAR; VAR szIssuerEpkFile: NOHIGH ARRAY OF CHAR; nCertNum: INTEGER; nYearsValid: INTEGER; VAR szDistName: NOHIGH ARRAY OF CHAR; VAR szExtensions: NOHIGH ARRAY OF CHAR; nKeyUsageFlags: INTEGER; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_MakeCertSelf(VAR szNewCertFile: NOHIGH ARRAY OF CHAR; VAR szEpkFile: NOHIGH ARRAY OF CHAR; nCertNum: INTEGER; nYearsValid: INTEGER; VAR szDistName: NOHIGH ARRAY OF CHAR; VAR szExtensions: NOHIGH ARRAY OF CHAR; nKeyUsageFlags: INTEGER; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_CertRequest(VAR szNewReqFile: NOHIGH ARRAY OF CHAR; VAR szEpkFile: NOHIGH ARRAY OF CHAR; VAR szDistName: NOHIGH ARRAY OF CHAR; VAR szExtensions: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_VerifyCert(VAR szCertToVerify: NOHIGH ARRAY OF CHAR; VAR szIssuerCert: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_CertThumb(VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_CertIsValidNow(VAR szCertFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_CertIssuedOn(VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_CertExpiresOn(VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_CertSerialNumber(VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_HashIssuerAndSN(VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_CertIssuerName(VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szDelim: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_CertSubjectName(VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szDelim: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_GetCertFromP7Chain(VAR szNewCertFile: NOHIGH ARRAY OF CHAR; VAR szP7cFile: NOHIGH ARRAY OF CHAR; nIndex: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_GetCertFromPFX(VAR szNewCertFile: NOHIGH ARRAY OF CHAR; VAR szPfxFile: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_KeyUsageFlags(VAR szCertFile: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE X509_QueryCert(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szQuery: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_ReadStringFromFile(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szCertFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_SaveFileFromString(VAR szNewCertFile: NOHIGH ARRAY OF CHAR; VAR szCertString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_TextDump(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szCertFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_ValidatePath(VAR szCertListOrP7File: NOHIGH ARRAY OF CHAR; VAR szTrustedCert: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* X509 CRL FUNCTIONS  *)
  PROCEDURE X509_MakeCRL(VAR szCrlFile: NOHIGH ARRAY OF CHAR; VAR szIssuerCert: NOHIGH ARRAY OF CHAR; VAR szIssuerKeyFile: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; VAR szRevokedCertList: NOHIGH ARRAY OF CHAR; VAR szExtensions: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE X509_CheckCertInCRL(VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szCrlFile: NOHIGH ARRAY OF CHAR; VAR szCRLIssuerCert: NOHIGH ARRAY OF CHAR; VAR szDate: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* ONLINE CERTIFICATE STATUS PROTOCOL (OCSP) FUNCTIONS  *)
  PROCEDURE OCSP_MakeRequest(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szIssuerCert: NOHIGH ARRAY OF CHAR; VAR szCertFileOrSerialNum: NOHIGH ARRAY OF CHAR; VAR szExtensions: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE OCSP_ReadResponse(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szResponseFile: NOHIGH ARRAY OF CHAR; VAR szIssuerCert: NOHIGH ARRAY OF CHAR; VAR szExtensions: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* TRIPLE DES FUNCTIONS  *)
  PROCEDURE TDEA_HexMode(VAR szOutput: NOHIGH ARRAY OF CHAR; VAR szInput: NOHIGH ARRAY OF CHAR; VAR szKey: NOHIGH ARRAY OF CHAR; fEncrypt: INTEGER; VAR szMode: NOHIGH ARRAY OF CHAR; VAR szIV: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE TDEA_B64Mode(VAR szOutput: NOHIGH ARRAY OF CHAR; VAR szInput: NOHIGH ARRAY OF CHAR; VAR szKey: NOHIGH ARRAY OF CHAR; fEncrypt: INTEGER; VAR szMode: NOHIGH ARRAY OF CHAR; VAR szIV: NOHIGH ARRAY OF CHAR): INTEGER;
  (* [The following two functions are deprecated - use equivalent CIPHER_ functions] *)
  PROCEDURE TDEA_BytesMode(VAR lpOutput: NOHIGH ARRAY OF LOC; VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR lpKey: NOHIGH ARRAY OF LOC; fEncrypt: INTEGER; VAR szMode: NOHIGH ARRAY OF CHAR; VAR lpIV: NOHIGH ARRAY OF LOC): INTEGER;
  PROCEDURE TDEA_File(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR lpKey: NOHIGH ARRAY OF LOC; fEncrypt: INTEGER; VAR szMode: NOHIGH ARRAY OF CHAR; VAR lpIV: NOHIGH ARRAY OF LOC): INTEGER;
  (* GENERIC BLOCK CIPHER FUNCTIONS  *)
  PROCEDURE CIPHER_Bytes(fEncrypt: INTEGER; VAR lpOutput: NOHIGH ARRAY OF LOC; VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR lpKey: NOHIGH ARRAY OF LOC; VAR lpIV: NOHIGH ARRAY OF LOC; VAR szAlgAndMode: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CIPHER_File(fEncrypt: INTEGER; VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR lpKey: NOHIGH ARRAY OF LOC; VAR lpIV: NOHIGH ARRAY OF LOC; VAR szAlgAndMode: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CIPHER_Hex(fEncrypt: INTEGER; VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szData: NOHIGH ARRAY OF CHAR; VAR szKey: NOHIGH ARRAY OF CHAR; VAR szIV: NOHIGH ARRAY OF CHAR; VAR szAlgAndMode: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CIPHER_KeyWrap(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR lpKek: NOHIGH ARRAY OF LOC; nKekLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE CIPHER_KeyUnwrap(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR lpKek: NOHIGH ARRAY OF LOC; nKekLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE CIPHER_EncryptBytesPad(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER; VAR lpKey: NOHIGH ARRAY OF LOC; VAR lpIV: NOHIGH ARRAY OF LOC; VAR szAlgModePad: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CIPHER_DecryptBytesPad(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER; VAR lpKey: NOHIGH ARRAY OF LOC; VAR lpIV: NOHIGH ARRAY OF LOC; VAR szAlgModePad: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* New in [v11.1] *)
  PROCEDURE CIPHER_EncryptBytes2(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER; VAR lpKey: NOHIGH ARRAY OF LOC; nKeyLen: INTEGER;  VAR lpIV: NOHIGH ARRAY OF LOC; nIvLen: INTEGER; VAR szAlgModePad: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CIPHER_DecryptBytes2(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER; VAR lpKey: NOHIGH ARRAY OF LOC; nKeyLen: INTEGER;  VAR lpIV: NOHIGH ARRAY OF LOC; nIvLen: INTEGER; VAR szAlgModePad: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE CIPHER_FileEncrypt(VAR szFileOut: NOHIGH ARRAY OF LOC; VAR szFileIn: NOHIGH ARRAY OF LOC; VAR lpKey: NOHIGH ARRAY OF LOC; nKeyLen: INTEGER; VAR lpIV: NOHIGH ARRAY OF LOC; nIvLen: INTEGER; VAR szAlgModePad: NOHIGH ARRAY OF LOC; nOptions: INTEGER): INTEGER;
  PROCEDURE CIPHER_FileDecrypt(VAR szFileOut: NOHIGH ARRAY OF LOC; VAR szFileIn: NOHIGH ARRAY OF LOC; VAR lpKey: NOHIGH ARRAY OF LOC; nKeyLen: INTEGER; VAR lpIV: NOHIGH ARRAY OF LOC; nIvLen: INTEGER; VAR szAlgModePad: NOHIGH ARRAY OF LOC; nOptions: INTEGER): INTEGER;

  (* MESSAGE DIGEST HASH FUNCTIONS  *)
  PROCEDURE HASH_Bytes(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpMessage: NOHIGH ARRAY OF CHAR; nMsgLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE HASH_File(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR szFileName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE HASH_HexFromBytes(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR lpMessage: NOHIGH ARRAY OF CHAR; nMsgLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE HASH_HexFromFile(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szFileName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE HASH_HexFromHex(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szMsgHex: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* HMAC FUNCTIONS  *)
  PROCEDURE HMAC_Bytes(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpMessage: NOHIGH ARRAY OF CHAR; nMsgLen: INTEGER; VAR lpKey: NOHIGH ARRAY OF CHAR; nKeyLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE HMAC_HexFromBytes(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR lpMessage: NOHIGH ARRAY OF CHAR; nMsgLen: INTEGER; VAR lpKey: NOHIGH ARRAY OF CHAR; nKeyLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE HMAC_HexFromHex(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szMsgHex: NOHIGH ARRAY OF CHAR; VAR szKeyHex: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* BASE64 AND HEX CONVERSION FUNCTIONS  *)
  PROCEDURE CNV_B64StrFromBytes(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER): INTEGER;
  PROCEDURE CNV_BytesFromB64Str(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE CNV_B64Filter(VAR szOutput: NOHIGH ARRAY OF CHAR; VAR szInput: NOHIGH ARRAY OF CHAR; nStrLen: INTEGER): INTEGER;
  PROCEDURE CNV_HexStrFromBytes(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER): INTEGER;
  PROCEDURE CNV_BytesFromHexStr(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE CNV_HexFilter(VAR szOutput: NOHIGH ARRAY OF CHAR; VAR szInput: NOHIGH ARRAY OF CHAR; nStrLen: INTEGER): INTEGER;
  (* BASE58 FUNCTIONS  *)
  (* New in v11.0  *)
  PROCEDURE CNV_Base58FromBytes(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER): INTEGER;
  PROCEDURE CNV_Base58ToBytes(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER;
  (* UTF-8 CONVERSION/CHECK FUNCTIONS  *)
  (* [Note: the following three functions are deprecated]  *)
  PROCEDURE CNV_UTF8FromLatin1(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE CNV_Latin1FromUTF8(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE CNV_CheckUTF8(VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER;

  PROCEDURE CNV_UTF8BytesFromLatin1(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE CNV_Latin1FromUTF8Bytes(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nBytes: INTEGER): INTEGER;
  PROCEDURE CNV_CheckUTF8Bytes(VAR lpInput: NOHIGH ARRAY OF LOC; nBytes: INTEGER): INTEGER;
  PROCEDURE CNV_CheckUTF8File(VAR szFileName: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE CNV_ByteEncoding(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nBytes: INTEGER; nOptions: INTEGER): INTEGER;
  (* MISC BYTE UTILITIES  *)
  (* New in v11.0  *)
  PROCEDURE CNV_ReverseBytes(VAR lpOutput: NOHIGH ARRAY OF LOC; VAR lpInput: NOHIGH ARRAY OF LOC; nBytes: INTEGER): INTEGER;
  PROCEDURE CNV_NumToBytes(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; nNumber: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE CNV_NumFromBytes(VAR lpInput: NOHIGH ARRAY OF LOC; nBytes: INTEGER; nOptions: INTEGER): INTEGER;
  (* PEM/BINARY FILE CONVERSIONS  *)
  PROCEDURE PEM_FileFromBinFile(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szHeader: NOHIGH ARRAY OF CHAR; nLineLen: INTEGER): INTEGER;
  PROCEDURE PEM_FileFromBinFileEx(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szHeader: NOHIGH ARRAY OF CHAR; nLineLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE PEM_FileToBinFile(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR): INTEGER;
  (* RNG FUNCTIONS  *)
  PROCEDURE RNG_Bytes(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpSeed: NOHIGH ARRAY OF CHAR; nSeedLen: INTEGER): INTEGER;
  PROCEDURE RNG_Number(nLower: INTEGER; nUpper: INTEGER): INTEGER;
  PROCEDURE RNG_BytesWithPrompt(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR szPrompt: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RNG_Initialize(VAR szSeedFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RNG_MakeSeedFile(VAR szSeedFile: NOHIGH ARRAY OF CHAR; VAR szPrompt: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RNG_UpdateSeedFile(VAR szSeedFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE RNG_Test(VAR szFileOut: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* PADDING FUNCTIONS  *)
  PROCEDURE PAD_BytesBlock(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER; nBlkLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE PAD_UnpadBytes(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER; nBlkLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE PAD_HexBlock(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR; nBlkLen: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE PAD_UnpadHex(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR; nBlkLen: INTEGER; nOptions: INTEGER): INTEGER;
  (* MISC UTILITIES  *)
  PROCEDURE WIPE_File(VAR szFileName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE WIPE_Data(VAR lpData: NOHIGH ARRAY OF CHAR; nDataLen: INTEGER): INTEGER;
  PROCEDURE PWD_Prompt(VAR szPassword: NOHIGH ARRAY OF CHAR; nPwdLen: INTEGER; VAR szCaption: NOHIGH ARRAY OF CHAR): INTEGER;
  PROCEDURE PWD_PromptEx(VAR szPassword: NOHIGH ARRAY OF CHAR; nPwdLen: INTEGER; VAR szCaption: NOHIGH ARRAY OF CHAR; VAR szPrompt: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* PASSWORD-BASED ENCRYPTION PROTOTYPES  *)
  PROCEDURE PBE_Kdf2(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutBytes: INTEGER; VAR lpPwd: NOHIGH ARRAY OF LOC; nPwdLen: INTEGER; VAR lpSalt: NOHIGH ARRAY OF LOC; nSaltLen: INTEGER; nCount: INTEGER; nOptions: INTEGER): INTEGER;
  PROCEDURE PBE_Kdf2Hex(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; dkBytes: INTEGER; VAR szPwd: NOHIGH ARRAY OF CHAR; VAR szSaltHex: NOHIGH ARRAY OF CHAR; nCount: INTEGER; nOptions: INTEGER): INTEGER;
  (* ASN.1 UTILITIES  *)
  (* [New in v10.0]  *)
  PROCEDURE ASN1_TextDump(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileOrPEMString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE ASN1_Type(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szFileOrPEMString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* SIGNATURE FUNCTIONS  *)
  (* [New in v10.0]  *)
  PROCEDURE SIG_SignData(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR szKeyFile: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; VAR szAlgName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE SIG_SignFile(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szDataFile: NOHIGH ARRAY OF CHAR; VAR szKeyFile: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; VAR szAlgName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE SIG_VerifyData(VAR szSignature: NOHIGH ARRAY OF CHAR; VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR szCertOrKeyFile: NOHIGH ARRAY OF CHAR; VAR szAlgName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE SIG_VerifyFile(VAR szSignature: NOHIGH ARRAY OF CHAR; VAR szDataFile: NOHIGH ARRAY OF CHAR; VAR szCertOrKeyFile: NOHIGH ARRAY OF CHAR; VAR szAlgName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  (* SMIME FUNCTIONS  *)
  (* [New in v10.0]  *)
  PROCEDURE SMIME_Wrap(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szFeatures: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE SMIME_Extract(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;
  PROCEDURE SMIME_Query(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szQuery: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER;

(*$endif*)


END diCrPKI.