00001 /* 00002 * 00003 * Copyright (C) 1998-2010, OFFIS e.V. 00004 * All rights reserved. See COPYRIGHT file for details. 00005 * 00006 * This software and supporting documentation were developed by 00007 * 00008 * OFFIS e.V. 00009 * R&D Division Health 00010 * Escherweg 2 00011 * D-26121 Oldenburg, Germany 00012 * 00013 * 00014 * Module: dcmsign 00015 * 00016 * Author: Marco Eichelberg 00017 * 00018 * Purpose: 00019 * classes: DcmSignature 00020 * 00021 * Last Update: $Author: joergr $ 00022 * Update Date: $Date: 2010-10-14 13:17:24 $ 00023 * CVS/RCS Revision: $Revision: 1.4 $ 00024 * Status: $State: Exp $ 00025 * 00026 * CVS/RCS Log at end of file 00027 * 00028 */ 00029 00030 #ifndef DCMSIGN_H 00031 #define DCMSIGN_H 00032 00033 #include "dcmtk/config/osconfig.h" 00034 #include "dcmtk/dcmsign/sitypes.h" 00035 00036 #ifdef WITH_OPENSSL 00037 00038 #include "dcmtk/dcmdata/dcxfer.h" /* for E_TransferSyntax */ 00039 00040 #define INCLUDE_CSTDIO 00041 #include "dcmtk/ofstd/ofstdinc.h" 00042 00043 class DcmItem; 00044 class DcmStack; 00045 class DcmSequenceOfItems; 00046 class DcmAttributeTag; 00047 class SiPrivateKey; 00048 class SiCertificate; 00049 class SiSecurityProfile; 00050 class SiMAC; 00051 class SiTimeStamp; 00052 00060 class DcmSignature 00061 { 00062 public: 00067 static void initializeLibrary(); 00068 00070 DcmSignature(); 00071 00073 virtual ~DcmSignature(); 00074 00081 void attach(DcmItem *dataset); 00082 00085 void detach(); 00086 00104 OFCondition createSignature( 00105 SiPrivateKey& key, 00106 SiCertificate& cert, 00107 SiMAC& mac, 00108 SiSecurityProfile& profile, 00109 E_TransferSyntax xfer=EXS_LittleEndianExplicit, 00110 const DcmAttributeTag *tagList=NULL, 00111 SiTimeStamp *timeStamp=NULL); 00112 00116 unsigned long numberOfSignatures(); 00117 00122 OFCondition removeSignature(unsigned long i); 00123 00128 OFCondition selectSignature(unsigned long i); 00129 00135 OFCondition verifyCurrent(); 00136 00142 OFCondition getCurrentMacID(Uint16& macID); 00143 00151 OFCondition getCurrentMacXferSyntaxName(OFString& str); 00152 00158 OFCondition getCurrentMacName(OFString& str); 00159 00165 OFCondition getCurrentSignatureUID(OFString& str); 00166 00172 OFCondition getCurrentSignatureDateTime(OFString& str); 00173 00182 OFCondition getCurrentDataElementsSigned(DcmAttributeTag& desig); 00183 00189 SiCertificate *getCurrentCertificate(); 00190 00195 void setDumpFile(FILE *f); 00196 00204 static DcmItem *findFirstSignatureItem(DcmItem& item, DcmStack& stack); 00205 00213 static DcmItem *findNextSignatureItem(DcmItem& item, DcmStack& stack); 00214 00215 private: 00216 00218 DcmSignature(DcmSignature& arg); 00219 00221 DcmSignature& operator=(DcmSignature& arg); 00222 00224 void deselect(); 00225 00232 OFCondition allocateMACID(Uint16& newID); 00233 00239 static Uint16 getMACIDnumber(DcmItem &item); 00240 00244 static void currentDateTime(OFString &str); 00245 00247 DcmItem *currentItem; 00248 00250 DcmSequenceOfItems *macParametersSq; 00251 00253 DcmSequenceOfItems *signatureSq; 00254 00256 FILE *dumpFile; 00257 00259 DcmItem *selectedSignatureItem; 00260 00262 DcmItem *selectedMacParametersItem; 00263 00265 SiCertificate *selectedCertificate; 00266 00267 }; 00268 00269 #endif 00270 #endif 00271 00272 /* 00273 * $Log: dcsignat.h,v $ 00274 * Revision 1.4 2010-10-14 13:17:24 joergr 00275 * Updated copyright header. Added reference to COPYRIGHT file. 00276 * 00277 * Revision 1.3 2005-12-08 16:04:29 meichel 00278 * Changed include path schema for all DCMTK header files 00279 * 00280 * Revision 1.2 2003/06/04 14:21:03 meichel 00281 * Simplified include structure to avoid preprocessor limitation 00282 * (max 32 #if levels) on MSVC5 with STL. 00283 * 00284 * Revision 1.1 2002/12/20 14:53:08 wilkens 00285 * Modified name clash resulting in a compiler error on Solaris 2.5.1 using 00286 * compiler SC 2.0.1. 00287 * 00288 * Revision 1.5 2002/11/27 14:53:40 meichel 00289 * Adapted module dcmsign to use of new header file ofstdinc.h 00290 * 00291 * Revision 1.4 2001/11/16 15:50:49 meichel 00292 * Adapted digital signature code to final text of supplement 41. 00293 * 00294 * Revision 1.3 2001/09/26 14:30:18 meichel 00295 * Adapted dcmsign to class OFCondition 00296 * 00297 * Revision 1.2 2001/06/01 15:50:46 meichel 00298 * Updated copyright header 00299 * 00300 * Revision 1.1 2000/11/07 16:48:51 meichel 00301 * Initial release of dcmsign module for DICOM Digital Signatures 00302 * 00303 * 00304 */ 00305