Package eu.europa.esig.dss.spi.signature
Class DefaultAdvancedSignature
java.lang.Object
eu.europa.esig.dss.spi.signature.DefaultAdvancedSignature
- All Implemented Interfaces:
IdentifierBasedObject
,AdvancedSignature
,Serializable
- Direct Known Subclasses:
CAdESSignature
,JAdESSignature
,XAdESSignature
A common implementation of
AdvancedSignature
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected List
<AdvancedSignature> Cached list of embedded counter signaturesprotected List
<DSSDocument> In case of a detached signature this is the signed document.protected ManifestFile
In case of a ASiC-E signature this is the found related manifest file.protected SignatureCertificateSource
Cached offline signature certificate sourceprotected List
<ReferenceValidation> This variable contains a list of reference validations (reference tag for XAdES or message-digest for CAdES)protected OfflineCRLSource
Cached offline signature CRL sourceprotected SignatureCryptographicVerification
This variable contains the result of the signature mathematical validation.protected SignatureIdentifier
Unique signature identifierprotected OfflineOCSPSource
Cached offline signature OCSP sourceprotected SignaturePolicy
The SignaturePolicy identifierprotected TimestampSource
Cached offline signature timestamp sourceprotected CertificateSource
The certificate source of a signing certificateA list of error messages occurred during a structure validation -
Constructor Summary
ModifierConstructorDescriptionprotected
Default constructor instantiating object with null values -
Method Summary
Modifier and TypeMethodDescriptionvoid
addExternalEvidenceRecord
(EvidenceRecord evidenceRecord) Adds an evidence record covering the signature fileboolean
Checks if all certificate chains present in the signature are self-signedprotected abstract SignaturePolicy
This method extracts a signature policy from a signature and builds the objectprotected abstract BaselineRequirementsChecker
createBaselineRequirementsChecker
(CertificateVerifier certificateVerifier) Instantiates aBaselineRequirementsChecker
according to the signature formatboolean
protected abstract List
<SignatureScope> Finds signature scopesReturns a list of all evidence recordsReturns a list of all timestamps found in the signatureReturns the archive Timestampsprotected BaselineRequirementsChecker
Returns a cached instance of theBaselineRequirementsChecker
ETSI TS 101 733 V2.2.1 (2013-04) 5.6.3 Signature Verification Process ...the public key from the first certificate identified in the sequence of certificate identifiers from SigningCertificate shall be the key used to verify the digital signature.Returns an unmodifiable list of all certificate tokens encapsulated in the signatureGets a ListCertificateSource representing a merged source fromsignatureCertificateSource
and all included to the signature timestamp objectsGets a ListRevocationSource representing a merged source fromsignatureCRLSourse
and all included to the signature timestamp objectsGets a ListRevocationSource representing a merged source fromsignatureOCSPSourse
and all included to the signature timestamp objectsReturns container's contentReturns the content timestampsprotected ListCertificateSource
Returns a merged certificate source for values incorporated within counter signaturesprotected ListRevocationSource
<CRL> Returns a merged CRL source for values incorporated within counter signaturesprotected ListRevocationSource
<OCSP> Returns a merged OCSP source for values incorporated within counter signaturesReturns detached contentsReturns a list of detached evidence recordsReturns a list of detached timestamps NOTE: used for ASiC with CAdES onlyReturns a list of timestamps defined with the 'DocTimeStamp' type NOTE: applicable only for PAdESgetDSSId()
This method returns theSignatureIdentifier
.Returns a list of embedded evidence recordsgetId()
This method returns the DSS unique signature id.This method returns a relatedManifestFile
in the case of ASiC-E signature.Gets master signatureGets signature's cryptographic validation resultThis method returns the signature filename (useful for ASiC and multiple signature files)protected abstract SignatureIdentifierBuilder
Returns a builder to define and build a signature IdReturns the Signature Policy OID from the signature.Returns a list of found SignatureScopesReturns the signature timestampsReturns the list of roles of the signer.This method returns the signing certificate token or null if there is no valid signing certificate.Returns a message if the structure validation failsReturns the time-stamp which is placed on the digital signature (XAdES example: ds:SignatureValue element), the signature time-stamp(s) present in the AdES-T form, the certification path references and the revocation status references.Returns the time-stamp which is computed over the concatenation of CompleteCertificateRefs and CompleteRevocationRefs elements (XAdES example).boolean
Checks the presence of ArchiveTimeStamp element in the signature, what is the proof -A profile existenceboolean
Checks the presence of signing certificate covered by the signature, what is the proof -BES profile existenceboolean
Checks if the signature is conformant to AdES-BASELINE-B levelboolean
Checks the presence of CompleteCertificateRefs and CompleteRevocationRefs segments in the signature, what is the proof -C profile existenceboolean
Checks the presence of SignaturePolicyIdentifier element in the signature, what is the proof -EPES profile existenceboolean
Checks the presence of SignatureTimeStamp element in the signature, what is the proof -T profile existenceint
hashCode()
boolean
Checks if the LTA-level is present in the signatureboolean
Checks if the LT-level is present in the signatureboolean
Checks if the T-level is present in the signatureboolean
Checks the presence of CertificateValues/RevocationValues segment in the signature, what is the proof -XL profile existenceboolean
Checks the presence of SigAndRefsTimeStamp segment in the signature, what is the proof -X profile existencevoid
initBaselineRequirementsChecker
(CertificateVerifier certificateVerifier) This method creates an offline copy ofcertificateVerifier
and instantiates aBaselineRequirementsChecker
boolean
Checks if the current signature is a counter signature (i.e. has a Master signature)boolean
Returns true if the validation of the signature has been performed only on Signer's Document Representation (SDR).boolean
Returns true if the validation of the signature has been performed only on Data To Be Signed Representation (DTBSR).void
This method resets the source of certificates.void
This method resets the sources of the revocation data.void
This method resets the timestamp source.void
setContainerContents
(List<DSSDocument> containerContents) This method allows to set the archive container contents in the case of ASiC-S signature.void
setDetachedContents
(List<DSSDocument> detachedContents) This method allows to set the signed contents in the case of the detached signature.void
setManifestFile
(ManifestFile manifestFile) This method allows to set a manifest file in the case of ASiC-E signature.void
setMasterSignature
(AdvancedSignature masterSignature) This setter allows to indicate the master signature.void
setSignatureFilename
(String signatureFilename) This method allows to set the signature filename (useful in case of ASiC)void
setSigningCertificateSource
(CertificateSource signingCertificateSource) Set a certificate source which allows to find the signing certificate by kid or certificate's digesttoString()
This method processes the structure validation of the signature.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface eu.europa.esig.dss.spi.signature.AdvancedSignature
addExternalTimestamp, checkSignatureIntegrity, getCertificateSource, getCertifiedSignerRoles, getClaimedSignerRoles, getCommitmentTypeIndications, getContentType, getCounterSignatures, getCRLSource, getDAIdentifier, getDataFoundUpToLevel, getDataToBeSignedRepresentation, getDigestAlgorithm, getEncryptionAlgorithm, getMaskGenerationFunction, getMimeType, getOCSPSource, getReferenceValidations, getSignatureAlgorithm, getSignatureDigestReference, getSignatureForm, getSignaturePolicyStore, getSignatureProductionPlace, getSignatureValue, getSignedAssertions, getSigningTime, getTimestampSource
-
Field Details
-
detachedContents
In case of a detached signature this is the signed document. -
manifestFile
In case of a ASiC-E signature this is the found related manifest file. -
referenceValidations
This variable contains a list of reference validations (reference tag for XAdES or message-digest for CAdES) -
signatureCryptographicVerification
This variable contains the result of the signature mathematical validation. It is initialised when the methodcheckSignatureIntegrity
is called. -
structureValidationMessages
-
signingCertificateSource
The certificate source of a signing certificate -
offlineCertificateSource
Cached offline signature certificate source -
signatureCRLSource
Cached offline signature CRL source -
signatureOCSPSource
Cached offline signature OCSP source -
signatureTimestampSource
Cached offline signature timestamp source -
counterSignatures
Cached list of embedded counter signatures -
signaturePolicy
The SignaturePolicy identifier -
signatureIdentifier
Unique signature identifier
-
-
Constructor Details
-
DefaultAdvancedSignature
protected DefaultAdvancedSignature()Default constructor instantiating object with null values
-
-
Method Details
-
getSignatureIdentifierBuilder
Returns a builder to define and build a signature Id- Returns:
SignatureIdentifierBuilder
-
setSigningCertificateSource
Description copied from interface:AdvancedSignature
Set a certificate source which allows to find the signing certificate by kid or certificate's digest- Specified by:
setSigningCertificateSource
in interfaceAdvancedSignature
- Parameters:
signingCertificateSource
- the certificate source to resolve missing signing certificate
-
getSignatureFilename
Description copied from interface:AdvancedSignature
This method returns the signature filename (useful for ASiC and multiple signature files)- Specified by:
getSignatureFilename
in interfaceAdvancedSignature
- Returns:
- the signature filename
-
setSignatureFilename
Description copied from interface:AdvancedSignature
This method allows to set the signature filename (useful in case of ASiC)- Specified by:
setSignatureFilename
in interfaceAdvancedSignature
- Parameters:
signatureFilename
-String
-
getDetachedContents
Description copied from interface:AdvancedSignature
Returns detached contents- Specified by:
getDetachedContents
in interfaceAdvancedSignature
- Returns:
- in the case of the detached signature this is the
List
of signed contents.
-
setDetachedContents
Description copied from interface:AdvancedSignature
This method allows to set the signed contents in the case of the detached signature.- Specified by:
setDetachedContents
in interfaceAdvancedSignature
- Parameters:
detachedContents
-List
ofDSSDocument
representing the signed detached contents.
-
getContainerContents
Description copied from interface:AdvancedSignature
Returns container's content- Specified by:
getContainerContents
in interfaceAdvancedSignature
- Returns:
- in case of ASiC-S signature returns a list of an archive container documents
-
setContainerContents
Description copied from interface:AdvancedSignature
This method allows to set the archive container contents in the case of ASiC-S signature.- Specified by:
setContainerContents
in interfaceAdvancedSignature
- Parameters:
containerContents
-List
ofDSSDocument
representing the archive container contents.
-
getManifestFile
Description copied from interface:AdvancedSignature
This method returns a relatedManifestFile
in the case of ASiC-E signature.- Specified by:
getManifestFile
in interfaceAdvancedSignature
- Returns:
- manifestFile
ManifestFile
-
setManifestFile
Description copied from interface:AdvancedSignature
This method allows to set a manifest file in the case of ASiC-E signature.- Specified by:
setManifestFile
in interfaceAdvancedSignature
- Parameters:
manifestFile
-ManifestFile
-
getDSSId
Description copied from interface:AdvancedSignature
This method returns theSignatureIdentifier
.- Specified by:
getDSSId
in interfaceAdvancedSignature
- Specified by:
getDSSId
in interfaceIdentifierBasedObject
- Returns:
- unique
SignatureIdentifier
-
getId
Description copied from interface:AdvancedSignature
This method returns the DSS unique signature id. It allows to unambiguously identify each signature.- Specified by:
getId
in interfaceAdvancedSignature
- Returns:
- The signature unique Id
-
getCompleteCertificateSource
Description copied from interface:AdvancedSignature
Gets a ListCertificateSource representing a merged source fromsignatureCertificateSource
and all included to the signature timestamp objects- Specified by:
getCompleteCertificateSource
in interfaceAdvancedSignature
- Returns:
ListCertificateSource
-
getCompleteCRLSource
Description copied from interface:AdvancedSignature
Gets a ListRevocationSource representing a merged source fromsignatureCRLSourse
and all included to the signature timestamp objects- Specified by:
getCompleteCRLSource
in interfaceAdvancedSignature
- Returns:
ListRevocationSource
-
getCompleteOCSPSource
Description copied from interface:AdvancedSignature
Gets a ListRevocationSource representing a merged source fromsignatureOCSPSourse
and all included to the signature timestamp objects- Specified by:
getCompleteOCSPSource
in interfaceAdvancedSignature
- Returns:
ListRevocationSource
-
getCounterSignaturesCertificateSource
Returns a merged certificate source for values incorporated within counter signatures- Returns:
ListCertificateSource
-
getCounterSignaturesCRLSource
Returns a merged CRL source for values incorporated within counter signatures- Returns:
- CRL
ListRevocationSource
-
getCounterSignaturesOCSPSource
Returns a merged OCSP source for values incorporated within counter signatures- Returns:
- OCSP
ListRevocationSource
-
resetCertificateSource
public void resetCertificateSource()This method resets the source of certificates. It must be called when any certificate is added to the KeyInfo or CertificateValues (XAdES), or 'xVals' (JAdES). NOTE: used in XAdES and JAdES -
resetRevocationSources
public void resetRevocationSources()This method resets the sources of the revocation data. It must be called when -LT level is created. NOTE: used in XAdES and JAdES -
resetTimestampSource
public void resetTimestampSource()This method resets the timestamp source. It must be called when -LT level is created. NOTE: used in XAdES and JAdES -
getCandidatesForSigningCertificate
ETSI TS 101 733 V2.2.1 (2013-04) 5.6.3 Signature Verification Process ...the public key from the first certificate identified in the sequence of certificate identifiers from SigningCertificate shall be the key used to verify the digital signature.- Specified by:
getCandidatesForSigningCertificate
in interfaceAdvancedSignature
- Returns:
CandidatesForSigningCertificate
-
initBaselineRequirementsChecker
Description copied from interface:AdvancedSignature
This method creates an offline copy ofcertificateVerifier
and instantiates aBaselineRequirementsChecker
- Specified by:
initBaselineRequirementsChecker
in interfaceAdvancedSignature
- Parameters:
certificateVerifier
-CertificateVerifier
-
getCertificates
Returns an unmodifiable list of all certificate tokens encapsulated in the signature- Specified by:
getCertificates
in interfaceAdvancedSignature
- Returns:
- a list of certificate contained within the signature
- See Also:
-
setMasterSignature
Description copied from interface:AdvancedSignature
This setter allows to indicate the master signature. It means that this is a countersignature.- Specified by:
setMasterSignature
in interfaceAdvancedSignature
- Parameters:
masterSignature
-AdvancedSignature
-
getMasterSignature
Description copied from interface:AdvancedSignature
Gets master signature- Specified by:
getMasterSignature
in interfaceAdvancedSignature
- Returns:
AdvancedSignature
-
isCounterSignature
public boolean isCounterSignature()Description copied from interface:AdvancedSignature
Checks if the current signature is a counter signature (i.e. has a Master signature)- Specified by:
isCounterSignature
in interfaceAdvancedSignature
- Returns:
- TRUE if it is a counter signature, FALSE otherwise
-
getSignatureCryptographicVerification
Description copied from interface:AdvancedSignature
Gets signature's cryptographic validation result- Specified by:
getSignatureCryptographicVerification
in interfaceAdvancedSignature
- Returns:
- SignatureCryptographicVerification with all the information collected during the validation process.
-
getSignerRoles
Description copied from interface:AdvancedSignature
Returns the list of roles of the signer.- Specified by:
getSignerRoles
in interfaceAdvancedSignature
- Returns:
- list of the
SignerRole
s
-
getSigningCertificateToken
Description copied from interface:AdvancedSignature
This method returns the signing certificate token or null if there is no valid signing certificate. Note that to determinate the signing certificate the signature must be validated: the methodcheckSignatureIntegrity
must be called.- Specified by:
getSigningCertificateToken
in interfaceAdvancedSignature
- Returns:
CertificateToken
-
getStructureValidationResult
Description copied from interface:AdvancedSignature
Returns a message if the structure validation fails- Specified by:
getStructureValidationResult
in interfaceAdvancedSignature
- Returns:
- a list of
String
error messages if validation fails, an empty list if structural validation succeeds
-
validateStructure
-
getSignatureScopes
Description copied from interface:AdvancedSignature
Returns a list of found SignatureScopes- Specified by:
getSignatureScopes
in interfaceAdvancedSignature
- Returns:
- a list of
SignatureScope
s
-
findSignatureScopes
Finds signature scopes- Returns:
- a list of
SignatureScope
s
-
getContentTimestamps
Description copied from interface:AdvancedSignature
Returns the content timestamps- Specified by:
getContentTimestamps
in interfaceAdvancedSignature
- Returns:
List
ofTimestampToken
-
getSignatureTimestamps
Description copied from interface:AdvancedSignature
Returns the signature timestamps- Specified by:
getSignatureTimestamps
in interfaceAdvancedSignature
- Returns:
List
ofTimestampToken
-
getTimestampsX1
Description copied from interface:AdvancedSignature
Returns the time-stamp which is placed on the digital signature (XAdES example: ds:SignatureValue element), the signature time-stamp(s) present in the AdES-T form, the certification path references and the revocation status references.- Specified by:
getTimestampsX1
in interfaceAdvancedSignature
- Returns:
List
ofTimestampToken
-
getTimestampsX2
Description copied from interface:AdvancedSignature
Returns the time-stamp which is computed over the concatenation of CompleteCertificateRefs and CompleteRevocationRefs elements (XAdES example).- Specified by:
getTimestampsX2
in interfaceAdvancedSignature
- Returns:
List
ofTimestampToken
-
getArchiveTimestamps
Description copied from interface:AdvancedSignature
Returns the archive Timestamps- Specified by:
getArchiveTimestamps
in interfaceAdvancedSignature
- Returns:
List
ofTimestampToken
s
-
getDocumentTimestamps
Description copied from interface:AdvancedSignature
Returns a list of timestamps defined with the 'DocTimeStamp' type NOTE: applicable only for PAdES- Specified by:
getDocumentTimestamps
in interfaceAdvancedSignature
- Returns:
List
ofTimestampToken
s
-
getDetachedTimestamps
Description copied from interface:AdvancedSignature
Returns a list of detached timestamps NOTE: used for ASiC with CAdES only- Specified by:
getDetachedTimestamps
in interfaceAdvancedSignature
- Returns:
- a list of
TimestampToken
s
-
getAllTimestamps
Description copied from interface:AdvancedSignature
Returns a list of all timestamps found in the signature- Specified by:
getAllTimestamps
in interfaceAdvancedSignature
- Returns:
List
ofTimestampToken
s
-
getEmbeddedEvidenceRecords
Description copied from interface:AdvancedSignature
Returns a list of embedded evidence records- Specified by:
getEmbeddedEvidenceRecords
in interfaceAdvancedSignature
- Returns:
- a list of
EvidenceRecord
s
-
addExternalEvidenceRecord
Description copied from interface:AdvancedSignature
Adds an evidence record covering the signature file- Specified by:
addExternalEvidenceRecord
in interfaceAdvancedSignature
- Parameters:
evidenceRecord
-EvidenceRecord
-
getDetachedEvidenceRecords
Description copied from interface:AdvancedSignature
Returns a list of detached evidence records- Specified by:
getDetachedEvidenceRecords
in interfaceAdvancedSignature
- Returns:
- a list of
EvidenceRecord
s
-
getAllEvidenceRecords
Description copied from interface:AdvancedSignature
Returns a list of all evidence records- Specified by:
getAllEvidenceRecords
in interfaceAdvancedSignature
- Returns:
- a list of
EvidenceRecord
s
-
getSignaturePolicy
Description copied from interface:AdvancedSignature
Returns the Signature Policy OID from the signature.- Specified by:
getSignaturePolicy
in interfaceAdvancedSignature
- Returns:
SignaturePolicy
-
buildSignaturePolicy
This method extracts a signature policy from a signature and builds the object- Returns:
SignaturePolicy
-
getBaselineRequirementsChecker
Returns a cached instance of theBaselineRequirementsChecker
- Returns:
BaselineRequirementsChecker
-
createBaselineRequirementsChecker
protected abstract BaselineRequirementsChecker createBaselineRequirementsChecker(CertificateVerifier certificateVerifier) Instantiates aBaselineRequirementsChecker
according to the signature format- Parameters:
certificateVerifier
-CertificateVerifier
to be used- Returns:
BaselineRequirementsChecker
-
hasBProfile
public boolean hasBProfile()Description copied from interface:AdvancedSignature
Checks if the signature is conformant to AdES-BASELINE-B level- Specified by:
hasBProfile
in interfaceAdvancedSignature
- Returns:
- TRUE if the B-level is present, FALSE otherwise
-
hasTProfile
public boolean hasTProfile()Description copied from interface:AdvancedSignature
Checks if the T-level is present in the signature- Specified by:
hasTProfile
in interfaceAdvancedSignature
- Returns:
- TRUE if the T-level is present, FALSE otherwise
-
hasLTProfile
public boolean hasLTProfile()Description copied from interface:AdvancedSignature
Checks if the LT-level is present in the signature- Specified by:
hasLTProfile
in interfaceAdvancedSignature
- Returns:
- TRUE if the LT-level is present, FALSE otherwise
-
hasLTAProfile
public boolean hasLTAProfile()Description copied from interface:AdvancedSignature
Checks if the LTA-level is present in the signature- Specified by:
hasLTAProfile
in interfaceAdvancedSignature
- Returns:
- TRUE if the LTA-level is present, FALSE otherwise
-
hasBESProfile
public boolean hasBESProfile()Description copied from interface:AdvancedSignature
Checks the presence of signing certificate covered by the signature, what is the proof -BES profile existence- Specified by:
hasBESProfile
in interfaceAdvancedSignature
- Returns:
- true if BES Profile is detected
-
hasEPESProfile
public boolean hasEPESProfile()Description copied from interface:AdvancedSignature
Checks the presence of SignaturePolicyIdentifier element in the signature, what is the proof -EPES profile existence- Specified by:
hasEPESProfile
in interfaceAdvancedSignature
- Returns:
- true if EPES Profile is detected
-
hasExtendedTProfile
public boolean hasExtendedTProfile()Description copied from interface:AdvancedSignature
Checks the presence of SignatureTimeStamp element in the signature, what is the proof -T profile existence- Specified by:
hasExtendedTProfile
in interfaceAdvancedSignature
- Returns:
- true if T Profile is detected
-
hasCProfile
public boolean hasCProfile()Description copied from interface:AdvancedSignature
Checks the presence of CompleteCertificateRefs and CompleteRevocationRefs segments in the signature, what is the proof -C profile existence- Specified by:
hasCProfile
in interfaceAdvancedSignature
- Returns:
- true if C Profile is detected
-
hasXProfile
public boolean hasXProfile()Description copied from interface:AdvancedSignature
Checks the presence of SigAndRefsTimeStamp segment in the signature, what is the proof -X profile existence- Specified by:
hasXProfile
in interfaceAdvancedSignature
- Returns:
- true if the -X extension is present
-
hasXLProfile
public boolean hasXLProfile()Description copied from interface:AdvancedSignature
Checks the presence of CertificateValues/RevocationValues segment in the signature, what is the proof -XL profile existence- Specified by:
hasXLProfile
in interfaceAdvancedSignature
- Returns:
- true if the -XL extension is present
-
hasAProfile
public boolean hasAProfile()Description copied from interface:AdvancedSignature
Checks the presence of ArchiveTimeStamp element in the signature, what is the proof -A profile existence- Specified by:
hasAProfile
in interfaceAdvancedSignature
- Returns:
- true if the -A extension is present
-
areAllSelfSignedCertificates
public boolean areAllSelfSignedCertificates()Description copied from interface:AdvancedSignature
Checks if all certificate chains present in the signature are self-signed- Specified by:
areAllSelfSignedCertificates
in interfaceAdvancedSignature
- Returns:
- TRUE if all certificates are self-signed, false otherwise
-
isDocHashOnlyValidation
public boolean isDocHashOnlyValidation()Description copied from interface:AdvancedSignature
Returns true if the validation of the signature has been performed only on Signer's Document Representation (SDR). (An SDR typically is built on a cryptographic hash of the Signer's Document)- Specified by:
isDocHashOnlyValidation
in interfaceAdvancedSignature
- Returns:
- true of it is DocHashOnly validation, false otherwise
-
isHashOnlyValidation
public boolean isHashOnlyValidation()Description copied from interface:AdvancedSignature
Returns true if the validation of the signature has been performed only on Data To Be Signed Representation (DTBSR). EN 319 102-1 v1.1.1 (4.2.8 Data to be signed representation (DTBSR)): The DTBS preparation component shall take the DTBSF and hash it according to the hash algorithm specified in the cryptographic suite. The result of this process is the DTBSR, which is then used to create the signature. NOTE: In order for the produced hash to be representative of the DTBSF, the hashing function has the property that it is computationally infeasible to find collisions for the expected signature lifetime. Should the hash function become weak in the future, additional security measures, such as applying time-stamp tokens, can be taken.- Specified by:
isHashOnlyValidation
in interfaceAdvancedSignature
- Returns:
- true of it is HashOnly validation, false otherwise
-
equals
-
hashCode
-
toString
-