115 lines
3.2 KiB
C
115 lines
3.2 KiB
C
|
/*
|
||
|
*
|
||
|
* Copyright (C) 1998-2011, 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: dcmsign
|
||
|
*
|
||
|
* Author: Marco Eichelberg
|
||
|
*
|
||
|
* Purpose:
|
||
|
* classes: SiDSA
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef SIDSA_H
|
||
|
#define SIDSA_H
|
||
|
|
||
|
#include "dcmtk/config/osconfig.h"
|
||
|
#include "dcmtk/dcmsign/sialgo.h"
|
||
|
|
||
|
#ifdef WITH_OPENSSL
|
||
|
|
||
|
#include "dcmtk/ofstd/oftypes.h"
|
||
|
|
||
|
class SiPrivateKey;
|
||
|
struct dsa_st;
|
||
|
typedef struct dsa_st DSA;
|
||
|
|
||
|
/**
|
||
|
* This class implements the DSA public key crypto algorithms.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
class DCMTK_DCMSIGN_EXPORT SiDSA : public SiAlgorithm
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
/** constructor
|
||
|
* @param pointer to public DSA key
|
||
|
*/
|
||
|
SiDSA(DSA *key);
|
||
|
|
||
|
/// destructor
|
||
|
virtual ~SiDSA();
|
||
|
|
||
|
/** creates a signature.
|
||
|
* @param inputHash array of hash key bytes that are to be signed
|
||
|
* @param inputHashSize length of hash key array in bytes
|
||
|
* @param inputHashAlgorithm MAC algorithm used for creation of hash key. Ignored for DSA signatures.
|
||
|
* @param outputSignature pointer to array of at least getSize() which must be allocated by caller.
|
||
|
* @param outputSignatureSize returns the number of bytes written to outputSignature.
|
||
|
* @return SI_EC_Normal if successful, errorcode otherwise.
|
||
|
*/
|
||
|
virtual OFCondition sign(
|
||
|
const unsigned char *inputHash,
|
||
|
unsigned long inputHashSize,
|
||
|
E_MACType inputHashAlgorithm,
|
||
|
unsigned char *outputSignature,
|
||
|
unsigned long &outputSignatureSize);
|
||
|
|
||
|
/** verifies a signature.
|
||
|
* @param inputHash array of bytes containing hash key to be verified against signature
|
||
|
* @param inputHashSize length of hash key array in bytes
|
||
|
* @param inputHashAlgorithm MAC algorithm used for creation of hash key. Ignored for DSA signatures.
|
||
|
* @param inputSignature array of bytes containing signature to be verified
|
||
|
* @param inputSignatureSize length of signature array in bytes
|
||
|
* @param verified returns whether the signature was successfully verified
|
||
|
* @return SI_EC_Normal if successful, errorcode otherwise.
|
||
|
*/
|
||
|
virtual OFCondition verify(
|
||
|
const unsigned char *inputHash,
|
||
|
unsigned long inputHashSize,
|
||
|
E_MACType inputHashAlgorithm,
|
||
|
const unsigned char *inputSignature,
|
||
|
unsigned long inputSignatureSize,
|
||
|
OFBool &verified);
|
||
|
|
||
|
/** returns the size of a block of encrypted/decrypted ciphertext in bytes.
|
||
|
* The result depends on the public key algorithm, key size and padding scheme.
|
||
|
* In general the input to decrypt() or encrypt() must be less than or equal
|
||
|
* to this block size. The output of decrypt() or encrypt() is always equal
|
||
|
* to this block size.
|
||
|
* @return block size for this public key cryptosystem and key
|
||
|
*/
|
||
|
virtual unsigned long getSize() const;
|
||
|
|
||
|
/** returns the type of public key algorithm computed by this object
|
||
|
* @return type of public key algorithm
|
||
|
*/
|
||
|
virtual E_KeyType keyType() const;
|
||
|
|
||
|
private:
|
||
|
|
||
|
/// private undefined copy constructor
|
||
|
SiDSA(SiDSA& arg);
|
||
|
|
||
|
/// private undefined copy assignment operator
|
||
|
SiDSA& operator=(SiDSA& arg);
|
||
|
|
||
|
/// DSA key used for signature/verification
|
||
|
DSA *dsa;
|
||
|
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
#endif
|