DEFINITION MODULE diCrPKI; FROM SYSTEM IMPORT LOC; (* Copyright (C) 2002-13 DI Management Services Pty Limited All rights reserved. Last updated: Date: 2012-09-08 15:23:00 Revision: 3.9.4 *) <*/CALLS:WINDOWSCALL/DLLDEF/NOHIGH*> <*/ALIGN:8/NOPACK*> CONST (* 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; (* 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; (* 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; (* PKCS#5 Password-based encryption algorithms *) PKI_PBE_SHA_3DES = 0; PKI_PBE_MD5_DES = 1; PKI_PBE_MD2_DES = 2; PKI_PBE_SHA_DES = 3; (* Deprecated as of v3.2 *) PKI_PBES2_3DES = 4; (* Added v3.2 *) 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; PKI_HASH_MODE_TEXT = 10000H; (* 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 *) (* RSA key generation *) (* Changed from 0x10 in v3.3 *) PKI_KEYGEN_INDICATE = 1000000H; (* PKI_KEY_NODELAY removed in v3.3 *) PKI_KEY_FORMAT_PEM = 10000H; PKI_KEY_FORMAT_SSL = 20000H; (* Obsolete as of v3.8 *) PKI_PFX_NO_PRIVKEY = 10H; (* New in v3.8 *) PKI_PFX_PLAIN_CERT = 2000000H; (* New in v3.8 *) PKI_PFX_CLONE_KEY = 4000000H; (* New in v3.8 *) PKI_PFX_ALT_FORMAT = 100000H; 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; (* --0x1000000L Reserved for PKI_CMS_NO_INFLATE *) PKI_CMS_NO_OUTER = 2000000H; PKI_CMS_ALT_ALGID = 4000000H; PKI_CMS_BIGFILE = 8000000H; PKI_XML_RSAKEYVALUE = 0001H; PKI_XML_EXCLPRIVATE = 0010H; PKI_XML_HEXBINARY = 0100H; 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; (* Option flags *) 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; (* New in v3.9 *) PKI_X509_LDAP = 1000H; (* New in v3.9 *) PKI_X509_DECIMAL = 8000H; (* Flags for 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; (* Return values for CNV_CheckUTF *) 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; (* 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; (* Cipher file option flags - added [v3.7] *) 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 // added v3.2; withdrawn v3.4 *) (* Key derivation functions *) PKI_KDF_KDF2 = 000H; (* --0x300L Reserved for PKI_KDF_KDF3 *) (* General *) PKI_GEN_PLATFORM = 40H; (* GENERAL FUNCTIONS *) PROCEDURE PKI_Version(VAR reserved1:INTEGER; VAR reserved2:INTEGER): INTEGER; PROCEDURE PKI_LicenceType(reserved: INTEGER): INTEGER; PROCEDURE PKI_LastError(VAR szErrMsg: NOHIGH ARRAY OF CHAR; nMsgLen: INTEGER): INTEGER; PROCEDURE PKI_ErrorCode(): INTEGER; PROCEDURE PKI_ErrorLookup(VAR szErrMsg: NOHIGH ARRAY OF CHAR; nMsgLen: INTEGER; nErrCode: INTEGER): INTEGER; PROCEDURE PKI_CompileTime(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutputLen: INTEGER): INTEGER; PROCEDURE PKI_ModuleName(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutputLen: INTEGER; reserved: INTEGER): INTEGER; PROCEDURE PKI_PowerUpTests(nOptions: INTEGER): INTEGER; (* RFC5652 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 sSeed: 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 sSeed: 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 szX509File: NOHIGH ARRAY OF CHAR; VAR szRSAPrivateKey: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE CMS_ReadEnvDataToString(VAR szDataOut: NOHIGH ARRAY OF CHAR; nDataOutLen: INTEGER; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szX509File: NOHIGH ARRAY OF CHAR; VAR szRSAPrivateKey: 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 szRSAPrivateKey: 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 szRSAPrivateKey: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE CMS_MakeSigDataFromSigValue(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR pSigValue: NOHIGH ARRAY OF LOC; nSigLen: INTEGER; VAR pData: 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 szRSAPrivateKey: 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 szDataOut: NOHIGH ARRAY OF CHAR; nDataOutLen: INTEGER; VAR szFileIn: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE CMS_GetSigDataDigest(VAR szHexDigestOut: NOHIGH ARRAY OF CHAR; nDigestLen: INTEGER; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szX509File: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE CMS_VerifySigData(VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szX509File: 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; (* RSA KEY FUNCTIONS *) PROCEDURE RSA_MakeKeys(VAR szPubKeyFile: NOHIGH ARRAY OF CHAR; VAR szPVKFile: 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; nOutputLen: INTEGER; VAR szPVKFile: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE RSA_ReadPrivateKeyInfo(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutputLen: INTEGER; VAR szKeyFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE RSA_GetPrivateKeyFromPFX(VAR szOutputFile: NOHIGH ARRAY OF CHAR; VAR szPFXFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE RSA_ReadPublicKey(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutputLen: INTEGER; VAR szKeyFile: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE RSA_GetPublicKeyFromCert(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutputLen: 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; nOutputLen: INTEGER; VAR szKeyString: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE RSA_FromXMLString(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutputLen: 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; (* New in v3.8 *) 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; (* 'RAW' RSA ENCRYPTION/DECRYPTION FUNCTIONS *) PROCEDURE RSA_RawPublic(VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR szPublicKey64: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE RSA_RawPrivate(VAR lpData: NOHIGH ARRAY OF LOC; nDataLen: INTEGER; VAR szPrivateKey64: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; PROCEDURE RSA_EncodeMsg(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutputLen: INTEGER; VAR abMessage: NOHIGH ARRAY OF LOC; nMsgLen: INTEGER; nOptions: INTEGER): INTEGER; PROCEDURE RSA_DecodeMsg(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutputLen: INTEGER; VAR abInput: NOHIGH ARRAY OF LOC; nInputLen: INTEGER; nOptions: INTEGER): INTEGER; (* PKCS12 FILE FUNCTIONS *) PROCEDURE PFX_MakeFile(VAR szFileOut: NOHIGH ARRAY OF CHAR; VAR szCertFile: NOHIGH ARRAY OF CHAR; VAR szKeyFile: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; VAR szFriendlyName: NOHIGH ARRAY OF CHAR; options: INTEGER): INTEGER; PROCEDURE PFX_VerifySig(VAR szFileName: NOHIGH ARRAY OF CHAR; VAR szPassword: NOHIGH ARRAY OF CHAR; options: INTEGER): INTEGER; (* X509 CERTIFICATE FUNCTIONS *) PROCEDURE X509_MakeCert(VAR certfile: NOHIGH ARRAY OF CHAR; VAR issuerCert: NOHIGH ARRAY OF CHAR; VAR subjectPubkeyFile: NOHIGH ARRAY OF CHAR; VAR issuerPvkInfoFile: NOHIGH ARRAY OF CHAR; certnum: INTEGER; yearsvalid: INTEGER; VAR distName: NOHIGH ARRAY OF CHAR; VAR extensions: NOHIGH ARRAY OF CHAR; keyUsageFlags: INTEGER; VAR password: NOHIGH ARRAY OF CHAR; optionFlags: INTEGER): INTEGER; PROCEDURE X509_MakeCertSelf(VAR certfile: NOHIGH ARRAY OF CHAR; VAR epkfile: NOHIGH ARRAY OF CHAR; certnum: INTEGER; yearsvalid: INTEGER; VAR distName: NOHIGH ARRAY OF CHAR; VAR extensions: NOHIGH ARRAY OF CHAR; keyUsageFlags: INTEGER; VAR password: NOHIGH ARRAY OF CHAR; optionFlags: INTEGER): INTEGER; PROCEDURE X509_CertRequest(VAR reqfile: NOHIGH ARRAY OF CHAR; VAR epkfile: NOHIGH ARRAY OF CHAR; VAR distName: NOHIGH ARRAY OF CHAR; VAR reserved: NOHIGH ARRAY OF CHAR; VAR password: NOHIGH ARRAY OF CHAR; optionFlags: 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 szHash: NOHIGH ARRAY OF CHAR; nHashLen: 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 [new in v3.5] *) 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; PROCEDURE TDEA_BytesMode(VAR lpOutput: NOHIGH ARRAY OF LOC; VAR lpInput: NOHIGH ARRAY OF LOC; nBytes: 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; (* MESSAGE DIGEST HASH FUNCTIONS *) PROCEDURE HASH_Bytes(VAR lpDigest: NOHIGH ARRAY OF LOC; nDigLen: INTEGER; VAR lpMessage: NOHIGH ARRAY OF CHAR; nMsgLen: INTEGER; nOptions: INTEGER): INTEGER; PROCEDURE HASH_File(VAR lpDigest: NOHIGH ARRAY OF LOC; nDigLen: 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 lpDigest: NOHIGH ARRAY OF LOC; nDigLen: 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 input: NOHIGH ARRAY OF LOC; nBytes: INTEGER): INTEGER; PROCEDURE CNV_BytesFromB64Str(VAR output: NOHIGH ARRAY OF LOC; out_len: INTEGER; VAR input: NOHIGH ARRAY OF CHAR): INTEGER; PROCEDURE CNV_B64Filter(VAR szOutput: NOHIGH ARRAY OF CHAR; VAR input: NOHIGH ARRAY OF CHAR; len: INTEGER): INTEGER; PROCEDURE CNV_HexStrFromBytes(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR input: NOHIGH ARRAY OF LOC; nBytes: INTEGER): INTEGER; PROCEDURE CNV_BytesFromHexStr(VAR output: NOHIGH ARRAY OF LOC; out_len: INTEGER; VAR input: NOHIGH ARRAY OF CHAR): INTEGER; PROCEDURE CNV_HexFilter(VAR szOutput: NOHIGH ARRAY OF CHAR; VAR input: NOHIGH ARRAY OF CHAR; len: INTEGER): INTEGER; (* UTF-8 CONVERSION/CHECK FUNCTIONS *) (* [Note: the following three functions are deprecated as of v3.6] *) (* DEPRECATED *) PROCEDURE CNV_UTF8FromLatin1(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER; (* DEPRECATED *) PROCEDURE CNV_Latin1FromUTF8(VAR szOutput: NOHIGH ARRAY OF CHAR; nOutChars: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER; (* DEPRECATED *) PROCEDURE CNV_CheckUTF8(VAR szInput: NOHIGH ARRAY OF CHAR): INTEGER; (* [New in v3.6] *) 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; (* PEM/BINARY FILE CONVERSIONS *) PROCEDURE PEM_FileFromBinFile(VAR szOutputFile: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR; VAR szHeader: NOHIGH ARRAY OF CHAR; nLineLen: INTEGER): INTEGER; PROCEDURE PEM_FileFromBinFileEx(VAR szOutputFile: 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 szOutputFile: NOHIGH ARRAY OF CHAR; VAR szFileIn: NOHIGH ARRAY OF CHAR): INTEGER; (* RNG FUNCTIONS *) PROCEDURE RNG_Bytes(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutputLen: 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; nOutputLen: 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 szFileName: NOHIGH ARRAY OF CHAR; nOptions: INTEGER): INTEGER; (* PADDING FUNCTIONS *) PROCEDURE PAD_BytesBlock(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutputLen: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nBytes: INTEGER; nBlkLen: INTEGER; nOptions: INTEGER): INTEGER; PROCEDURE PAD_UnpadBytes(VAR lpOutput: NOHIGH ARRAY OF LOC; nOutputLen: INTEGER; VAR lpInput: NOHIGH ARRAY OF LOC; nBytes: INTEGER; nBlkLen: INTEGER; nOptions: INTEGER): INTEGER; PROCEDURE PAD_HexBlock(VAR szOutput: NOHIGH ARRAY OF CHAR; nMaxChars: INTEGER; VAR szInput: NOHIGH ARRAY OF CHAR; nBlkLen: INTEGER; nOptions: INTEGER): INTEGER; PROCEDURE PAD_UnpadHex(VAR szOutput: NOHIGH ARRAY OF CHAR; nMaxChars: 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; END diCrPKI.