226 lines
7.5 KiB
C++
226 lines
7.5 KiB
C++
/*
|
|
*
|
|
* Copyright (C) 2001-2012, OFFIS e.V.
|
|
* All rights reserved. See COPYRIGHT file for details.
|
|
*
|
|
* This software and supporting documentation were developed by
|
|
*
|
|
* OFFIS e.V.
|
|
* R&D Division Health
|
|
* Escherweg 2
|
|
* D-26121 Oldenburg, Germany
|
|
*
|
|
*
|
|
* Module: dcmpstat
|
|
*
|
|
* Author: Marco Eichelberg
|
|
*
|
|
* Purpose:
|
|
* classes: DVSignatureHandler
|
|
*
|
|
*/
|
|
|
|
#ifndef DVSIGHDL_H
|
|
#define DVSIGHDL_H
|
|
|
|
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
|
|
#include "dcmtk/dcmpstat/dvpstyp.h"
|
|
#include "dcmtk/dcmpstat/dpdefine.h"
|
|
#include "dcmtk/ofstd/ofstream.h"
|
|
#include "dcmtk/ofstd/ofstring.h"
|
|
#include "dcmtk/dcmsign/sicertvf.h"
|
|
#include "dcmtk/dcmdata/dcerror.h"
|
|
|
|
|
|
|
|
class DcmAttributeTag;
|
|
class DcmItem;
|
|
class DcmStack;
|
|
class DVConfiguration;
|
|
class DcmAttributeTag;
|
|
class DcmTagKey;
|
|
|
|
/** handler for all digital signature related functions in dcmpstat
|
|
*/
|
|
class DCMTK_DCMPSTAT_EXPORT DVSignatureHandler
|
|
{
|
|
public:
|
|
/** constructor
|
|
* @param cfg system configuration
|
|
*/
|
|
DVSignatureHandler(DVConfiguration& cfg);
|
|
|
|
/// destructor
|
|
virtual ~DVSignatureHandler();
|
|
|
|
/** returns a string containing a complete HTML page with the
|
|
* signature validation results for the last object of the
|
|
* given type. Never returns NULL.
|
|
* @param objtype object type
|
|
* @return pointer to string with HTML page
|
|
*/
|
|
const char *getCurrentSignatureValidationHTML(DVPSObjectType objtype) const;
|
|
|
|
/** returns a string containing a complete HTML page with the
|
|
* signature validation overview. Never returns NULL.
|
|
* @return pointer to string with HTML page
|
|
*/
|
|
const char *getCurrentSignatureValidationOverview() const;
|
|
|
|
/** updates the digital signature information for the given object type.
|
|
* If compiled without WITH_OPENSSL, always reports that no signatures
|
|
* were found in the object.
|
|
* @param dataset dataset to be checked for digital signatures
|
|
* @param objtype object type of dataset
|
|
* @param onRead true if the dataset is just being read, false if it is being written
|
|
*/
|
|
void updateDigitalSignatureInformation(DcmItem& dataset, DVPSObjectType objtype, OFBool onRead);
|
|
|
|
/** disables the digital signature information for the given object type.
|
|
* @param objtype object type
|
|
*/
|
|
void disableDigitalSignatureInformation(DVPSObjectType objtype);
|
|
|
|
/** returns the status flag for the current object of given type.
|
|
* @param objtype object type
|
|
* @return digital signature status for object
|
|
*/
|
|
DVPSSignatureStatus getCurrentSignatureStatus(DVPSObjectType objtype) const;
|
|
|
|
/** returns number of correct signatures for given object type.
|
|
* @param objtype object type
|
|
* @return number of digital signatures
|
|
*/
|
|
unsigned long getNumberOfCorrectSignatures(DVPSObjectType objtype) const;
|
|
|
|
/** returns number of untrustworthy signatures for given object type.
|
|
* @param objtype object type
|
|
* @return number of digital signatures
|
|
*/
|
|
unsigned long getNumberOfUntrustworthySignatures(DVPSObjectType objtype) const;
|
|
|
|
/** returns number of corrupt signatures for given object type.
|
|
* @param objtype object type
|
|
* @return number of digital signatures
|
|
*/
|
|
unsigned long getNumberOfCorruptSignatures(DVPSObjectType objtype) const;
|
|
|
|
/** returns the combined status flag for the current image and presentation state.
|
|
* @return digital signature status for image and presentation state
|
|
*/
|
|
DVPSSignatureStatus getCombinedImagePStateSignatureStatus() const;
|
|
|
|
/** disables internal settings for image and presentation state.
|
|
* Called when a new SR object is loaded and the current
|
|
* image/presentation state are hidden consequently.
|
|
*/
|
|
void disableImageAndPState();
|
|
|
|
/** checks whether any attribute mentioned in the tag list is affected
|
|
* by digital signatures. Returns true if either any of the attributes
|
|
* is signed by a digital signature on the dataset level, or if any
|
|
* of the attributes is a sequence that contains one or more signatures
|
|
* in its items. Otherwise returns false.
|
|
* If compiled without WITH_OPENSSL, always returns false.
|
|
* @param item item or dataset to be tested
|
|
* @param tagList list of attributes (tags) to be looked up inside the dataset
|
|
* @return true if any of the given attributes is affected by a digital signature,
|
|
* false otherwise.
|
|
*/
|
|
OFBool attributesSigned(DcmItem& item, DcmAttributeTag& tagList) const;
|
|
|
|
/** adds one or more new digital signatures to the given dataset.
|
|
* If compiled without WITH_OPENSSL, always returns EC_IllegalCall.
|
|
* @param mainDataset reference to main dataset in which signature(s) are to be added
|
|
* @param itemStack stack of items within the main dataset that are to be signed
|
|
* separately. If main dataset is to be signed, it must be included in this stack.
|
|
* @param attributesNotToSignInMainDataset list of attribute tags that should be
|
|
* omitted from the signature on the main dataset level
|
|
* @param usedID user ID in configuration file, must not be NULL
|
|
* @param passwd passwd password for private key, may be NULL
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition createSignature(
|
|
DcmItem& mainDataset,
|
|
const DcmStack& itemStack,
|
|
DcmAttributeTag& attributesNotToSignInMainDataset,
|
|
const char *userID,
|
|
const char *passwd);
|
|
|
|
private:
|
|
|
|
/// private undefined copy constructor
|
|
DVSignatureHandler(const DVSignatureHandler& copy);
|
|
|
|
/// private undefined assignment operator
|
|
DVSignatureHandler& operator=(const DVSignatureHandler&);
|
|
|
|
/* print the location stack into the given stream.
|
|
* It is assumed that the stack top is a DigitalSignatureSequence which is not printed
|
|
* and that the stack bottom is the main dataset, which is also not printed.
|
|
* @param stack search stack, as returned by DcmSignature::findFirstSignatureItem() etc.
|
|
* @param os output stream
|
|
*/
|
|
static void printSignatureItemPosition(DcmStack& stack, STD_NAMESPACE ostream& os);
|
|
|
|
/** replaces the current HTML page for the given object type by the new string.
|
|
* @param objtype object type
|
|
* @param str string, must not be NULL
|
|
*/
|
|
void replaceString(DVPSObjectType objtype, const char *str);
|
|
|
|
/** updates the overview HTML page.
|
|
*/
|
|
void updateSignatureValidationOverview();
|
|
|
|
/// current SR html page
|
|
OFString htmlSR;
|
|
|
|
/// current image html page
|
|
OFString htmlImage;
|
|
|
|
/// current presentation state html page
|
|
OFString htmlPState;
|
|
|
|
/// current overview
|
|
OFString htmlOverview;
|
|
|
|
/// number of correct signatures in current SR
|
|
unsigned long correctSignaturesSR;
|
|
|
|
/// number of corrupt signatures in current SR
|
|
unsigned long corruptSignaturesSR;
|
|
|
|
/// number of untrustworthy signatures in current SR
|
|
unsigned long untrustSignaturesSR;
|
|
|
|
/// number of correct signatures in current Image
|
|
unsigned long correctSignaturesImage;
|
|
|
|
/// number of corrupt signatures in current Image
|
|
unsigned long corruptSignaturesImage;
|
|
|
|
/// number of untrustworthy signatures in current Image
|
|
unsigned long untrustSignaturesImage;
|
|
|
|
/// number of correct signatures in current PState
|
|
unsigned long correctSignaturesPState;
|
|
|
|
/// number of corrupt signatures in current PState
|
|
unsigned long corruptSignaturesPState;
|
|
|
|
/// number of untrustworthy signatures in current PState
|
|
unsigned long untrustSignaturesPState;
|
|
|
|
#ifdef WITH_OPENSSL
|
|
/// the certificate verifier, available only if compiled with OpenSSL support
|
|
SiCertificateVerifier certVerifier;
|
|
#endif
|
|
|
|
/// reference to object maintaining the system configuration
|
|
DVConfiguration& config;
|
|
|
|
};
|
|
|
|
#endif
|