diff options
author | Andrew Shadura <andrewsh@debian.org> | 2015-11-01 19:41:28 +0100 |
---|---|---|
committer | Andrew Shadura <andrewsh@debian.org> | 2015-11-01 19:41:28 +0100 |
commit | 61c1a106bd81794f48e4cd85bae129f9270279e8 (patch) | |
tree | 29ecf644c4a13c2645bd8067e66ae8944dd2daf9 /libdigidoc/DigiDocObj.h |
libdigidoc (3.10.1.1208-1) unstable; urgency=medium
* Initial upload (Closes: #658300).
# imported from the archive
Diffstat (limited to 'libdigidoc/DigiDocObj.h')
-rw-r--r-- | libdigidoc/DigiDocObj.h | 1291 |
1 files changed, 1291 insertions, 0 deletions
diff --git a/libdigidoc/DigiDocObj.h b/libdigidoc/DigiDocObj.h new file mode 100644 index 0000000..4236901 --- /dev/null +++ b/libdigidoc/DigiDocObj.h @@ -0,0 +1,1291 @@ +#ifndef __DIGIDOC_OBJ_H__ +#define __DIGIDOC_OBJ_H__ +//================================================== +// FILE: DigiDocGen.h +// PROJECT: Digi Doc +// DESCRIPTION: DigiDoc helper routines for accessing dogidoc data +// AUTHOR: Veiko Sinivee, S|E|B IT Partner Estonia +//================================================== +// Copyright (C) AS Sertifitseerimiskeskus +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// GNU Lesser General Public Licence is available at +// http://www.gnu.org/copyleft/lesser.html +//==========< HISTORY >============================= +// 26.04.2006 Veiko Sinivee +// Creation +//================================================== + +#include "DigiDocDefs.h" +#include "DigiDocMem.h" +#include <openssl/x509.h> +#include <openssl/ocsp.h> + +//==========< DigiDoc object structure >======================== + +#ifdef __cplusplus +extern "C" { +#endif + + +// contains the signed attributes of each document file entry +typedef struct DocInfo_st { + char* szDocId; // document id + char* szDigestType; // digest method used + byte* szDigest; // digest value + int nDigestLen; // digest value length + byte* szMimeDigest; // digest value + int nMimeDigestLen; // digest value length +} DocInfo; + +typedef struct SignatureProductionPlace_st { + char* szCity; + char* szStateOrProvince; + char* szPostalCode; + char* szCountryName; +} SignatureProductionPlace; + +typedef struct SignerRole_st { + int nClaimedRoles; + char** pClaimedRoles; + int nCertifiedRoles; + char** pCertifiedRoles; +} SignerRole; + +typedef struct DigestValue_st { + char* szDigestMethod; + DigiDocMemBuf mbufDigestValue; +} DigestValue; + /* +typedef struct ReferenceInfo_st { + char* szId; + char* szUri; + char* szType; + DigestValue digestValue; +} ReferenceInfo; + */ +typedef struct SignatureValue_st { + char* szId; + char* szType; + DigiDocMemBuf mbufSignatureValue; +} SignatureValue; + +#define CERTID_TYPE_UNKNOWN 0 +#define CERTID_TYPE_SIGNERS_CERTID 1 +#define CERTID_TYPE_RESPONDERS_CERTID 2 +#define CERTID_TYPE_TSA_CERTID 3 +//AM 12.03.08 +#define CERTID_VALUE_CA_CERT 4 + + +typedef struct CertID_st { + int nType; // internal CertID type: + char* szId; + char* szIssuerSerial; + char* szIssuerName; + DigestValue* pDigestValue; + //AM 24.04.08 + char* szDigestType; // digest method used +} CertID; + +typedef struct CertIDList_st { + int nCertIDs; + CertID** pCertIDs; +} CertIDList; + +#define CERTID_VALUE_UNKNOWN 0 +#define CERTID_VALUE_SIGNERS_CERT 1 +#define CERTID_VALUE_RESPONDERS_CERT 2 +#define CERTID_VALUE_TSA_CERT 3 +//AM 12.03.08 +#define CERTID_TYPE_CA_CERTID 4 +#define ERR_VER_1_0 300 + +typedef struct CertValue_st { + int nType; + char* szId; + X509* pCert; +} CertValue; + +typedef struct CertValueList_st { + int nCertValues; + CertValue** pCertValues; +} CertValueList; + +// data file entry for each data file +typedef struct DataFile_st { + char* szId; // data file id + char* szFileName; // signed doc file name + char* szMimeType; // date file mime type + char* szContentType; // EMBEDDED or EMBEDDED_BASE64 + long nSize; // file size (unencoded) + char* szDigestType; // digest type + DigiDocMemBuf mbufDigest; // real DataFile digest value + DigiDocMemBuf mbufWrongDigest; // bad digest calculated in some versions + DigiDocMemBuf mbufDetachedDigest; // detached file digest + int nAttributes; // number of other attributes + char* szCharset; // datafile initial codepage + char** pAttNames; // other attribute names + char** pAttValues; // other attribute values + DigiDocMemBuf mbufContent; +} DataFile; + +typedef struct NotaryInfo_sk { + char* szId; // Notary id + char* szNotType; // notary info type (OCSP-1.0) + char* timeProduced; // producedAt + char* szProducedAt; // producedAt in xml + int nRespIdType; // RESP_ID_NAME, RESP_ID_KEY + DigiDocMemBuf mbufRespId; // responder id value + char* szDigestType; // digest method used + // notaries personal signature + char* szSigType; // signature type used + DigiDocMemBuf mbufOcspDigest; // OCSP response digest (as in XML + DigiDocMemBuf mbufOcspResponse; // OCSP response (in memory held in DER) +} NotaryInfo; + +// signature info for each user signature +typedef struct SignatureInfo_st { + char* szId; // signature id + int nDocs; // number of separate documents signed + DocInfo** pDocs; // info for each signed document + char* szTimeStamp; // signature timestamp in format "YYYY-MM-DDTHH:MM:SSZ" + DigestValue *pSigPropDigest; + DigestValue *pSigPropRealDigest; + DigestValue *pSigInfoRealDigest; + SignatureValue *pSigValue; // RSA+SHA1 signature value + X509* pX509Cert; // X509Cert certificate (used internally for data during loading) + SignatureProductionPlace sigProdPlace; + SignerRole signerRole; + DigiDocMemBuf mbufOrigContent; + NotaryInfo* pNotary; + CertIDList *pCertIDs; + CertValueList *pCertValues; + //AM 24.04.08 + char* szDigestType; // digest method used + int nErr1; // possible parse error codes, need many? +} SignatureInfo; + + + +typedef struct SignedDoc_st { + char* szFormat; // data format name + char* szFormatVer; // data format version + int nDataFiles; + DataFile** pDataFiles; + int nSignatures; + SignatureInfo** pSignatures; + //AM 14.03.08 + char* szFileName; + //AM 13.05.08 + char* szProfile; +} SignedDoc; + +//============================================================ +// Sets a string element of a struct to a new value +// dest - element pointer +// value - new value +// valLen - value length (use -1 for null terminated strings) +//============================================================ +EXP_OPTION int setString(char** dest, const char* value, int valLen); + +// creates a new <SignedDoc> structure +EXP_OPTION int SignedDoc_new(SignedDoc **newSignedDoc, const char* format, const char* version); +// cleanup signed doc data +EXP_OPTION void SignedDoc_free(SignedDoc* pSigDoc); + +//======================< DataFile functions >============================= + +// returns the number of data files +EXP_OPTION int getCountOfDataFiles(const SignedDoc* pSigDoc); +// returns the n-th DataFile object +EXP_OPTION DataFile* getDataFile(const SignedDoc* pSigDoc, int nIdx); +// returns the last DataFile object +EXP_OPTION DataFile* ddocGetLastDataFile(const SignedDoc* pSigDoc); +// Retrieve and convert DataFile Filename atribute and convert +EXP_OPTION int ddocGetDataFileFilename(SignedDoc* pSigDoc, const char* szDocId, void** ppBuf, int* pLen); +// returns the DataFile object with the given id +EXP_OPTION DataFile* getDataFileWithId(const SignedDoc* pSigDoc, const char* id); +// add a <DataFile> block to <SignedDoc> +// use NULL for any parameter you don't have the value +// use NULL for id if you want to auto-calculate it (recommended!!!) +EXP_OPTION int DataFile_new(DataFile **newDataFile, SignedDoc* pSigDoc, const char* id, + const char* filename, const char* contentType, + const char* mime, long size, + const byte* digest, int digLen, + const char* digType, const char* szCharset); +// cleanup DataFile memory +EXP_OPTION void DataFile_free(DataFile* pDataFile); + +// Removes this DataFile from signed doc and frees it's memory +EXP_OPTION int DataFile_delete(SignedDoc* pSigDoc, const char* id); + +//-------------------------------------------------- +// Accessor for Digest atribute of DataFile object. +// pDataFile - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION DigiDocMemBuf* ddocDataFile_GetDigestValue(DataFile* pDataFile); + +//-------------------------------------------------- +// Mutatoror for Digest atribute of DataFile object. +// pDataFile - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// len - length of value in bytes [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocDataFile_SetDigestValue(DataFile* pDataFile, + const char* value, long len); + +//-------------------------------------------------- +// Accessor for DetachedDigest atribute of DataFile object. +// pDataFile - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION DigiDocMemBuf* ddocDataFile_GetDetachedDigestValue(DataFile* pDataFile); + +//-------------------------------------------------- +// Mutatoror for DetachedDigest atribute of DataFile object. +// pDataFile - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// len - length of value in bytes [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocDataFile_SetDetachedDigestValue(DataFile* pDataFile, + const char* value, long len); + +//-------------------------------------------------- +// Accessor for WrongDigest atribute of DataFile object. +// pDataFile - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION DigiDocMemBuf* ddocDataFile_GetWrongDigestValue(DataFile* pDataFile); + +//-------------------------------------------------- +// Mutatoror for WrongDigest atribute of DataFile object. +// pDataFile - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// len - length of value in bytes [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocDataFile_SetWrongDigestValue(DataFile* pDataFile, + const char* value, long len); + +// Returns number of DataFile attributes +EXP_OPTION int getCountOfDataFileAttributes(const DataFile* pDataFile); +// Adds an attribute to data file +EXP_OPTION int addDataFileAttribute(DataFile* pDataFile, const char* name, + const char* value); +// Gets an attribute of a data file +EXP_OPTION int getDataFileAttribute(DataFile* pDataFile, int idx, char** name, char** value); + +// get datafile cahed data +EXP_OPTION int ddocGetDataFileCachedData(SignedDoc* pSigDoc, const char* szDocId, void** ppBuf, long* pLen); + +// apppends DataFile content to cache +EXP_OPTION void ddocAppendDataFileData(DataFile* pDf, int maxLen, void* data, int len, int isBase64); + +// calculates file size and digest and store in the +// given DataFile object +EXP_OPTION int calculateDataFileSizeAndDigest(SignedDoc* pSigDoc, const char* id, + const char* filename, int digType); + +//-------------------------------------------------- +// Creates new DataFile and assigns contet from memory +// ppDataFile address of pointer to return new DataFile object +// pSigDoc - SignedDoc object +// id - new DataFile id. Use NULL for default +// filename - filename +// contentType - content type +// mime - mime type +// pData - address of DataFile content to be assigned +// size - length of data in bytes +//-------------------------------------------------- +EXP_OPTION int createDataFileInMemory(DataFile **ppDataFile, SignedDoc* pSigDoc, const char* id, + const char* filename, const char* contentType, + const char* mime, const char* pData, long size); + +//======================< DigestValue functions >============================= + +//-------------------------------------------------- +// "Constructor" of DigestValue object +// ppDigestValue - address of buffer for newly allocated object [REQUIRED] +// szDigestMethod - digest method [OPTIONAL] +// szDigVal/lDigLen - digest value and length [OPTIONAL] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocDigestValue_new(DigestValue** ppDigestValue, + const char* szDigestMethod, + void* szDigVal, long lDigLen); + +//-------------------------------------------------- +// "Destructor" of DigestValue object +// pDigestValue - address of object to be deleted [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocDigestValue_free(DigestValue* pDigestValue); + +//-------------------------------------------------- +// Accessor for DigestMethod atribute of DigestValue object. +// pDigestValue - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION const char* ddocDigestValue_GetDigestMethod(DigestValue* pDigestValue); + +//-------------------------------------------------- +// Mutatoror for DigestMethod atribute of DigestValue object. +// pDigestValue - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocDigestValue_SetDigestMethod(DigestValue* pDigestValue, const char* value); + +//-------------------------------------------------- +// Accessor for DigestValue atribute of DigestValue object. +// pDigestValue - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION DigiDocMemBuf* ddocDigestValue_GetDigestValue(DigestValue* pDigestValue); + +//-------------------------------------------------- +// Mutatoror for DigestValue atribute of DigestValue object. +// pDigestValue - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// len - length of value in bytes [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocDigestValue_SetDigestValue(DigestValue* pDigestValue, + const char* value, long len); + +//-------------------------------------------------- +// Compares two DigestValue structure on equality +// pDigest1 - address of first digest [REQUIRED] +// pDigest2 - address of second digest [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocCompareDigestValues(DigestValue* pDigest1, DigestValue* pDigest2); + +//-------------------------------------------------- +// Generates XML for <DigestValue> element +// pDigestValue - DigestValue object [REQUIRED] +// pBuf - memory buffer for storing xml [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocDigestValue_toXML(const DigestValue* pDigestValue, DigiDocMemBuf* pBuf); + +//======================< SignatureValue functions >============================= + +//============================================================ +// Returns the next free signature id +// pSigDoc - signed doc pointer +//============================================================ +EXP_OPTION int getNextSignatureId(const SignedDoc* pSigDoc); + +//-------------------------------------------------- +// "Constructor" of SignatureValue object +// ppSignatureValue - address of buffer for newly allocated object [REQUIRED] +// szId - Id atribute value [OPTIONAL] +// szType - signature type [OPTIONAL] +// szDigVal/lDigLen - digest value and length [OPTIONAL] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocSignatureValue_new(SignatureValue** ppSignatureValue, + const char* szId, const char* szType, + void* szSigVal, long lSigLen); + +//-------------------------------------------------- +// "Destructor" of SignatureValue object +// pSignatureValue - address of object to be deleted [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocSignatureValue_free(SignatureValue* pSignatureValue); + +//-------------------------------------------------- +// Accessor for Id atribute of SignatureValue object. +// pSignatureValue - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION const char* ddocSignatureValue_GetId(const SignatureValue* pSignatureValue); + +//-------------------------------------------------- +// Mutatoror for Id atribute of SignatureValue object. +// pSignatureValue - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocSignatureValue_SetId(SignatureValue* pSignatureValue, const char* value); + +//-------------------------------------------------- +// Accessor for Type atribute of SignatureValue object. +// pSignatureValue - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION const char* ddocSignatureValue_GetType(const SignatureValue* pSignatureValue); + +//-------------------------------------------------- +// Mutatoror for Type atribute of SignatureValue object. +// pSignatureValue - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocSignatureValue_SetType(SignatureValue* pSignatureValue, const char* value); + +//-------------------------------------------------- +// Accessor for SignatureValue atribute of SignatureValue object. +// pSignatureValue - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION DigiDocMemBuf* ddocSignatureValue_GetSignatureValue(const SignatureValue* pSignatureValue); + +//-------------------------------------------------- +// Mutatoror for SignatureValue atribute of SignatureValue object. +// pSignatureValue - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// len - length of value in bytes [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocSignatureValue_SetSignatureValue(SignatureValue* pSignatureValue, + const char* value, long len); + +//-------------------------------------------------- +// Generates XML for <IncludeInfo> element +// pSignatureValue - SignatureValue object [REQUIRED] +// pBuf - memory buffer for storing xml [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocSignatureValue_toXML(const SignatureValue* pSignatureValue, DigiDocMemBuf* pBuf); + +//======================< CertID >==================================== + +//-------------------------------------------------- +// "Constructor" of CertID object +// ppCertID - address of buffer for newly allocated object [REQUIRED] +// szId - Id atribute value [OPTIONAL] +// nType - certid internal type (signers or responders cert) [REQUIRED] +// szIssuerSerial - issuer serial number [OPTIONAL] +// szIssuerName - issuer DN [OPTIONAL] +// szDigVal/lDigLen - digest value and length [OPTIONAL] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertID_new(CertID** ppCertID, + int nType, const char* szId, + const char* szIssuerSerial, const char* szIssuerName, + void* szDigVal, long lDigLen); + +//-------------------------------------------------- +// "Destructor" of CertID object +// pCertID - address of object to be deleted [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertID_free(CertID* pCertID); + +//-------------------------------------------------- +// Accessor for Id atribute of CertID object. +// pCertID - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION const char* ddocCertID_GetId(const CertID* pCertID); + +//-------------------------------------------------- +// Mutatoror for Id atribute of CertID object. +// pCertID - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertID_SetId(CertID* pCertID, const char* value); + +//-------------------------------------------------- +// Accessor for IssuerSerial atribute of CertID object. +// pCertID - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION const char* ddocCertID_GetIssuerSerial(const CertID* pCertID); + +//-------------------------------------------------- +// Mutatoror for IssuerSerial atribute of CertID object. +// pCertID - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertID_SetIssuerSerial(CertID* pCertID, const char* value); + +//-------------------------------------------------- +// Accessor for IssuerName atribute of CertID object. +// pCertID - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION const char* ddocCertID_GetIssuerName(const CertID* pCertID); + +//-------------------------------------------------- +// Mutatoror for IssuerName atribute of CertID object. +// pCertID - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertID_SetIssuerName(CertID* pCertID, const char* value); + +//-------------------------------------------------- +// Accessor for DigestValue atribute of CertID object. +// pCertID - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION DigiDocMemBuf* ddocCertID_GetDigestValue(const CertID* pCertID); + + +//-------------------------------------------------- +// Mutatoror for DigestValue atribute of CertID object. +// pCertID - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// len - length of value in bytes [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertID_SetDigestValue(CertID* pCertID, + const char* value, long len); + +//-------------------------------------------------- +// Generates XML for <Cert> element +// pCertID - CertID object [REQUIRED] +// pBuf - memory buffer for storing xml [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocCertID_toXML(const SignedDoc* pSigDoc, const CertID* pCertID, DigiDocMemBuf* pBuf); + +//-------------------------------------------------- +// Generates XML for <CompleteCertificateRefs> element +// pSigDoc - SignedDoc object [REQUIRED] +// pBuf - memory buffer for storing xml [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocCompleteCertificateRefs_toXML(const SignedDoc* pSigDoc, const SignatureInfo* pSigInfo, DigiDocMemBuf* pBuf); +int bdocCompleteCertificateRefs_toXML(const SignedDoc* pSigDoc, const SignatureInfo* pSigInfo, DigiDocMemBuf* pBuf); + +//-------------------------------------------------- +// Generates XML for <CompleteRevocationRefs> element +// pSigDoc - SignedDoc object [REQUIRED] +// pBuf - memory buffer for storing xml [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocCompleteRevocationRefs_toXML(const SignedDoc* pSigDoc, const SignatureInfo* pSigInfo, DigiDocMemBuf* pBuf); + + +//==========< CertIDList >==================== + +//-------------------------------------------------- +// "Constructor" of CertIDList object +// ppCertIDList - address of buffer for newly allocated object [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertIDList_new(CertIDList** ppCertIDList); + +//-------------------------------------------------- +// "Destructor" of CertIDList object +// pCertIDList - address of object to be deleted [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertIDList_free(CertIDList* pCertIDList); + +//-------------------------------------------------- +// Accessor for count of CertIDs subelement of CertIDList object. +// pCertIDList - pointer to CertIDList object [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocCertIDList_addCertID(CertIDList* pCertIDList, CertID* pCertID); + +//-------------------------------------------------- +// Accessor for count of CertIDs subelement of CertIDList object. +// pCertIDList - pointer to CertIDList object [REQUIRED] +// returns count or -1 for error. Then use error API to check errors +//-------------------------------------------------- +EXP_OPTION int ddocCertIDList_GetCertIDsCount(CertIDList* pCertIDList); + +//-------------------------------------------------- +// Accessor for CertIDs subelement of CertIDList object. +// pCertIDList - pointer to CertIDList object [REQUIRED] +// nIdx - index of CertID object [REQUIRED] +// returns CertID pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertID* ddocCertIDList_GetCertID(CertIDList* pCertIDList, int nIdx); + +//-------------------------------------------------- +// Accessor for last CertIDs subelement of CertIDList object. +// pCertIDList - pointer to CertIDList object [REQUIRED] +// returns CertID pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertID* ddocCertIDList_GetLastCertID(CertIDList* pCertIDList); + +//-------------------------------------------------- +// Deletes CertID subelement of CertIDList object. +// pCertIDList - pointer to CertIDList object [REQUIRED] +// nIdx - index of CertID object to be removed [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertIDList_DeleteCertID(CertIDList* pCertIDList, int nIdx); + +//-------------------------------------------------- +// Finds a CertID object with required type +// pCertIDList - pointer to CertIDList object [REQUIRED] +// nType - type of CertID object [REQUIRED] +// returns CertID pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertID* ddocCertIDList_GetCertIDOfType(CertIDList* pCertIDList, int nType); + +//-------------------------------------------------- +// Finds a CertID object with required serial nr +// pCertIDList - pointer to CertIDList object [REQUIRED] +// szSerial - issuer serial +// returns CertID pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertID* ddocCertIDList_GetCertIDOfSerial(CertIDList* pCertIDList, const char* szSerial); + +//-------------------------------------------------- +// Finds a CertID object with required type or creates a new one +// pCertIDList - pointer to CertIDList object [REQUIRED] +// nType - type of CertID object [REQUIRED] +// returns CertID pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertID* ddocCertIDList_GetOrCreateCertIDOfType(CertIDList* pCertIDList, int nType); + +//======================< CertValue >==================================== + +//-------------------------------------------------- +// "Constructor" of CertValue object +// ppCertValue - address of buffer for newly allocated object [REQUIRED] +// szId - Id atribute value [OPTIONAL] +// nType - certid internal type (signers or responders cert) [REQUIRED] +// pCert - certificate itself [OPTIONAL]. Must fill in later. Do not X509_free() param! +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertValue_new(CertValue** ppCertValue, + int nType, const char* szId, + X509* pCert); + +//-------------------------------------------------- +// "Destructor" of CertValue object +// pCertValue - address of object to be deleted [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertValue_free(CertValue* pCertValue); + +//-------------------------------------------------- +// Accessor for Id atribute of CertValue object. +// pCertValue - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION const char* ddocCertValue_GetId(CertValue* pCertValue); + +//-------------------------------------------------- +// Mutatoror for Id atribute of CertValue object. +// pCertValue - address of object [REQUIRED] +// value - new value for atribute [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertValue_SetId(CertValue* pCertValue, const char* value); + +//-------------------------------------------------- +// Accessor for Cert atribute of CertValue object. +// pCertValue - address of object [REQUIRED] +// returns value of atribute or NULL. +//-------------------------------------------------- +EXP_OPTION X509* ddocCertValue_GetCert(CertValue* pCertValue); + +//-------------------------------------------------- +// Mutatoror for Cert atribute of CertValue object. +// pCertValue - address of object [REQUIRED] +// pCert - new value for atribute [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertValue_SetCert(CertValue* pCertValue, X509* pCert); + +//-------------------------------------------------- +// Generates XML for <EncapsulatedX509Certificate> element +// pCertID - CertID object [REQUIRED] +// pBuf - memory buffer for storing xml [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocCertValue_toXML(const CertValue* pCertValue, DigiDocMemBuf* pBuf); + +//==========< CertValueList >==================== + +//-------------------------------------------------- +// "Constructor" of CertValueList object +// ppCertValueList - address of buffer for newly allocated object [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertValueList_new(CertValueList** ppCertValueList); + +//-------------------------------------------------- +// "Destructor" of CertValueList object +// pCertValueList - address of object to be deleted [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertValueList_free(CertValueList* pCertValueList); + +//-------------------------------------------------- +// Adds a CertValue element to CertValueList object. +// pCertValueList - pointer to CertValueList object [REQUIRED] +// pCertValue - new object [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertValueList_addCertValue(CertValueList* pCertValueList, CertValue* pCertValue); + +//-------------------------------------------------- +// Accessor for count of CertValues subelement of CertValueList object. +// pCertValueList - pointer to CertValueList object [REQUIRED] +// returns count or -1 for error. Then use error API to check errors +//-------------------------------------------------- +EXP_OPTION int ddocCertValueList_GetCertValuesCount(CertValueList* pCertValueList); + +//-------------------------------------------------- +// Accessor for CertValues subelement of CertValueList object. +// pCertValueList - pointer to CertValueList object [REQUIRED] +// nIdx - index of CertValue object [REQUIRED] +// returns CertValue pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertValue* ddocCertValueList_GetCertValue(CertValueList* pCertValueList, int nIdx); + +//-------------------------------------------------- +// Deletes CertValue subelement of CertValueList object. +// pCertValueList - pointer to CertValueList object [REQUIRED] +// nIdx - index of CertValue object to be removed [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocCertValueList_DeleteCertValue(CertValueList* pCertValueList, int nIdx); + +//-------------------------------------------------- +// Finds a CertValue object with required type +// pCertValueList - pointer to CertValueList object [REQUIRED] +// nType - type of CertValue object [REQUIRED] +// returns CertValue pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertValue* ddocCertValueList_GetCertValueOfType(CertValueList* pCertValueList, int nType); + +//-------------------------------------------------- +// Finds a CertValue object with required type or creates a new one +// pCertValueList - pointer to CertValueList object [REQUIRED] +// nType - type of CertValue object [REQUIRED] +// returns CertValue pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertValue* ddocCertValueList_GetOrCreateCertValueOfType(CertValueList* pCertValueList, int nType); + +//======================< SignatureInfo functions >============================= + +// returns the number of signatures +EXP_OPTION int getCountOfSignatures(const SignedDoc* pSigDoc); +// Returns the desired SignatureInfo object +EXP_OPTION SignatureInfo* getSignature(const SignedDoc* pSigDoc, int nIdx); + +//============================================================ +// Returns signatures signed properties digest +// pSigInfo - signature info object +// return digest value as DigiDocMemBuf pointer or NULL +//============================================================ +EXP_OPTION DigiDocMemBuf* ddocSigInfo_GetSigPropDigest(SignatureInfo* pSigInfo); + +//============================================================ +// Sets signatures signed properties digest +// pSigInfo - signature info object +// value - new binary digest value +// len - length of the value +//============================================================ +EXP_OPTION int ddocSigInfo_SetSigPropDigest(SignatureInfo* pSigInfo, const char* value, long len); + +//============================================================ +// Returns signatures signed properties digest as read from file +// pSigInfo - signature info object +// return digest value as DigiDocMemBuf pointer or NULL +//============================================================ +EXP_OPTION DigiDocMemBuf* ddocSigInfo_GetSigPropRealDigest(SignatureInfo* pSigInfo); + +//============================================================ +// Sets signatures signed properties real digest as read from file +// pSigInfo - signature info object +// value - new binary digest value +// len - length of the value +//============================================================ +EXP_OPTION int ddocSigInfo_SetSigPropRealDigest(SignatureInfo* pSigInfo, const char* value, long len); + +//============================================================ +// Returns signatures signed info digest as read from file +// pSigInfo - signature info object +// return digest value as DigiDocMemBuf pointer or NULL +//============================================================ +EXP_OPTION DigiDocMemBuf* ddocSigInfo_GetSigInfoRealDigest(SignatureInfo* pSigInfo); + +//============================================================ +// Sets signatures signed info real digest as read from file +// pSigInfo - signature info object +// value - new binary digest value +// len - length of the value +//============================================================ +EXP_OPTION int ddocSigInfo_SetSigInfoRealDigest(SignatureInfo* pSigInfo, const char* value, long len); + +//============================================================ +// Returns signatures signature-value +// pSigInfo - signature info object +// return signature-value as SignatureValue pointer or NULL +//============================================================ +EXP_OPTION SignatureValue* ddocSigInfo_GetSignatureValue(SignatureInfo* pSigInfo); + +//============================================================ +// Returns signatures signature-value +// pSigInfo - signature info object +// return signature-value as DigiDocMemBuf pointer or NULL +//============================================================ +EXP_OPTION DigiDocMemBuf* ddocSigInfo_GetSignatureValue_Value(SignatureInfo* pSigInfo); + +//============================================================ +// Sets signatures signature-value +// pSigInfo - signature info object +// value - new binary signature value +// len - length of the value +//============================================================ +EXP_OPTION int ddocSigInfo_SetSignatureValue(SignatureInfo* pSigInfo, const char* value, long len); + +//============================================================ +// Returns signaers certs - issuer-serial +// pSigInfo - signature info object +// return required atribute value +//============================================================ +EXP_OPTION const char* ddocSigInfo_GetSignersCert_IssuerSerial(const SignatureInfo* pSigInfo); + +//============================================================ +// Sets signers certs issuer serial +// pSigInfo - signature info object +// value - new value +//============================================================ +EXP_OPTION int ddocSigInfo_SetSignersCert_IssuerSerial(SignatureInfo* pSigInfo, const char* value); + +//============================================================ +// Returns signaers certs - issuer-name +// pSigInfo - signature info object +// return required atribute value +//============================================================ +EXP_OPTION const char* ddocSigInfo_GetSignersCert_IssuerName(const SignatureInfo* pSigInfo); + +//============================================================ +// Returns signaers certs - issuer-name +// pSigInfo - signature info object +// pMbuf - memory buffer to return hash +// return required atribute value +//============================================================ +EXP_OPTION const char* ddocSigInfo_GetSignersCert_IssuerNameAndHash(const SignatureInfo* pSigInfo, DigiDocMemBuf *pMbuf); + +//============================================================ +// Sets signers certs issuer name +// pSigInfo - signature info object +// value - new value +//============================================================ +EXP_OPTION int ddocSigInfo_SetSignersCert_IssuerName(SignatureInfo* pSigInfo, const char* value); + +//============================================================ +// Returns signers certs digest as DigiDocMemBuf object +// pSigInfo - signature info object +// return signers certs digest as DigiDocMemBuf pointer or NULL +//============================================================ +EXP_OPTION DigiDocMemBuf* ddocSigInfo_GetSignersCert_DigestValue(const SignatureInfo* pSigInfo); + +//============================================================ +// Sets signers certs digest +// pSigInfo - signature info object +// value - new binary signature value +// len - length of the value +//============================================================ +EXP_OPTION int ddocSigInfo_SetSignersCert_DigestValue(SignatureInfo* pSigInfo, const char* value, long len); + +//-------------------------------------------------- +// Finds a CertID object with required type +// pSigInfo - signature info object [REQUIRED] +// nType - type of CertID object [REQUIRED] +// returns CertID pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertID* ddocSigInfo_GetCertIDOfType(const SignatureInfo* pSigInfo, int nType); + +//-------------------------------------------------- +// Finds a CertID object with required type or creates a new one +// pSigInfo - signature info object [REQUIRED] +// nType - type of CertID object [REQUIRED] +// returns CertID pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertID* ddocSigInfo_GetOrCreateCertIDOfType(SignatureInfo* pSigInfo, int nType); + +//-------------------------------------------------- +// Finds last CertID object of this signature +// pSigInfo - signature info object [REQUIRED] +// returns CertID pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertID* ddocSigInfo_GetLastCertID(const SignatureInfo* pSigInfo); + +//-------------------------------------------------- +// Finds a CertValue object with required type +// pSigInfo - signature info object [REQUIRED] +// nType - type of CertValue object [REQUIRED] +// returns CertValue pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertValue* ddocSigInfo_GetCertValueOfType(const SignatureInfo* pSigInfo, int nType); + +//-------------------------------------------------- +// Finds last CertValue +// pSigInfo - signature info object [REQUIRED] +// returns CertValue pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertValue* ddocSigInfo_GetLastCertValue(const SignatureInfo* pSigInfo); + +//-------------------------------------------------- +// Finds a CertValue object with required type or creates a new one +// pSigInfo - signature info object [REQUIRED] +// nType - type of CertValue object [REQUIRED] +// returns CertValue pointer or NULL for error +//-------------------------------------------------- +EXP_OPTION CertValue* ddocSigInfo_GetOrCreateCertValueOfType(SignatureInfo* pSigInfo, int nType); + +//-------------------------------------------------- +// Finds the signers certificate +// pSigInfo - signature info object [REQUIRED] +// returns certificate or NULL +//-------------------------------------------------- +EXP_OPTION X509* ddocSigInfo_GetSignersCert(const SignatureInfo* pSigInfo); + +//-------------------------------------------------- +// Sets the signers certificate +// pSigInfo - signature info object [REQUIRED] +// pCert - certificate [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocSigInfo_SetSignersCert(SignatureInfo* pSigInfo, X509* pCert); + +//-------------------------------------------------- +// Finds the OCSP responders certificate +// pSigInfo - signature info object [REQUIRED] +// returns certificate or NULL +//-------------------------------------------------- +EXP_OPTION X509* ddocSigInfo_GetOCSPRespondersCert(const SignatureInfo* pSigInfo); + +//-------------------------------------------------- +// Sets the OCSP Responders certificate +// pSigInfo - signature info object [REQUIRED] +// pCert - certificate [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +EXP_OPTION int ddocSigInfo_SetOCSPRespondersCert(SignatureInfo* pSigInfo, X509* pCert); + +//============================================================ +// Adds a certificate and it's certid to this signature +// pSigInfo - signature info object [REQUIRED] +// pCert - vertificate [REQUIRED] +// nCertIdType - type of cert [REQUIRED] +// return error code or ERR_OK +//============================================================ +EXP_OPTION int ddocSigInfo_addCert(SignatureInfo* pSigInfo, X509* pCert, int nCertIdType); +//AM +EXP_OPTION int bdocSigInfo_addCert(SignatureInfo* pSigInfo, X509* pCert, int nCertIdType); + + + +// Returns the last SignatureInfo object +EXP_OPTION SignatureInfo* ddocGetLastSignature(const SignedDoc* pSigDoc); +// Returns the SignatureInfo object with the given id +EXP_OPTION SignatureInfo* getSignatureWithId(const SignedDoc* pSigDoc, const char* id); +// Returns the SignatureInfo for the given NotaryInfo +EXP_OPTION SignatureInfo* ddocGetSignatureForNotary(const SignedDoc* pSigDoc, const NotaryInfo* pNotInfo); + +// Adds a new SignedInfo element to a SignedDoc element and initializes it +EXP_OPTION int SignatureInfo_new(SignatureInfo **newSignatureInfo, SignedDoc* pSigDoc, const char* id); + +// Sets the signature production place info (use NULL for unknown attributes) +EXP_OPTION int setSignatureProductionPlace(SignatureInfo* pSigInfo, + const char* city, const char* state, + const char* zip, const char* country); +// Adds a signer role +EXP_OPTION int addSignerRole(SignatureInfo* pSigInfo, int nCertified, + const char* role, int rLen, int encode); +// Returns the number of signer roles +EXP_OPTION int getCountOfSignerRoles(SignatureInfo* pSigInfo, int nCertified); +// Returns the desired signer role +EXP_OPTION const char* getSignerRole(SignatureInfo* pSigInfo, int nCertified, int nIdx); + +// Removes this SignatureInfo from signed doc and frees it's memory +EXP_OPTION int SignatureInfo_delete(SignedDoc* pSigDoc, const char* id); + +// cleanup SignatureInfo memory +EXP_OPTION void SignatureInfo_free(SignatureInfo* pSigInfo); + +//======================< DocInfo functions >============================= + +// Adds a new DocInfo element to a SignatureInfo element and initializes it +EXP_OPTION int addDocInfo(DocInfo **newDocInfo, SignatureInfo* pSigInfo, const char* docId, + const char* digType, const byte* digest, + int digLen, const byte* mimeDig, int mimeDigLen); +// cleanup DocInfo memory +EXP_OPTION void DocInfo_free(DocInfo* pDocInfo); +// Returns number of DocInfos +EXP_OPTION int getCountOfDocInfos(const SignatureInfo* pSigInfo); +// Returns the desired DocInfo +EXP_OPTION DocInfo* getDocInfo(const SignatureInfo* pSigInfo, int idx); +// Returns the last DocInfo +EXP_OPTION DocInfo* ddocGetLastDocInfo(const SignatureInfo* pSigInfo); + + +// Returns the DocInfo object with the given id +EXP_OPTION DocInfo* getDocInfoWithId(const SignatureInfo* pSigInfo, const char* id); +// Sets the DocInfo objects document digest and digest type +EXP_OPTION void setDocInfoDigest(DocInfo* pDocInfo, const byte* digest, + int digLen, const char* digType); +// Sets the DocInfo objects mime digest and mime type +EXP_OPTION void setDocInfoMimeDigest(DocInfo* pDocInfo, const byte* mimeDig, int mimeDigLen); + +// Adds all DocInfo elements in this file to a SignatureInfo element +EXP_OPTION int addAllDocInfos(SignedDoc* pSigDoc, SignatureInfo* pSigInfo); + +//======================< NotaryInfo functions >============================= + +// returns the number of notarys +EXP_OPTION int getCountOfNotaryInfos(const SignedDoc* pSigDoc); +// Returns the desired NotaryInfo object +EXP_OPTION NotaryInfo* getNotaryInfo(const SignedDoc* pSigDoc, int nIdx); +// Returns the last NotaryInfo object +EXP_OPTION NotaryInfo* ddocGetLastNotaryInfo(const SignedDoc* pSigDoc); +// Returns the NotaryInfo object with the given id +EXP_OPTION NotaryInfo* getNotaryWithId(const SignedDoc* pSigDoc, const char* id); +// Returns the NotaryInfo object that corresponds to the given signature +EXP_OPTION NotaryInfo* getNotaryWithSigId(const SignedDoc* pSigDoc, const char* sigId); +// Returns the NotaryInfo object that corresponds to the given signature +// ore creates a new one +EXP_OPTION NotaryInfo* getOrCreateNotaryWithSigId(SignedDoc* pSigDoc, const char* sigId); + +// Adds a new NotaryInfo element to a SignedDoc element and initializes it partly +EXP_OPTION int NotaryInfo_new(NotaryInfo** newNotaryInfo, SignedDoc* pSigDoc, SignatureInfo* pSigInfo); +// the same as above, but reads response and cert from file +EXP_OPTION int NotaryInfo_new_file(NotaryInfo** newNotaryInfo, SignedDoc* pSigDoc, const SignatureInfo* pSigInfo, + const char* ocspRespFile, const char* notaryCertFile); +// cleanup NotaryInfo memory +EXP_OPTION void NotaryInfo_free(NotaryInfo* pNotary); + +//============================================================ +// Returns OCSP responders id as in XML document +// pNotary - Notary info +// return DigiDocMemBuf buffer pointer or NULL for error +//============================================================ +EXP_OPTION const DigiDocMemBuf* ddocNotInfo_GetResponderId(const NotaryInfo* pNotary); + +//============================================================ +// Returns OCSP responders id value as string +// pNotary - Notary info +// return responder id value or NULL +//============================================================ +EXP_OPTION const char* ddocNotInfo_GetResponderId_Value(const NotaryInfo* pNotary); + +//============================================================ +// Sets OCSP responders id as in XML document +// pNotary - Notary info +// data - new responder id value +// len - length of value +// return DigiDocMemBuf buffer pointer or NULL for error +//============================================================ +int ddocNotInfo_SetResponderId(NotaryInfo* pNotary, const char* data, long len); + +//============================================================ +// Returns OCSP response as memory buffer +// pNotary - Notary info +// return DigiDocMemBuf buffer pointer or NULL for error +//============================================================ +const DigiDocMemBuf* ddocNotInfo_GetOCSPResponse(const NotaryInfo* pNotary); + +//============================================================ +// Retrieves OCSP responses responder id type and value +// pResp - OCSP response +// pType - buffer for type +// pMbufRespId - responder id +// returns error code or ERR_OK +//============================================================ +int ddocGetOcspRespIdTypeAndValue(OCSP_RESPONSE* pResp, + int *pType, DigiDocMemBuf* pMbufRespId); + +//============================================================ +// Sets OCSP respondese value as in XML document. Must pass in +// binary DER data! +// pNotary - Notary info +// data - new responder id value +// len - length of value +// return DigiDocMemBuf buffer pointer or NULL for error +//============================================================ +int ddocNotInfo_SetOCSPResponse(NotaryInfo* pNotary, const char* data, long len); + +//============================================================ +// Returns OCSP response value +// pNotary - Notary info +// return OCSP_RESPONSE pointer or NULL for error. Caller must +// use OCSP_RESPONSE_free() to release it. +//============================================================ +OCSP_RESPONSE* ddocNotInfo_GetOCSPResponse_Value(const NotaryInfo* pNotary); + +//============================================================ +// Sets OCSP respondese value. Must pass in real OCSP_RESPONSE +// pNotary - Notary info +// data - new responder id value +// len - length of value +// return DigiDocMemBuf buffer pointer or NULL for error +//============================================================ +int ddocNotInfo_SetOCSPResponse_Value(NotaryInfo* pNotary, OCSP_RESPONSE* pResp); + +//============================================================ +// Returns OCSP responders id type as string +// pNotary - Notary info +// return responder id type or NULL. DO NOT free() it! +//============================================================ +EXP_OPTION const char* ddocNotInfo_GetResponderId_Type(const NotaryInfo* pNotary); + +//============================================================ +// Returns OCSP responses thisUpdate atribute as string +// pNotary - Notary info +// pMBuf - buffer for thisUpdate value +// return error code OR ERR_OK. +//============================================================ +EXP_OPTION int ddocNotInfo_GetThisUpdate(const NotaryInfo* pNotary, DigiDocMemBuf* pMBuf); + +//============================================================ +// Returns OCSP responses producedAt atribute as time_t +// pNotary - Notary info +// pTime - address of time_t variable +// return error code OR ERR_OK. +//============================================================ +int ddocNotInfo_GetProducedAt_timet(const NotaryInfo* pNotary, time_t* pTime); + +//============================================================ +// Returns OCSP responses producedAt from xml as time_t +// pNotary - Notary info +// pTime - address of time_t variable +// return error code OR ERR_OK. +//============================================================ +int ddocNotInfo_GetProducedAtXml_timet(const NotaryInfo* pNotary, time_t* pTime); + +//============================================================ +// Returns OCSP responses thisUpdate atribute as time_t +// pNotary - Notary info +// pTime - address of time_t variable +// return error code OR ERR_OK. +//============================================================ +int ddocNotInfo_GetThisUpdate_timet(const NotaryInfo* pNotary, time_t* pTime); + +//============================================================ +// Returns OCSP responses nextUpdate atribute as string +// pNotary - Notary info +// pMBuf - buffer for thisUpdate value +// return error code OR ERR_OK. +//============================================================ +EXP_OPTION int ddocNotInfo_GetNextUpdate(const NotaryInfo* pNotary, DigiDocMemBuf* pMBuf); + +//============================================================ +// Returns OCSP responses IssuerNameHash atribute +// pNotary - Notary info +// pMBuf - buffer for IssuerNameHash value +// return error code OR ERR_OK. +//============================================================ +int ddocNotInfo_GetIssuerNameHash(const NotaryInfo* pNotary, DigiDocMemBuf* pMBuf); + +//============================================================ +// Returns OCSP responses IssuerKeyHash atribute +// pNotary - Notary info +// pMBuf - buffer for IssuerKeyHash value +// return error code OR ERR_OK. +//============================================================ +int ddocNotInfo_GetIssuerKeyHash(const NotaryInfo* pNotary, DigiDocMemBuf* pMBuf); + +//============================================================ +// Returns OCSP responses real digest from response data +// pNotary - Notary info +// pMBuf - buffer for digest value +// return error code OR ERR_OK. +//============================================================ +int ddocNotInfo_GetOcspRealDigest(const SignedDoc* pSigDoc, const NotaryInfo* pNotary, DigiDocMemBuf* pMBuf); + +//============================================================ +// Returns OCSP response digest as in XML document +// pNotary - Notary info +// return DigiDocMemBuf buffer pointer or NULL for error +//============================================================ +EXP_OPTION const DigiDocMemBuf* ddocNotInfo_GetOcspDigest(const NotaryInfo* pNotary); + +//============================================================ +// Sets OCSP response digest id as in XML document +// pNotary - Notary info +// data - new digest value +// len - length of value +// return DigiDocMemBuf buffer pointer or NULL for error +//============================================================ +int ddocNotInfo_SetOcspDigest(NotaryInfo* pNotary, const char* data, long len); + +//============================================================ +// Returns OCSP responses signature value +// pNotary - Notary info +// pMBuf - buffer for signature value +// return error code OR ERR_OK. +//============================================================ +int ddocNotInfo_GetOcspSignatureValue(const NotaryInfo* pNotary, DigiDocMemBuf* pMBuf); + + +// Removes this NotaryInfo from signed doc and frees it's memory +EXP_OPTION int NotaryInfo_delete(SignatureInfo* pSigInfo); + +// Calculates and stores a signature for this SignatureInfo object +EXP_OPTION int calculateSigInfoSignature(const SignedDoc* pSigDoc, SignatureInfo* pSigInfo, int nSigType, + const char* keyfile, const char* passwd, const char* certfile); + +//============================================================ +// Adds a certificate to Notary and initializes Notary +// pNotary - Notary info +// cert - responders certificate +// return error code +//============================================================ +int addNotaryInfoCert(SignedDoc *pSigDoc, NotaryInfo *pNotary, X509 *cert); + +//============================================================ +// Removes Notary cert value and id after unsucessful verification attempt +// pSigInfo - signature info [REQUIRED] +// return error code +//============================================================ +int removeNotaryInfoCert(SignatureInfo* pSigInfo); + +// Calculates <SignedProperties> digest +EXP_OPTION int calculateSignedPropertiesDigest(SignedDoc* pSigDoc, SignatureInfo* pSigInfo); +// Calculates <SignedInfo> digest +EXP_OPTION int calculateSignedInfoDigest(SignedDoc* pSigDoc, SignatureInfo* pSigInfo, byte* digBuf, int* digLen); + +//============================================================ +// Returns 1 if this signature has 1 reference that was verified +// by wrong DataFile hash calculated not using xmlns atribute +// pSigInfo - signature info pointer +//============================================================ +DIGIDOC_DEPRECATED EXP_OPTION int verifiedByWrongDataFileHash(const SignatureInfo* pSigInfo); + +//============================================================ +// Returns 1 if one signature has 1 reference that was verified +// by wrong DataFile hash calculated not using xmlns atribute +// pSigDoc - signed doc container pointer +//============================================================ +EXP_OPTION int hasSignatureWithWrongDataFileHash(const SignedDoc* pSigDoc); + +//============================================================ +// Calculates and stores a signature for this SignatureInfo object +// Uses PKCS#12 file to sign the info +// pSigInfo - signature info object +// nSigType - signature type code +// szPkcs12File - PKCS#12 file +// passwd - key password +//============================================================ +EXP_OPTION int calculateSignatureWithPkcs12(SignedDoc* pSigDoc, SignatureInfo* pSigInfo, + const char* szPkcs12File, const char* passwd); + +#ifdef __cplusplus +} +#endif + + +#endif // __DIGIDOC_OBJ_H__ + + |