1 /*
2  *
3  *  Copyright (C) 1998-2019, OFFIS e.V.
4  *  All rights reserved.  See COPYRIGHT file for details.
5  *
6  *  This software and supporting documentation were developed by
7  *
8  *    OFFIS e.V.
9  *    R&D Division Health
10  *    Escherweg 2
11  *    D-26121 Oldenburg, Germany
12  *
13  *
14  *  Module: dcmsign
15  *
16  *  Author: Norbert Loxen, Marco Eichelberg
17  *
18  *  Purpose:
19  *    classes: SiSHA1
20  *
21  */
22 
23 #ifndef SISHA1_H
24 #define SISHA1_H
25 
26 #include "dcmtk/config/osconfig.h"
27 
28 #ifdef WITH_OPENSSL
29 
30 #include "dcmtk/dcmsign/simac.h"
31 #include "dcmtk/dcmsign/sitypes.h"
32 
33 struct SHAstate_st;
34 typedef struct SHAstate_st SHA_CTX;
35 
36 /**
37  * a class implementing the hash function SHA1
38  * @remark this class is only available if DCMTK is compiled with
39  * OpenSSL support enabled.
40  */
41 class DCMTK_DCMSIGN_EXPORT SiSHA1 : public SiMAC
42 {
43 public:
44   /// default constructor
45   SiSHA1();
46 
47   /// destructor
48   virtual ~SiSHA1();
49 
50   /** initializes the MAC algorithm.
51    *  @return status code
52    */
53   virtual OFCondition initialize();
54 
55   /** feeds data into the MAC algorithm
56    *  @param data pointer to raw data to be fed into the MAC, must not be NULL
57    *  @param length number of bytes in raw data array
58    *  @return status code
59    */
60   virtual OFCondition digest(const unsigned char *data, unsigned long length);
61 
62   /** finalizes the MAC and writes it to the given output array,
63    *  which must be at least getSize() bytes large.
64    *  After a call to finalize, the MAC algorithm must be initialized
65    *  again, see initialize().
66    *  @param result pointer to array of getSize() bytes into which the MAC is written
67    *  @return status code
68    */
69   virtual OFCondition finalize(unsigned char *result);
70 
71   /** returns the size of a MAC in bytes.
72    *  @return block size for this MAC algorithm
73    */
74   virtual unsigned long getSize() const;
75 
76   /** returns the type of MAC algorithm computed by this object
77    *  @return type of MAC algorithm
78    */
79   virtual E_MACType macType() const;
80 
81   /** returns the DICOM identifier for this MAC algorithm
82    *  @return DICOM defined term for algorithm
83    */
84   virtual const char *getDefinedTerm() const;
85 
86 private:
87 
88   /// private undefined copy constructor
89   SiSHA1(SiSHA1& arg);
90 
91   /// private undefined copy assignment operator
92   SiSHA1& operator=(SiSHA1& arg);
93 
94   /// OpenSSL SHA1 context
95   SHA_CTX *ctx;
96 };
97 
98 #endif
99 #endif
100