Skip to content

Content Digest

The content digest signature that is used to validate the HTTP message content. A hashing algorithm is used to create a digest of the message body. With the algorithm you can then rehash the message body and validate it against the pre-computed content-digest.

Although sha-256 generated digests are considered secure, we recommend using sha-512.

Compute Content Digest

import crypto from "crypto";
// Define the algorithm
let algorithm = "sha512";
// Define the message
let message = JSON.stringify({
firstName: "John",
...
});
// Create the digest in base64 encoding
const digestBase64 = crypto.createHash(algorithm).update(message).digest("base64");
// Create content digest string
const contentDigest = `sha-512=:${digestBase64}:`;

Make Signed Request

In the below example request:

  • sha-512: The algorithm used to hash the content message
  • RK/0...abDg=: Base64 representation resulting from the hashed content message
Terminal window
curl --request POST \
--url https://api.pipevest.com/v1/customers?sort=ASC \
--header 'Content-Type: application/json' \
--header 'Content-Digest: sha-512=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:' \
--header 'Content-Length: 18' \
--header 'Authorization: Bearer 123456' \
--header 'X-Client-Id: 123456' \
--header 'X-Idempotency-Key: 123456' \
...
--data '{"firstName": "John", "lastName": "Doe"}'

Re-compute Content Digest

See Step 1 in Generate Content Digest

Compare Digests

Compare computed-content-digest to the one that was passed along in the original http header (i.e. - header-content-digest).

computed-content-digest === header-content-digest
Terminal window
curl --request POST \
--url https://api.pipevest.com/v1/customers \
--header 'Content-Digest: sha-512=:RK/08...FabDg=:' \
....

Verify or Reject

Reject the message, if computed-content-digest does not equal header-content-digest.