libdigidocpp
digidoc::SignatureBES Class Reference

#include <SignatureBES.h>

Inheritance diagram for digidoc::SignatureBES:
Inheritance graph
Collaboration diagram for digidoc::SignatureBES:
Collaboration graph

Public Member Functions

 SignatureBES (unsigned int id, const BDoc &bdoc)
 SignatureBES (const std::string &path, const BDoc &bdoc) throw (SignatureException)
virtual ~SignatureBES ()
virtual std::string getMediaType () const
std::vector< std::string > referenceDigestMethods () const
virtual void validateOffline () const throw (SignatureException)
virtual CertStatus validateOnline () const throw (SignatureException)
- Public Member Functions inherited from digidoc::Signature
virtual ~Signature ()
std::string saveToXml () throw (IOException)
std::string getId () const
SignatureProductionPlace getProductionPlace () const
SignerRole getSignerRole () const
std::string getSigningTime () const
X509Cert getSigningCertificate () const throw (SignatureException)
std::string getSignatureMethod () const

Static Public Attributes

static const std::string MEDIA_TYPE = "signature/bdoc-1.0/BES"

Protected Member Functions

std::vector< unsigned char > prepareSignedInfo (Signer *singer) throw (SignatureException, SignException)
virtual void sign (Signer *signer) throw (SignatureException, SignException)
- Protected Member Functions inherited from digidoc::Signature
 Signature (unsigned int id)
 Signature (const std::string &path) throw (SignatureException)
void addReference (const std::string &uri, const std::string &digestUri, const std::vector< unsigned char > &digestValue, const std::string &type="") throw (SignatureException)
void setSigningCertificate (const X509Cert &cert)
void setSignatureProductionPlace (const SignatureProductionPlace &signatureProductionPlace)
void setSignerRole (const SignerRole &signerRole)
void setSigningTime (const xml_schema::DateTime &signingTime)
std::vector< unsigned char > getSignatureValue () const
void setSignatureValue (Signer::Signature signatureValue)
xades::SignedSignaturePropertiesType & getSignedSignatureProperties () const throw (SignatureException)
dsig::X509DataType::X509CertificateType & getSigningX509CertificateType () const throw (SignatureException)
std::vector< unsigned char > calcDigestOnNode (Digest *calc, const std::string &ns, const std::string &tagName) const throw (SignatureException)

Protected Attributes

const BDocbdoc
- Protected Attributes inherited from digidoc::Signature
dsig::SignatureType * signature

Private Member Functions

SignatureBESoperator= (SignatureBES const &that)
void checkSignature () const throw (SignatureException)
void checkSignedInfo () const throw (SignatureException)
void checkSignatureMethod () const throw (SignatureException)
void checkReferences () const throw (SignatureException)
void checkSignatureValue () const throw (SignatureException)
void checkSigningCertificate () const throw (SignatureException)
void checkKeyInfo () const throw (SignatureException)
void checkQualifyingProperties () const throw (SignatureException)
void checkSignedSignatureProperties () const throw (SignatureException)
bool isReferenceToSigProps (const digidoc::dsig::ReferenceType &refType) const throw (SignatureException)
void checkReferenceToSigProps (const digidoc::dsig::ReferenceType &refType) const throw (SignatureException)
void checkReferencesToDocs (dsig::SignedInfoType::ReferenceSequence &refSeq) const throw (SignatureException)
void checkDocumentRefDigest (Document &doc, const std::string &documentFileName, const dsig::ReferenceType &refType) const throw (SignatureException)

Additional Inherited Members

- Public Types inherited from digidoc::Signature
enum  CertStatus { GOOD, REVOKED, UNKNOWN }
- Static Protected Attributes inherited from digidoc::Signature
static const std::string XADES_NAMESPACE = "http://uri.etsi.org/01903/v1.3.2#"

Detailed Description

Definition at line 28 of file SignatureBES.h.

Constructor & Destructor Documentation

digidoc::SignatureBES::SignatureBES ( unsigned int  id,
const BDoc bdoc 
)

Creates an empty BDOC-BES signature with mandatory XML nodes.

