diff options
Diffstat (limited to 'libdigidoc/DigiDocGen.h')
-rw-r--r-- | libdigidoc/DigiDocGen.h | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/libdigidoc/DigiDocGen.h b/libdigidoc/DigiDocGen.h new file mode 100644 index 0000000..85db6d5 --- /dev/null +++ b/libdigidoc/DigiDocGen.h @@ -0,0 +1,200 @@ +#ifndef __DIGIDOC_GEN_H__ +#define __DIGIDOC_GEN_H__ +//================================================== +// FILE: DigiDocGen.h +// PROJECT: Digi Doc +// DESCRIPTION: DigiDoc helper routines for XML generation +// 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 >============================= +// 11.04.2006 Veiko Sinivee +// Creation +//================================================== + +#include <libdigidoc/DigiDocDefs.h> +#include <libdigidoc/DigiDocObj.h> +#include <libdigidoc/DigiDocMem.h> + + +//==========< XML generation routines >======================== + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef WITH_TIMETSTAMP_STRUCT +// contains timestamp data +typedef struct Timestamp_st { + int year; + int mon; + int day; + int hour; + int min; + int sec; + int tz; +} Timestamp; + +// converts timestamp string to it's components +EXP_OPTION int convertStringToTimestamp(const SignedDoc* pSigDoc, const char* szTimestamp, Timestamp* pTimestamp); +// converts timestamp to string +EXP_OPTION int convertTimestampToString(const SignedDoc* pSigDoc, const Timestamp* pTimestamp, char* szTimestamp, int len); +// creates new timestamp object +EXP_OPTION int Timestamp_new(Timestamp **, int year,int month,int day,int hour,int minute,int second,int timezone); +// frees this timestamp object +EXP_OPTION void Timestamp_free(Timestamp* pTimestamp); + +#endif + +//============================================================ +// Creates a timestamp string +// buf - output buffer +// len - length of output buffer +// returns number of output bytes written +//============================================================ +int createTimestamp(const SignedDoc* pSigDoc, char* buf, int len); + +// converts timestamp string to time_t value +EXP_OPTION time_t convertStringToTimeT(const SignedDoc* pSigDoc, const char* szTimestamp); + + +//-------------------------------------------------- +// Appends an xml element start to buffer, but no ">" +// pBuf - memory buffer to store xml [REQUIRED] +// elemName - xml element name [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocGen_startElemBegin(DigiDocMemBuf* pBuf, const char* elemName); + +//-------------------------------------------------- +// Appends an xml element start tag end to buffer - ">" +// pBuf - memory buffer to store xml [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocGen_startElemEnd(DigiDocMemBuf* pBuf); + +//-------------------------------------------------- +// Appends an xml element start to buffer - <tag> +// pBuf - memory buffer to store xml [REQUIRED] +// elemName - xml element name [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocGen_startElem(DigiDocMemBuf* pBuf, const char* elemName); + +//-------------------------------------------------- +// Appends an xml element end to buffer +// pBuf - memory buffer to store xml [REQUIRED] +// elemName - xml element name [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocGen_endElem(DigiDocMemBuf* pBuf, const char* elemName); + +//-------------------------------------------------- +// Appends an xml element's atribute to buffer +// pBuf - memory buffer to store xml [REQUIRED] +// name - xml atribute name [REQUIRED] +// value - xml atribute value [REQUIRED] +// returns error code or ERR_OK +//-------------------------------------------------- +int ddocGen_addAtribute(DigiDocMemBuf* pBuf, const char* name, const char* value); + + +//-------------------------------------------------- +// Helper function that escapes XML special chars +// src - input data +// srclen - length of input data. Use -1 for 0 terminated strings +// dest - address of output buffer. Caller is responsible for deallocating it! +// returns error code or ERR_OK +//-------------------------------------------------- +int escapeXMLSymbols(const char* src, int srclen, char** dest); + +//-------------------------------------------------- +// Helper function that escapes XML special chars in xml element body +// src - input data +// srclen - length of input data. Use -1 for 0 terminated strings +// dest - address of output buffer. Caller is responsible for deallocating it! +// returns error code or ERR_OK +//-------------------------------------------------- +int escapeTextNode(const char* src, int srclen, char** dest); + + +//================< functions generating DigiDoc formats 1.0 - 1.3 > ================================= + +// writes the signed doc to a file +EXP_OPTION int createSignedDoc(SignedDoc* pSigDoc, const char* szOldFile, const char* szSigDocFile); + +//============================================================ +// Canonicalizes XML +// source - input data +// len - input length +// returns a newly allocated buffer with canonicalized XML +// Caller must free() the result. +//============================================================ +char* canonicalizeXML(char* source, int len); + +char* canonicalizeXMLBlock(char* source, int len, char* block, char* prefix); + +//============================================================ +// Creates a <SignedProperties> XML block +// pSigDoc - signed document pointer +// pSigInfo - signature info data +// bWithEscapes - 1=escape xml sümbols, 0=don't escape +// returns new <SignedProperties> node +//============================================================ +char* createXMLSignedProperties(const SignedDoc* pSigDoc, const SignatureInfo* pSigInfo, int bWithEscapes); + +//============================================================ +// Generates DataFile elements XML form and stores it in a file +// pSigDoc - signed document +// pDataFile - data file object to be converted +// szDataFile - input file name +// hFile - output file handle +// pMBufXML - output buffer if we want data to be returned in mem buf +//============================================================ +EXP_OPTION int generateDataFileXML(SignedDoc* pSigDoc, DataFile* pDataFile, + const char* szDataFile, FILE* hFile, DigiDocMemBuf* pMBufXML); + +//-------------------------------------------------- +// Creates a new signed document in memory buffer +// pSigDoc - signed doc info +// szOldFile - name of old file on disk to copy DataFile contents +// pMBuf - buffer for new digidoc document +// returns error code or ERR_OK for success +//-------------------------------------------------- +EXP_OPTION int createSignedDocInMemory(SignedDoc* pSigDoc, const char* szOldFile, DigiDocMemBuf* pMBuf); + +//-------------------------------------------------- +// Removes incomplete or orphoned signatures. +// Signature is incomplete if it hasn't got the signature +// value +// pSigDoc - signed doc info +// returns error code or ERR_OK for success +//-------------------------------------------------- +EXP_OPTION int removeIncompleteSignatures(SignedDoc* pSigDoc); + +//-------------------------------------------------- +// Checks for incomplete or orphoned signatures. +// Signature is incomplete if it hasn't got the signature +// value +// pSigDoc - signed doc info +// returns error code if DigiDoc has orphoned signature or ERR_OK for success +//-------------------------------------------------- +EXP_OPTION int hasIncompleteSignatures(SignedDoc* pSigDoc); + + +#ifdef __cplusplus +} +#endif + + +#endif // __DIGIDOC_GEN_H__ |