Package eu.europa.esig.dss.jades
Class DSSJsonUtils
java.lang.Object
eu.europa.esig.dss.jades.DSSJsonUtils
Utility class for working with JSON objects
-
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionstatic booleanareAllBase64UrlComponents(List<Object> components) Checks if the all components are base64Url encodedstatic booleancheckComponentsUnicity(List<Object> components) Checks if all components have one type (strings or objects)static Stringconcatenate(String... strings) Concatenates the given strings with a '.' (dot) between.static byte[]concatenateDSSDocuments(List<DSSDocument> documents, boolean isBase64UrlEncoded) Concatenates document octets to a single byte arraystatic JAdESSignatureextractJAdESCounterSignature(EtsiUComponent cSigAttribute, JAdESSignature masterSignature) Extracts a counter signature from 'cSig' value with respect to the found formatThis method extracts a key set used within a JOSE Header (protected + unprotected)static byte[]fromBase64Url(String base64UrlEncoded) Returns the decoded binary for a base64url encoded stringstatic StringgenerateKid(CertificateToken signingCertificate) Generates the 'kid' value as in IETF RFC 5035static BooleangetAsBoolean(Map<?, ?> map, String key) Gets a value from themapunder the givenkeyasBooleanstatic byte[]getAsciiBytes(String str) Returns ASCII-encoded arraystatic List<?>Gets a value from themapunder the givenkeyasListstatic Map<?,?> Gets a value from themapunder the givenkeyasMapstatic StringgetAsString(Map<?, ?> map, String key) Gets a value from themapunder the givenkeyasStringstatic DateParses a IETF RFC 3339 dateTime Stringstatic DigestCreates aDigestobject from a JSON structurestatic byte[]getDocumentOctets(DSSDocument document, boolean isBase64UrlEncoded) This method returns binaries of thedocumentto be used for payload computation, depending on theisBase64UrlEncodedparameter.This method returns the etsiU container with the unsigned properties or an empty Liststatic org.bouncycastle.asn1.x509.IssuerSerialgetIssuerSerial(String value) Parses the 'kid' header value as in IETF RFC 5035static JsonObjectgetOidObject(ObjectIdentifier objectIdentifier) Creates an 'oid' LinkedJSONObject according to EN 119-182 ch.static JsonObjectgetOidObject(String uri, String desc, String[] docRefs) Creates an 'oid' JsonObject according to EN 119-182 ch.static byte[]getSigningInputBytes(JWS jws) This method computes the signing input bytes for a JWS signatureReturns set of supported protected critical headersstatic JsonObjectgetTstContainer(List<TimestampBinary> timestampBinaries, String canonicalizationMethodUri) Creates a 'tstContainer' JsonObject according to EN 119-182 ch.static List<EtsiUComponent>getUnsignedPropertiesWithHeaderName(JAdESEtsiUHeader etsiUHeader, String headerName) Returns a list of unsigned 'etsiU' properties matching theheaderNamefrom thejwsstatic StringgetUriOrUrnOid(ObjectIdentifier objectIdentifier) Returns URI if present, otherwise URN encoded OID (see RFC 3061) Returns NULL if non of them is presentstatic booleanisAllowedSignatureDocumentType(DSSDocument document) Checks if the signature document has an allowed type (bytes can be extracted)static booleanisBase64UrlEncoded(byte b) Checks if the byte is Base64Url encodedstatic booleanisBase64UrlEncoded(String str) Checks if the provided string is base64Url encodedstatic booleanisCriticalHeaderException(String headerName) Checks if the givenheaderNameis a critical header exception (shall not be incorporated within 'crit' header).static booleanisJsonDocument(DSSDocument document) Checks if the provided document is JSON documentstatic booleanisStringFormat(Object object) Checks of the object is an instance of a String classstatic booleanisUrlSafe(byte b) Checks if the given byte is url safe See RFC 7797 : 5.2.static booleanisUrlSafePayload(String payloadString) Checks if the payload is JWS URL safe See RFC 7797 : 5.2.static booleanisUtf8(byte[] binaries) Checks if the binaries contain a UTF-8 encoded stringparseEtsiUComponent(Object etsiUComponent) Parses 'etsiU' component as it is (base64url-encoded or JSON), and returns the resulting Mapstatic SpDocSpecificationparseSPDocSpecification(Object spDocSpecificationObject) This method buildsSpDocSpecificationfrom the provided JSON object elementstatic StringtoBase64Url(byte[] binary) Returns a base64Url encoded stringstatic StringtoBase64Url(DSSDocument document) Returns a base64Url encoded stringstatic StringtoBase64Url(Object object) Returns a base64Url encoded string from the provided JSON Object or JSON Arraystatic BooleanMethod safely convertsObjecttoBooleanif possible.static JWSJsonSerializationObjectConverts theJWStoJWSJsonSerializationObjectstatic List<?>Method safely convertsObjecttoListif possible.static List<?>Method safely convertsObjecttoListif possible.toListOfNumbers(List<?> list) Converts a list of objects to a list ofNumberstoListOfStrings(List<?> list) Converts a list of objects to a list ofStringsstatic Map<?,?> Method safely convertsObjecttoMapif possible.static Map<?,?> Method safely convertsObjecttoMapif possible.static StringMethod safely convertsObjecttoStringif possiblestatic StringMethod safely convertsObjecttoStringif possible.ValidatesJWSagainst a JAdES schema (ETSI TS 119 182-1)static voidwriteDocumentsDigest(List<DSSDocument> documents, boolean isBase64UrlEncoded, DSSMessageDigestCalculator digestCalculator) Writes digest on a concatenated binaries of provideddocuments
-
Field Details
-
MIME_TYPE_APPLICATION_PREFIX
The MimeType application prefix- See Also:
-
HTTP_HEADER_DIGEST
The HttpHeader defining the Digest value of a signed message body- See Also:
-
CONTENT_ENCODING_BINARY
The binary content encoding (RFC 2045)- See Also:
-
-
Method Details
-
getAsciiBytes
Returns ASCII-encoded array- Parameters:
str-Stringto encode to ASCII- Returns:
- byte array
-
toBase64Url
Returns a base64Url encoded string- Parameters:
binary- a byte array to encode- Returns:
- base64Url encoded
String
-
toBase64Url
Returns a base64Url encoded string- Parameters:
document-DSSDocumentto encode- Returns:
- base64Url encoded
String
-
toBase64Url
Returns a base64Url encoded string from the provided JSON Object or JSON Array- Parameters:
object- JSON Object or JSON Array to encode- Returns:
- base64Url encoded
String
-
fromBase64Url
Returns the decoded binary for a base64url encoded string- Parameters:
base64UrlEncoded- the String to be decoded- Returns:
- the decoded binary
-
isBase64UrlEncoded
Checks if the provided string is base64Url encoded- Parameters:
str-Stringto check- Returns:
- TRUE if the String is base64Url encoded, FALSE otherwise
-
isBase64UrlEncoded
public static boolean isBase64UrlEncoded(byte b) Checks if the byte is Base64Url encoded- Parameters:
b- a byte to check- Returns:
- TRUE if the byte is Base64Url encoded, FALSE otherwise
-
isUrlSafePayload
Checks if the payload is JWS URL safe See RFC 7797 : 5.2. Unencoded JWS Compact Serialization Payload- Parameters:
payloadString-Stringrepresenting a payload- Returns:
- TRUE if the payload is URL safe, FALSE otherwise
-
isUrlSafe
public static boolean isUrlSafe(byte b) Checks if the given byte is url safe See RFC 7797 : 5.2. Unencoded JWS Compact Serialization Payload- Parameters:
b- a byte to check- Returns:
- TRUE if the byte is url-safe, FALSE otherwise
-
isUtf8
public static boolean isUtf8(byte[] binaries) Checks if the binaries contain a UTF-8 encoded string- Parameters:
binaries- byte array to check- Returns:
- TRUE if binaries contain a UTF-8 encoded string, FALSE otherwise
-
concatenate
Concatenates the given strings with a '.' (dot) between. Example: "xxx", "yyy", "zzz" to "xxx.yyy.zzz"- Parameters:
strings- a list ofStrings to concatenate- Returns:
- a concatenation string result
-
getSupportedProtectedCriticalHeaders
Returns set of supported protected critical headers- Returns:
- set of supported protected critical header strings
-
isCriticalHeaderException
Checks if the givenheaderNameis a critical header exception (shall not be incorporated within 'crit' header). See RFC 7515- Parameters:
headerName-Stringheader name to check- Returns:
- TRUE if the header is critical header exception, FALSE otherwise
-
getDigest
Creates aDigestobject from a JSON structure- Parameters:
digestValueAndAlgo- a Map with digAlg and digVal values- Returns:
- an instance of Digest or null
-
getOidObject
Creates an 'oid' LinkedJSONObject according to EN 119-182 ch. 5.4.1 The oId data type- Parameters:
objectIdentifier-ObjectIdentifierto create an 'oid' from- Returns:
- 'oid'
JsonObject
-
getUriOrUrnOid
Returns URI if present, otherwise URN encoded OID (see RFC 3061) Returns NULL if non of them is present- Parameters:
objectIdentifier-ObjectIdentifierused to build an object of 'oid' type- Returns:
StringURI
-
getOidObject
Creates an 'oid' JsonObject according to EN 119-182 ch. 5.4.1 The oId data type- Parameters:
uri-StringURI defining the object. The property is REQUIRED.desc-Stringthe object description. The property is OPTIONAL.docRefs- an array ofStringURIs containing any other additional information about the object. The property is OPTIONAL.- Returns:
- 'oid'
JsonObject
-
getTstContainer
public static JsonObject getTstContainer(List<TimestampBinary> timestampBinaries, String canonicalizationMethodUri) Creates a 'tstContainer' JsonObject according to EN 119-182 ch. 5.4.3.3 The tstContainer type- Parameters:
timestampBinaries- a list ofTimestampBinarys to incorporatecanonicalizationMethodUri- a canonicalization method (OPTIONAL, e.g. shall not be present for content timestamps)- Returns:
- 'tstContainer'
JsonObject
-
concatenateDSSDocuments
public static byte[] concatenateDSSDocuments(List<DSSDocument> documents, boolean isBase64UrlEncoded) Concatenates document octets to a single byte array- Parameters:
documents- a list ofDSSDocuments to concatenateisBase64UrlEncoded- defines whether the document octets shall be base64url-encoded- Returns:
- a byte array of document octets
-
writeDocumentsDigest
public static void writeDocumentsDigest(List<DSSDocument> documents, boolean isBase64UrlEncoded, DSSMessageDigestCalculator digestCalculator) Writes digest on a concatenated binaries of provideddocuments- Parameters:
documents- list ofDSSDocuments to be concatenatedisBase64UrlEncoded- defines whether the document octets shall be base64url-encodeddigestCalculator-DSSMessageDigestCalculatorto compute message-digest with
-
getDocumentOctets
This method returns binaries of thedocumentto be used for payload computation, depending on theisBase64UrlEncodedparameter. WhenisBase64UrlEncodedis set to TRUE, returns base64url-encoded binaries of thedocument. WhenisBase64UrlEncodedis set to FALSE, returns original octets of the document.- Parameters:
document-DSSDocumentto get octets fromisBase64UrlEncoded- defines whether return base64url-encoded octets- Returns:
- octets of the provided
DSSDocument
-
isJsonDocument
Checks if the provided document is JSON document- Parameters:
document-DSSDocumentto check- Returns:
- TRUE of the document is JSON, FALSE otherwise
-
isAllowedSignatureDocumentType
Checks if the signature document has an allowed type (bytes can be extracted)- Parameters:
document-DSSDocumentto check- Returns:
- TRUE if the document is of an allowed signature type, FALSE otherwise
-
getEtsiU
This method returns the etsiU container with the unsigned properties or an empty List- Parameters:
jws- the signature- Returns:
- etsiU content or an empty List
-
getUnsignedPropertiesWithHeaderName
public static List<EtsiUComponent> getUnsignedPropertiesWithHeaderName(JAdESEtsiUHeader etsiUHeader, String headerName) Returns a list of unsigned 'etsiU' properties matching theheaderNamefrom thejws- Parameters:
etsiUHeader-JAdESEtsiUHeaderto extract values fromheaderName-Stringname of the unsigned header- Returns:
- a list of
EtsiUComponents
-
getDate
Parses a IETF RFC 3339 dateTime String -
getIssuerSerial
Parses the 'kid' header value as in IETF RFC 5035- Parameters:
value-StringIssuerSerial to parse- Returns:
IssuerSerial
-
generateKid
Generates the 'kid' value as in IETF RFC 5035- Parameters:
signingCertificate-CertificateTokenrepresenting the singing certificate- Returns:
String'kid' header value
-
extractJAdESCounterSignature
public static JAdESSignature extractJAdESCounterSignature(EtsiUComponent cSigAttribute, JAdESSignature masterSignature) Extracts a counter signature from 'cSig' value with respect to the found format- Parameters:
cSigAttribute- an attribute containing the 'cSig' elementmasterSignature-JAdESSignaturethe master signature- Returns:
JAdESSignature
-
validateAgainstJAdESSchema
ValidatesJWSagainst a JAdES schema (ETSI TS 119 182-1) -
checkComponentsUnicity
Checks if all components have one type (strings or objects)- Parameters:
components- a list of objects to check- Returns:
- TRUE if all components are uniform (strings or objects), FALSE otherwise
-
isStringFormat
Checks of the object is an instance of a String class- Parameters:
object- to check- Returns:
- TRUE if the object is an instance of
Stringclass, FALSE otherwise
-
areAllBase64UrlComponents
Checks if the all components are base64Url encoded- Parameters:
components- a list of components to check- Returns:
- TRUE if all of the components are base64Url encoded, FALSE otherwise
-
parseEtsiUComponent
Parses 'etsiU' component as it is (base64url-encoded or JSON), and returns the resulting Map- Parameters:
etsiUComponent- object to parse (base64url-encoded or JSON)- Returns:
- map representing the object
-
parseSPDocSpecification
This method buildsSpDocSpecificationfrom the provided JSON object element- Parameters:
spDocSpecificationObject-Objectjson object- Returns:
SpDocSpecification
-
toJWSJsonSerializationObject
Converts theJWStoJWSJsonSerializationObject- Parameters:
jws-JWSto convert- Returns:
JWSJsonSerializationObject
-
getSigningInputBytes
This method computes the signing input bytes for a JWS signature- Parameters:
jws-JWSto get signing input for- Returns:
- signing input bytes
-
extractJOSEHeaderMembersSet
This method extracts a key set used within a JOSE Header (protected + unprotected) -
getAsBoolean
Gets a value from themapunder the givenkeyasBoolean -
toBoolean
Method safely convertsObjecttoBooleanif possible. The method also provides a user-friendly message explaining the origin of the unexpected variable. -
getAsString
Gets a value from themapunder the givenkeyasString -
toString
Method safely convertsObjecttoStringif possible -
toString
Method safely convertsObjecttoStringif possible. The method also provides a user-friendly message explaining the origin of the unexpected variable. -
getAsMap
Gets a value from themapunder the givenkeyasMap -
toMap
Method safely convertsObjecttoMapif possible. -
toMap
Method safely convertsObjecttoMapif possible. The method also provides a user-friendly message explaining the origin of the unexpected variable. -
getAsList
Gets a value from themapunder the givenkeyasList -
toList
Method safely convertsObjecttoListif possible. -
toList
Method safely convertsObjecttoListif possible. The method also provides a user-friendly message explaining the origin of the unexpected variable. -
toListOfStrings
Converts a list of objects to a list ofStrings -
toListOfNumbers
Converts a list of objects to a list ofNumbers
-