Definition at line 48 of file SignatureBES.cpp.

digidoc::SignatureBES::SignatureBES ( const std::string &  path,
const BDoc bdoc 
) throw (SignatureException)
Parameters
path
Exceptions
SignatureException

Definition at line 59 of file SignatureBES.cpp.

References digidoc::Signature::getSignedSignatureProperties(), digidoc::Signature::getSigningX509CertificateType(), and THROW_SIGNATUREEXCEPTION.

Here is the call graph for this function:

digidoc::SignatureBES::~SignatureBES ( )
virtual

Definition at line 80 of file SignatureBES.cpp.

Member Function Documentation

void digidoc::SignatureBES::checkDocumentRefDigest ( Document doc,
const std::string &  documentFileName,
const dsig::ReferenceType &  refType 
) const throw (SignatureException)
private

Check if document digest matches with what reference claims

Definition at line 690 of file SignatureBES.cpp.

References DEBUGMEM, digidoc::Digest::isSupported(), and THROW_SIGNATUREEXCEPTION.

Here is the call graph for this function:

void digidoc::SignatureBES::checkQualifyingProperties ( ) const throw (SignatureException)
private

TODO: comment

Exceptions
SignatureExceptionon a problem in signature

Definition at line 465 of file SignatureBES.cpp.

References THROW_SIGNATUREEXCEPTION.

void digidoc::SignatureBES::checkReferences ( ) const throw (SignatureException)
private

Check that SignedInfo contains exactly one Reference to every document, plus one Reference to the SignedProperties

Exceptions
SignatureExceptionon a problem in signature

Definition at line 343 of file SignatureBES.cpp.

References THROW_SIGNATUREEXCEPTION.

void digidoc::SignatureBES::checkReferencesToDocs ( dsig::SignedInfoType::ReferenceSequence &  refSeq) const throw (SignatureException)
private

Offline check on every SignedInfo reference to a document.

Exceptions
SignatureExceptionon error in references

Definition at line 621 of file SignatureBES.cpp.

References digidoc::util::File::compareUri(), digidoc::Document::getFileName(), i, THROW_SIGNATUREEXCEPTION, and digidoc::util::File::toUri().

Here is the call graph for this function:

void digidoc::SignatureBES::checkReferenceToSigProps ( const digidoc::dsig::ReferenceType &  refType) const throw (SignatureException)
private

TODO: comment

Exceptions
SignatureExceptionon a problem in signature

Definition at line 547 of file SignatureBES.cpp.

References DEBUGMEM, i, digidoc::Digest::isSupported(), and THROW_SIGNATUREEXCEPTION.

Here is the call graph for this function:

void digidoc::SignatureBES::checkSignature ( ) const throw (SignatureException)
private

validate Signature element offline

Exceptions
SignatureExceptionon a problem in signature

Definition at line 308 of file SignatureBES.cpp.

void digidoc::SignatureBES::checkSignatureMethod ( ) const throw (SignatureException)
private

validate SignatureMethod offline

Exceptions
SignatureExceptionon a problem in signature

Definition at line 327 of file SignatureBES.cpp.

References THROW_SIGNATUREEXCEPTION.

void digidoc::SignatureBES::checkSignatureValue ( ) const throw (SignatureException)
private

Validate signature value.

Exceptions
throwsexception if signature value did not match.

Definition at line 740 of file SignatureBES.cpp.

References DEBUG, DEBUGMEM, e, digidoc::X509Cert::handle(), THROW_SIGNATUREEXCEPTION, and THROW_SIGNATUREEXCEPTION_CAUSE.

Here is the call graph for this function:

void digidoc::SignatureBES::checkSignedInfo ( ) const throw (SignatureException)
private

validate SignedInfo offline

Exceptions
SignatureExceptionon a problem in signature

Definition at line 318 of file SignatureBES.cpp.

void digidoc::SignatureBES::checkSignedSignatureProperties ( ) const throw (SignatureException)
private

TODO: comment

Exceptions
SignatureExceptionon a problem in signature

Definition at line 488 of file SignatureBES.cpp.

References THROW_SIGNATUREEXCEPTION.

