616 lines
16 KiB
C
616 lines
16 KiB
C
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
||
|
//
|
||
|
// File: crmsgp.h
|
||
|
//
|
||
|
// Contents: Private Header for Cryptographic Message APIs
|
||
|
//
|
||
|
// History: 12-Dec-96 kevinr created
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef __WINCRMSG_P_INCLUDED__
|
||
|
#define __WINCRMSG_P_INCLUDED__
|
||
|
|
||
|
#if DBG
|
||
|
#define STATIC
|
||
|
#else
|
||
|
#define STATIC static
|
||
|
#endif
|
||
|
|
||
|
#ifndef OSS_CRYPT_ASN1
|
||
|
#define parameters_present AlgorithmIdentifier_parameters_present
|
||
|
#define unauthAttributes_present SignerInfo_unauthAttributes_present
|
||
|
#define certificates_present SignedData_certificates_present
|
||
|
#define crls_present SignedData_crls_present
|
||
|
#define date_present RecipientKeyIdentifier_date_present
|
||
|
#define other_present RecipientKeyIdentifier_other_present
|
||
|
#define content_present ContentInfo_content_present
|
||
|
#define authAttributes_present SignerInfoWithBlobs_authAttributes_present
|
||
|
|
||
|
#define issuerAndSerialNumber_chosen CertIdentifier_issuerAndSerialNumber_chosen
|
||
|
#define subjectKeyIdentifier_chosen CertIdentifier_subjectKeyIdentifier_chosen
|
||
|
|
||
|
#endif // OSS_CRYPT_ASN1
|
||
|
|
||
|
|
||
|
#define INFO_LEN_ALIGN(Len) ((Len + 7) & ~7)
|
||
|
|
||
|
#define STRUCT_CBSIZE(StructName, FieldName) \
|
||
|
(offsetof(StructName, FieldName) + sizeof(((StructName *) 0)->FieldName))
|
||
|
|
||
|
#define ICM_TAG_NULL 0x00
|
||
|
#define ICM_TAG_CONSTRUCTED 0x20
|
||
|
#define ICM_TAG_SEQ 0x30
|
||
|
#define ICM_TAG_SET 0x31
|
||
|
#define ICM_TAG_OCTETSTRING 0x04
|
||
|
#define ICM_TAG_NULL_OCTETS 0x05
|
||
|
#define ICM_TAG_CONTEXT_0 0x80
|
||
|
#define ICM_TAG_CONTEXT_1 0x81
|
||
|
|
||
|
#define ICM_TAG_CONSTRUCTED_CONTEXT_0 (ICM_TAG_CONSTRUCTED | ICM_TAG_CONTEXT_0)
|
||
|
#define ICM_TAG_CONSTRUCTED_CONTEXT_1 (ICM_TAG_CONSTRUCTED | ICM_TAG_CONTEXT_1)
|
||
|
|
||
|
#define ICM_LENGTH_INDEFINITE 0x80
|
||
|
|
||
|
|
||
|
// Streaming flags
|
||
|
#define ICMS_QUEUE_OUTPUT_FLAG 0x80000000
|
||
|
|
||
|
|
||
|
typedef struct _SIMPLEBLOBHEADER {
|
||
|
ALG_ID aiEncAlg;
|
||
|
} SIMPLEBLOBHEADER, *PSIMPLEBLOBHEADER;
|
||
|
|
||
|
#define SIZE_OSS_OID 16
|
||
|
|
||
|
extern ObjectID aoidMessages[];
|
||
|
|
||
|
extern const CRYPT_OBJID_TABLE aotSign[];
|
||
|
extern const DWORD COUNTOF_aotSign;
|
||
|
|
||
|
extern const LPSTR apszObjIdPKCS7[];
|
||
|
extern const DWORD COUNTOF_apszObjIdPKCS7;
|
||
|
|
||
|
extern const CRYPT_OBJID_TABLE aotContentEncryption[];
|
||
|
extern const DWORD COUNTOF_aotContentEncryption;
|
||
|
|
||
|
extern const LPSTR pszObjIdDataType;
|
||
|
extern const LPSTR pszObjIdContentType;
|
||
|
extern const LPSTR pszObjIdMessageDigest;
|
||
|
|
||
|
#define INVALID_ENCODING_SIZE (0xFFFFFFFE)
|
||
|
|
||
|
#define ZEROSTRUCT(arg) (memset( &arg, 0, sizeof(arg)))
|
||
|
|
||
|
typedef struct _ICM_BUFFER {
|
||
|
PBYTE pbData;
|
||
|
DWORD cbSize;
|
||
|
DWORD cbUsed;
|
||
|
DWORD cbDead;
|
||
|
} ICM_BUFFER, *PICM_BUFFER;
|
||
|
|
||
|
#define ICM_BUFFER_SIZE_INCR 1024
|
||
|
|
||
|
void *
|
||
|
WINAPI
|
||
|
ICM_Alloc(
|
||
|
IN size_t cbBytes);
|
||
|
|
||
|
void *
|
||
|
WINAPI
|
||
|
ICM_AllocZero(
|
||
|
IN size_t cb);
|
||
|
|
||
|
void *
|
||
|
WINAPI
|
||
|
ICM_ReAlloc(
|
||
|
IN void *pvOrg,
|
||
|
IN size_t cb);
|
||
|
|
||
|
void
|
||
|
WINAPI
|
||
|
ICM_Free(
|
||
|
IN void *pv);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_AppendBlob(
|
||
|
PCRYPT_DATA_BLOB pblob,
|
||
|
const BYTE *pbIn,
|
||
|
DWORD cbIn);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_CopyOssObjectIdentifier(
|
||
|
OUT ObjectID *poiDst,
|
||
|
IN ObjectID *poiSrc);
|
||
|
|
||
|
|
||
|
typedef struct _CONTENT_INFO {
|
||
|
LPSTR pszContentType;
|
||
|
CRYPT_DATA_BLOB content;
|
||
|
} CONTENT_INFO, *PCONTENT_INFO;
|
||
|
|
||
|
class CHashList;
|
||
|
class CBlobList;
|
||
|
class CSignerList;
|
||
|
class COssDecodeInfoList;
|
||
|
|
||
|
#ifdef CMS_PKCS7
|
||
|
class CHashNode;
|
||
|
typedef struct _SIGNER_ENCODE_DATA_INFO {
|
||
|
HCRYPTPROV hCryptProv;
|
||
|
DWORD dwKeySpec;
|
||
|
CHashNode *pHashNode;
|
||
|
} SIGNER_ENCODE_DATA_INFO, *PSIGNER_ENCODE_DATA_INFO;
|
||
|
#endif // CMS_PKCS7
|
||
|
|
||
|
typedef struct _SIGNED_DATA_INFO {
|
||
|
int version;
|
||
|
CBlobList *pAlgidList;
|
||
|
PCONTENT_INFO pci;
|
||
|
CBlobList *pCertificateList;
|
||
|
CBlobList *pCrlList;
|
||
|
CSignerList *pSignerList;
|
||
|
} SIGNED_DATA_INFO, *PSIGNED_DATA_INFO;
|
||
|
|
||
|
typedef struct _CRYPT_MSG_INFO {
|
||
|
CRITICAL_SECTION CriticalSection;
|
||
|
LONG lRefCnt;
|
||
|
HCRYPTPROV hCryptProv; // decode
|
||
|
BOOL fDefaultCryptProv; // decode
|
||
|
DWORD dwKeySpec; // key to use in CryptSignHash
|
||
|
DWORD dwEncodingType; // encode
|
||
|
DWORD dwMsgType;
|
||
|
DWORD dwFlags;
|
||
|
VOID *pvMsg;
|
||
|
BOOL fEncoding;
|
||
|
DWORD dwPhase;
|
||
|
LPSTR pszInnerContentObjID;
|
||
|
// signed or signed-and-enveloped
|
||
|
PSIGNED_DATA_INFO psdi;
|
||
|
// signed, digested or signed-and-enveloped
|
||
|
BOOL fDetached;
|
||
|
CHashList *pHashList;
|
||
|
#ifdef CMS_PKCS7
|
||
|
// encode signed
|
||
|
DWORD cSignerEncodeDataInfo;
|
||
|
PSIGNER_ENCODE_DATA_INFO rgSignerEncodeDataInfo;
|
||
|
#endif // CMS_PKCS7
|
||
|
// enveloped or signed-and-enveloped
|
||
|
HCRYPTKEY hkeyContentCrypt;
|
||
|
HCRYPTPROV hCryptProvContentCrypt;
|
||
|
CRYPT_DATA_BLOB Plaintext;
|
||
|
DWORD dwDecryptedRecipientIndex;
|
||
|
#ifdef CMS_PKCS7
|
||
|
DWORD dwDecryptedRecipientEncryptedKeyIndex;
|
||
|
#endif // CMS_PKCS7
|
||
|
#ifndef CMS_PKCS7
|
||
|
PBYTE pbEncryptParameters; // encoded and allocated
|
||
|
#endif // CMS_PKCS7
|
||
|
// streaming
|
||
|
PCMSG_STREAM_INFO pStreamInfo;
|
||
|
DWORD aflStream;
|
||
|
DWORD aflDecode;
|
||
|
BOOL fStreamCallbackOutput;
|
||
|
BOOL fStreamContentExtracted;
|
||
|
ICM_BUFFER bufDecode;
|
||
|
ICM_BUFFER bufEncode;
|
||
|
ICM_BUFFER bufOutput;
|
||
|
ICM_BUFFER bufCrypt;
|
||
|
ICM_BUFFER bufPendingCrypt;
|
||
|
DWORD cbBlockSize;
|
||
|
BOOL fBlockCipher;
|
||
|
DWORD cEndNullPairs; // decode
|
||
|
DWORD cInnerNullPairs; // decode
|
||
|
DWORD cLevelIndefiniteInner; // decode
|
||
|
DWORD cbDefiniteRemain; // decode
|
||
|
DWORD cbContentInfo; // decode
|
||
|
ObjectIdentifierType *pooid; // decode
|
||
|
DWORD aflOuter; // decode
|
||
|
DWORD aflInner; // decode
|
||
|
COssDecodeInfoList *plDecodeInfo; // decode
|
||
|
|
||
|
#ifdef CMS_PKCS7
|
||
|
// Optional OriginatorInfo for decoded CMS EnvelopedData
|
||
|
CBlobList *pCertificateList;
|
||
|
CBlobList *pCrlList;
|
||
|
|
||
|
// Misc allocations, such as, Algorithm parameters
|
||
|
CBlobList *pFreeList;
|
||
|
#endif // CMS_PKCS7
|
||
|
|
||
|
} CRYPT_MSG_INFO, *PCRYPT_MSG_INFO;
|
||
|
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Decoding progress flags
|
||
|
#define ICMS_DECODED_PREFIX 0x00000001
|
||
|
#define ICMS_DECODED_CONTENT_START 0x00000002
|
||
|
#define ICMS_DECODED_CONTENT 0x00000004
|
||
|
#define ICMS_DECODED_SUFFIX 0x00000008
|
||
|
|
||
|
#define ICMS_DECODED_CONTENTINFO_SEQ 0x00000010
|
||
|
#define ICMS_DECODED_CONTENTINFO_CONTENT 0x00000020
|
||
|
//#define ICMS_DECODED_ 0x00000040
|
||
|
//#define ICMS_DECODED_ 0x00000080
|
||
|
|
||
|
// Signed
|
||
|
#define ICMS_DECODED_SIGNED_SEQ 0x00000100
|
||
|
#define ICMS_DECODED_SIGNED_VERSION 0x00000200
|
||
|
#define ICMS_DECODED_SIGNED_DIGESTALGOS 0x00000400
|
||
|
#define ICMS_DECODED_SIGNED_CONTENTINFO 0x00000800
|
||
|
#define ICMS_DECODED_SIGNED_CERTIFICATES 0x00001000
|
||
|
#define ICMS_DECODED_SIGNED_CRLS 0x00002000
|
||
|
#define ICMS_DECODED_SIGNED_SIGNERINFOS 0x00004000
|
||
|
//#define ICMS_DECODED_ 0x00008000
|
||
|
|
||
|
// Enveloped
|
||
|
#define ICMS_DECODED_ENVELOPED_SEQ 0x00000100
|
||
|
#define ICMS_DECODED_ENVELOPED_VERSION 0x00000200
|
||
|
#define ICMS_DECODED_ENVELOPED_RECIPINFOS 0x00000400
|
||
|
#define ICMS_DECODED_ENVELOPED_ECISEQ 0x00000800
|
||
|
#define ICMS_DECODED_ENVELOPED_ECITYPE 0x00001000
|
||
|
#define ICMS_DECODED_ENVELOPED_ECIALGID 0x00002000
|
||
|
#define ICMS_DECODED_ENVELOPED_ECICONTENT 0x00004000
|
||
|
#ifdef CMS_PKCS7
|
||
|
#define ICMS_DECODED_ENVELOPED_ORIGINATOR 0x00008000
|
||
|
#define ICMS_DECODED_ENVELOPED_ATTR 0x00010000
|
||
|
#endif // CMS_PKCS7
|
||
|
//#define ICMS_DECODED_ 0x00020000
|
||
|
|
||
|
// Misc flags
|
||
|
#define ICMS_INNER_OCTETSTRING 0x00100000
|
||
|
#define ICMS_FINAL 0x00200000
|
||
|
#define ICMS_NONBARE 0x00400000
|
||
|
#define ICMS_RAW_DATA 0x00800000
|
||
|
#define ICMS_PROCESS_CONTENT_BEGUN 0x01000000
|
||
|
#define ICMS_PROCESS_CONTENT_DONE 0x02000000
|
||
|
|
||
|
|
||
|
// Used in streaming decode parsing
|
||
|
#define ICMS_TOKEN_INDEFINITE 1
|
||
|
#define ICMS_TOKEN_NULLPAIR 2
|
||
|
#define ICMS_TOKEN_DEFINITE 3
|
||
|
#define ICMS_TOKEN_INCOMPLETE 4
|
||
|
|
||
|
|
||
|
#if DBG
|
||
|
#define CMSGP_STREAM_CRYPT_BLOCK_COUNT 1
|
||
|
#else
|
||
|
#define CMSGP_STREAM_CRYPT_BLOCK_COUNT 128
|
||
|
#endif
|
||
|
#define CMSGP_STREAM_MAX_ENCRYPT_BUFFER 1024
|
||
|
|
||
|
|
||
|
typedef struct _OSS_DECODE_INFO {
|
||
|
int iPDU;
|
||
|
PVOID pvPDU;
|
||
|
} OSS_DECODE_INFO, *POSS_DECODE_INFO;
|
||
|
|
||
|
DEFINE_LIST_AND_NODE_CLASS( COssDecodeInfoList, COssDecodeInfoNode, OSS_DECODE_INFO);
|
||
|
|
||
|
|
||
|
DEFINE_LIST_AND_NODE_CLASS( CBlobList, CBlobNode, CRYPT_DATA_BLOB);
|
||
|
|
||
|
|
||
|
typedef struct _SIGNER_DATA_INFO {
|
||
|
CRYPT_DATA_BLOB blob;
|
||
|
CBlobList *pUnauthAttrList;
|
||
|
} SIGNER_DATA_INFO, *PSIGNER_DATA_INFO;
|
||
|
|
||
|
DEFINE_LIST_AND_NODE_CLASS( CSignerList, CSignerNode, SIGNER_DATA_INFO);
|
||
|
|
||
|
typedef struct _ICM_HASH_INFO {
|
||
|
#ifndef CMS_PKCS7
|
||
|
HCRYPTPROV hCryptProv;
|
||
|
#endif // CMS_PKCS7
|
||
|
DWORD dwAlgoCAPI;
|
||
|
HCRYPTHASH hHash;
|
||
|
CRYPT_HASH_BLOB HashBlob;
|
||
|
} ICM_HASH_INFO, *PICM_HASH_INFO;
|
||
|
|
||
|
DEFINE_LIST_AND_NODE_CLASS( CHashList, CHashNode, ICM_HASH_INFO);
|
||
|
|
||
|
|
||
|
extern HCRYPTASN1MODULE ICM_hAsn1Module;
|
||
|
__inline ASN1encoding_t ICM_GetEncoder(void)
|
||
|
{
|
||
|
return I_CryptGetAsn1Encoder(ICM_hAsn1Module);
|
||
|
}
|
||
|
__inline ASN1decoding_t ICM_GetDecoder(void)
|
||
|
{
|
||
|
return I_CryptGetAsn1Decoder(ICM_hAsn1Module);
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_GetLengthOctets(
|
||
|
IN DWORD cbContent,
|
||
|
OUT OPTIONAL PBYTE pbOut,
|
||
|
IN OUT PDWORD pcbOut);
|
||
|
|
||
|
VOID
|
||
|
WINAPI
|
||
|
ICM_SetLastError(
|
||
|
IN DWORD dwError);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_GetCAPI(
|
||
|
IN DWORD dwGroupId,
|
||
|
IN PCRYPT_ALGORITHM_IDENTIFIER pai,
|
||
|
OUT PDWORD pdwAlgId);
|
||
|
|
||
|
LONG
|
||
|
WINAPI
|
||
|
ICM_ObjIdToIndex(
|
||
|
IN ObjectID *poi);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_EqualObjectIDs(
|
||
|
IN ObjectID *poid1,
|
||
|
IN ObjectID *poid2);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_IsData(
|
||
|
IN LPSTR pszContentType);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_InsertTailBlob(
|
||
|
IN OUT CBlobList *pBlobList,
|
||
|
IN Any *pAny);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_InsertTailSigner(
|
||
|
IN OUT CSignerList *pSignerList,
|
||
|
IN Any *pAny);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_CreateHashList(
|
||
|
IN HCRYPTPROV hCryptProv,
|
||
|
IN OUT CHashList **ppHashList,
|
||
|
IN CBlobList *pAlgidList);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_UpdateListDigest(
|
||
|
IN CHashList *pHashList,
|
||
|
IN const BYTE *pbData,
|
||
|
IN DWORD cbData);
|
||
|
|
||
|
#ifdef CMS_PKCS7
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_IsDuplicateSignerEncodeHashAlgorithm(
|
||
|
IN PCMSG_SIGNER_ENCODE_INFO rgSigners,
|
||
|
IN PCMSG_SIGNER_ENCODE_INFO pNewSigner,
|
||
|
OUT OPTIONAL DWORD *pdwPrevIndex = NULL
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_FillSignerEncodeEncryptedDigests(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN BOOL fMaxLength);
|
||
|
|
||
|
#else
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_FillSignerEncryptedDigest(
|
||
|
IN SignerInfo *psi,
|
||
|
IN LPSTR pszInnerContentObjID,
|
||
|
IN CHashNode *pnHash,
|
||
|
IN DWORD dwKeySpec,
|
||
|
IN BOOL fMaxLength);
|
||
|
#endif // CMS_PKCS7
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_GetKeyBlockSize(
|
||
|
IN HCRYPTKEY hkey,
|
||
|
OUT PDWORD pcbBlock,
|
||
|
OUT OPTIONAL PBOOL pfBlockCipher);
|
||
|
|
||
|
#ifdef CMS_PKCS7
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_InitializeContentEncryptInfo(
|
||
|
IN PCMSG_ENVELOPED_ENCODE_INFO pEnvelopedEncodeInfo,
|
||
|
OUT PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo
|
||
|
);
|
||
|
|
||
|
void
|
||
|
WINAPI
|
||
|
ICM_FreeContentEncryptInfo(
|
||
|
IN PCMSG_ENVELOPED_ENCODE_INFO pEnvelopedEncodeInfo,
|
||
|
IN OUT PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_FillOssCmsRecipientInfos(
|
||
|
IN PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
|
||
|
IN OUT CmsRecipientInfos *poris,
|
||
|
#ifdef OSS_CRYPT_ASN1
|
||
|
IN OUT int *pEnvelopedDataVersion
|
||
|
#else
|
||
|
IN OUT ASN1int32_t *pEnvelopedDataVersion
|
||
|
#endif // OSS_CRYPT_ASN1
|
||
|
);
|
||
|
void
|
||
|
WINAPI
|
||
|
ICM_FreeOssCmsRecipientInfos(
|
||
|
IN OUT CmsRecipientInfos *poris
|
||
|
);
|
||
|
|
||
|
#else
|
||
|
|
||
|
// rgcbEncryptParameters[1] is the dwEncryptFlags passed to
|
||
|
// ICM_ExportEncryptKey
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_GenEncryptKey(
|
||
|
IN OUT HCRYPTPROV *phCryptProv,
|
||
|
IN PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt,
|
||
|
IN PVOID pvEncryptAuxInfo,
|
||
|
IN PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,
|
||
|
IN PFN_CMSG_ALLOC pfnAlloc,
|
||
|
OUT HCRYPTKEY *phEncryptKey,
|
||
|
OUT PBYTE *ppbEncryptParameters,
|
||
|
OUT DWORD rgcbEncryptParameters[2]);
|
||
|
|
||
|
// rgcbData[1] is the dwEncryptFlags passed from ICM_GenEncryptKey
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_ExportEncryptKey(
|
||
|
IN HCRYPTPROV hCryptProv,
|
||
|
IN HCRYPTKEY hEncryptKey,
|
||
|
IN PCERT_PUBLIC_KEY_INFO pPublicKeyInfo,
|
||
|
OUT PBYTE pbData,
|
||
|
IN OUT DWORD rgcbData[2]);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_ImportEncryptKey(
|
||
|
IN HCRYPTPROV hCryptProv,
|
||
|
IN DWORD dwKeySpec,
|
||
|
IN PCRYPT_ALGORITHM_IDENTIFIER paiEncrypt,
|
||
|
IN PCRYPT_ALGORITHM_IDENTIFIER paiPubKey,
|
||
|
IN PBYTE pbEncodedKey,
|
||
|
IN DWORD cbEncodedKey,
|
||
|
OUT HCRYPTKEY *phEncryptKey);
|
||
|
|
||
|
#endif // CMS_PKCS7
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_EncryptBuffer(
|
||
|
IN HCRYPTKEY hkeyEncrypt,
|
||
|
HCRYPTHASH hHash,
|
||
|
IN const BYTE *pbPlain,
|
||
|
IN DWORD cbPlain,
|
||
|
OUT PBYTE *ppbCipher,
|
||
|
OUT PDWORD pcbCipher);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_SetDecryptKey(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN HCRYPTKEY hkeyDecrypt);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_ExtractContent(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN const BYTE *pbDER,
|
||
|
IN DWORD cbDER,
|
||
|
OUT PDWORD pcbContent,
|
||
|
OUT const BYTE **ppbContent);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_OpenToEncodeData(
|
||
|
IN PCRYPT_MSG_INFO pcmi);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_UpdateEncodingData(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN PBYTE pbData,
|
||
|
IN DWORD cbData,
|
||
|
IN BOOL fFinal);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_UpdateDecodingInner(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN BOOL fFinal);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_UpdateDecoding(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN const BYTE *pbData,
|
||
|
IN DWORD cbData,
|
||
|
IN BOOL fFinal);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_OpenToEncodeSignedData(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN PCMSG_SIGNED_ENCODE_INFO psmei);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_UpdateEncodingSignedData(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN PBYTE pbData,
|
||
|
IN DWORD cbData,
|
||
|
IN BOOL fFinal);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_OpenToEncodeEnvelopedData(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN PCMSG_ENVELOPED_ENCODE_INFO pemei);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_UpdateEncodingEnvelopedData(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN const BYTE *pbPlain,
|
||
|
IN DWORD cbPlain,
|
||
|
IN BOOL fFinal);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
ICM_LengthSigned(
|
||
|
IN PCMSG_SIGNED_ENCODE_INFO psmei,
|
||
|
IN DWORD dwFlags,
|
||
|
IN LPSTR pszInnerContentObjID,
|
||
|
IN DWORD cbData,
|
||
|
OUT OPTIONAL PDWORD pcbContent);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
ICM_LengthEnveloped(
|
||
|
IN PCMSG_ENVELOPED_ENCODE_INFO pemei,
|
||
|
IN DWORD dwFlags,
|
||
|
IN OPTIONAL LPSTR pszInnerContentObjID,
|
||
|
IN DWORD cbData,
|
||
|
OUT OPTIONAL PDWORD pcbContent);
|
||
|
|
||
|
// OCTET STRING callback, used for streaming
|
||
|
typedef BOOL (WINAPI *POSTRCALLBACK)(
|
||
|
IN const void *pvArg,
|
||
|
IN OUT PICM_BUFFER pbuf,
|
||
|
IN OUT PDWORD pcbPending,
|
||
|
IN BOOL fFinal);
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICMS_HashContent(
|
||
|
IN PCRYPT_MSG_INFO pcmi,
|
||
|
IN PBYTE pbData,
|
||
|
IN DWORD cbData);
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
ICM_GetSignerIdFromSignerEncodeInfo(
|
||
|
IN PCMSG_SIGNER_ENCODE_INFO psei,
|
||
|
OUT PCERT_ID pSignerId);
|
||
|
|
||
|
#endif // __WINCRMSG_P_INCLUDED__
|