DCMTK  Version 3.6.5
OFFIS DICOM Toolkit
dcmsign: a digital signature library and utility apps

This module contains classes to create digital signatures in DICOM data sets, to verify and to remove signatures. Signatures are conforming to the DICOM "Digital Signatures" extension (formerly Supplement 41). This module requires the external OpenSSL library.

The main interface classes are:

Tools

This module contains the following command line tool:

Examples

The following example shows how to verify all signatures in a DICOM file:

DcmFileFormat fileformat;
if (fileformat.loadFile("test.dcm").good())
{
int counter = 0; // counts the signatures in the DICOM file
int corrupt_counter = 0; // counts signatures that failed verification
DcmDataset *dataset = fileformat.getDataset();
DcmStack stack; // stores current location within file
DcmSignature signer; // signature handler
DcmItem *sigItem = DcmSignature::findFirstSignatureItem(*dataset, stack);
while (sigItem) // browse through items that contain digital signatures
{
signer.attach(sigItem); // each item may contain multiple signatures
for (unsigned long l=0; l < signer.numberOfSignatures(); ++l)
{
if (signer.selectSignature(l).good())
{
++counter;
if (signer.verifyCurrent().bad()) // verify signature
corrupt_counter++;
}
}
signer.detach();
sigItem = DcmSignature::findNextSignatureItem(*dataset, stack);
}
if (counter == 0)
cerr << "no signatures found in dataset." << endl;
else
cerr << counter << " signatures verified in dataset, "
<< corrupt_counter << " corrupted." << endl;
}

The following example shows how to sign a DICOM file:

DcmFileFormat fileformat;
if (fileformat.loadFile("test.dcm").good())
{
DcmDataset *dataset = fileformat.getDataset();
SiCreatorProfile profile; // select the "RSA Creator Profile"
SiRIPEMD160 mac; // use RIPEMD160 as MAC algorithm
DcmSignature signer; // signature handler
SiCertificate cert; // our certificate
if (cert.loadCertificate("certificate.pem", X509_FILETYPE_PEM).bad())
{
cerr << "unable to load certificate" << endl;
return;
}
SiPrivateKey key; // private key, must be unencrypted here
if (key.loadPrivateKey("privkey.pem", X509_FILETYPE_PEM).bad())
{
cerr << "unable to load private key" << endl;
return;
}
signer.attach(dataset); // connect handler to data set
if (signer.createSignature(key, cert, mac, profile).good())
{
fileformat.saveFile("test_signed.dcm"); // write back
}
}
DcmStack
this class manages a stack of pointers to DcmObject instances.
Definition: dcstack.h:72
SiRIPEMD160
a class implementing the hash function RIPEMD160
Definition: siripemd.h:41
DcmFileFormat::loadFile
virtual OFCondition loadFile(const OFFilename &fileName, const E_TransferSyntax readXfer=EXS_Unknown, const E_GrpLenEncoding groupLength=EGL_noChange, const Uint32 maxReadLength=DCM_MaxReadLength, const E_FileReadMode readMode=ERM_autoDetect)
load object from a DICOM file.
DcmSignature::findNextSignatureItem
static DcmItem * findNextSignatureItem(DcmItem &item, DcmStack &stack)
recursively browses through the given dataset and searches the next occurence of the DigitalSignature...
DcmSignature::createSignature
OFCondition createSignature(SiPrivateKey &key, SiCertificate &cert, SiMAC &mac, SiSecurityProfile &profile, E_TransferSyntax xfer=EXS_LittleEndianExplicit, const DcmAttributeTag *tagList=NULL, SiTimeStamp *timeStamp=NULL)
creates a new digital signature in the current dataset.
DcmSignature::selectSignature
OFCondition selectSignature(unsigned long i)
selects one of the digital signatures from the attached dataset for reading.
OFCondition::bad
OFBool bad() const
check if the status is not OK, i.e. error or failure.
Definition: ofcond.h:305
DcmSignature::verifyCurrent
OFCondition verifyCurrent()
verifies the current signature.
DcmFileFormat::getDataset
DcmDataset * getDataset()
get dataset part of the fileformat
DcmSignature
this class provides the main interface to the dcmsign module - it allows to create,...
Definition: dcsignat.h:56
DcmSignature::detach
void detach()
detaches an attached DICOM dataset from the signature object.
SiCreatorProfile
Creator RSA Digital Signature Profile.
Definition: sicreapr.h:36
SiPrivateKey::loadPrivateKey
OFCondition loadPrivateKey(const char *filename, int filetype)
loads a private key from file.
SiCertificate
a class representing X.509 public key certificates.
Definition: sicert.h:43
DcmDataset
a class handling the DICOM dataset format (files without meta header)
Definition: dcdatset.h:42
DcmFileFormat::saveFile
virtual OFCondition saveFile(const OFFilename &fileName, const E_TransferSyntax writeXfer=EXS_Unknown, const E_EncodingType encodingType=EET_UndefinedLength, const E_GrpLenEncoding groupLength=EGL_recalcGL, const E_PaddingEncoding padEncoding=EPD_noChange, const Uint32 padLength=0, const Uint32 subPadLength=0, const E_FileWriteMode writeMode=EWM_fileformat)
save object to a DICOM file.
DcmSignature::attach
void attach(DcmItem *dataset)
attaches a DICOM dataset or item to the signature object.
DcmItem
a class representing a list of DICOM elements in which each element has a different tag and elements ...
Definition: dcitem.h:48
OFCondition::good
OFBool good() const
check if the status is OK.
Definition: ofcond.h:296
SiPrivateKey
a class representing a private key.
Definition: siprivat.h:44
SiCertificate::loadCertificate
OFCondition loadCertificate(const char *filename, int filetype)
loads an X.509 certificate from file.
DcmSignature::numberOfSignatures
unsigned long numberOfSignatures()
returns the number of signatures in the dataset.
DcmSignature::findFirstSignatureItem
static DcmItem * findFirstSignatureItem(DcmItem &item, DcmStack &stack)
recursively browses through the given dataset and searches the first occurence of the DigitalSignatur...
DcmFileFormat
a class handling the DICOM file format (with meta header)
Definition: dcfilefo.h:44


Generated on Tue Nov 10 2020 for DCMTK Version 3.6.5 by Doxygen 1.8.20