void digidoc::SignatureBES::checkSigningCertificate ( ) const throw (SignatureException)
private

Check if signing certificate was issued by trusted party.

Exceptions
SignatureExceptionon a problem with signing certificate

Definition at line 501 of file SignatureBES.cpp.

References e, digidoc::X509Cert::getKeyUsage(), digidoc::X509Cert::NonRepudiation, THROW_SIGNATUREEXCEPTION, THROW_SIGNATUREEXCEPTION_CAUSE, and digidoc::X509Cert::verify().

Here is the call graph for this function:

std::string digidoc::SignatureBES::getMediaType ( ) const
virtual
Returns
returns signature mimetype.

Implements digidoc::Signature.

Reimplemented in digidoc::SignatureTM.

Definition at line 85 of file SignatureBES.cpp.

bool digidoc::SignatureBES::isReferenceToSigProps ( const digidoc::dsig::ReferenceType &  refType) const throw (SignatureException)
private

Check SignedInfo->Reference Type attribute is "http://uri.etsi.org/01903#SignedProperties"

Parameters
refTypeSignedInfo->Reference element to check
Returns
refType Type attribute is http://uri.etsi.org/01903#SignedProperties
Exceptions
SignatureExceptionon a problem in signature

Definition at line 522 of file SignatureBES.cpp.

SignatureBES& digidoc::SignatureBES::operator= ( SignatureBES const &  that)
private
std::vector< unsigned char > digidoc::SignatureBES::prepareSignedInfo ( Signer signer) throw (SignatureException, SignException)
protected

Prepares SignedInfo

Parameters
signersigner that signs the signature object.
Exceptions
SignatureExceptionexception is throws if signing failed.

Definition at line 217 of file SignatureBES.cpp.

References digidoc::Document::calcDigest(), digidoc::util::date::currentTime(), DEBUG, DEBUGMEM, e, digidoc::Document::getFileName(), digidoc::Document::getMediaType(), digidoc::Digest::getUri(), i, THROW_SIGNEXCEPTION_CAUSE, and digidoc::util::File::toUri().

Here is the call graph for this function:

std::vector< std::string > digidoc::SignatureBES::referenceDigestMethods ( ) const

Returns all references digest method uris

Returns

Definition at line 201 of file SignatureBES.cpp.

References i.

void digidoc::SignatureBES::sign ( Signer signer) throw (SignatureException, SignException)
protectedvirtual

Sign the signature using BDOC-BES profile. Sets required fields, calculates digests and finally signs the signature object using the provided signer implementation.

Parameters
signersigner that signs the signature object.
Exceptions
SignatureExceptionexception is throws if signing failed.

Implements digidoc::Signature.

Reimplemented in digidoc::SignatureTM.

Definition at line 282 of file SignatureBES.cpp.

References e, int(), THROW_SIGNEXCEPTION_CAUSE, digidoc::Signer::Digest::type, and validateOffline().

Referenced by digidoc::SignatureTM::sign().

Here is the call graph for this function:

Here is the caller graph for this function:

void digidoc::SignatureBES::validateOffline ( ) const throw (SignatureException)
virtual

Check if signature is valid according to BDoc-BES format. Performs any off-line checks that prove mathematical correctness. However, there is no warranty against if the signature has expired. On-line validation should be performed to check for signature expiration.

Exceptions
SignatureExceptioncontaining details on what's wrong in this signature.

Implements digidoc::Signature.

Reimplemented in digidoc::SignatureTM.

Definition at line 98 of file SignatureBES.cpp.

References digidoc::Exception::addCause(), e, and digidoc::Exception::hasCause().

Referenced by sign(), and digidoc::SignatureTM::validateOffline().

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

const BDoc& digidoc::SignatureBES::bdoc
protected

Definition at line 46 of file SignatureBES.h.

const std::string digidoc::SignatureBES::MEDIA_TYPE = "signature/bdoc-1.0/BES"
static

BES profile signature media type.

Definition at line 40 of file SignatureBES.h.

Referenced by digidoc::BDoc::parseManifestAndLoadFiles().


The documentation for this class was generated from the following files: