⚖️Verify

VERIFY A GENERAL PROOF

a) Configure your environment

i. Fetch the SDK image on Docker

If you want to use the SDK as an API, you can fetch the Docker Image using the following commands to authenticate to our registry :

docker login -u <yourUsername> -p <yourDeployToken> registry.gitlab.com

The credentials <yourUsername> and <yourDeployToken> will sent by Archipels on demand.

ii. Set up an the environment to authenticate to our registry

In an .env file or directly in your run environment, you must fix the following vars in order to interact with the Trust Registry.

Now you can run the API in a container with (if using a .env file):

docker run --env-file .env registry.gitlab.com/archipels-managed/trust-registry-sdk/api:<version>

The version will be communicated when giving your TRUST_REGISTRY_API_KEY

b) Verify a proof

When you want to verify data with Archipels , you need to provide at least:

  • a schema_id

  • some metadata and / or a datahash

The response will contain an array of all (limited to 4) proofs compatible with the data and the matching criteria defined in the proof schema.

Let say you want to verify data from presumed schema of "schema_id": "0aaaaa3b". The schema is built like that :

{
  "id": "0aaaaa3b",
  "name": "Example",
  "version": "0.1.0",
  "hash_algorithm": "SHA256",
  "tree_height": 2,
  "description": "Example of proof schema",
  "owner": null,
  "namespace": "archipels.io",
  "inputs": [
    "input_1",
    "input_2",
    "input_3",
    null
  ],
  "input_definitions": {
    "input_1": {
      "description": "Description of input_1",
      "standardization_function": "<standardization_function>"
    },
    "input_2": {
      "description": "Description of input_2",
      "standardization_function": "<standardization_function>"
    },
    "input_3": {
      "description": "Description of input_3",
      "standardization_function": "<standardization_function>"
    }
  },
  "metadatum_definitions": {
    "input_1": {
      "id": "i1",
      "description": "Description of input_1",
      "mandatory": true,
      "publication_flag": "searchable"
    },
    "input_2": {
      "id": "i2",
      "description": "Description input_2",
      "mandatory": true,
      "publication_flag": "searchable"
    },
    "input_3": {
      "id": "i3",
      "description": "Description of input_3",
      "mandatory": true,
      "publication_flag": "public"
    }
  },
  "matching_conditions": {
    "and": [
      "input_1",
      "input_2"
    ]
  }
}

According to the "inputs", the mandatory "field" and the "matching conditions", the inputs you need to verify data are "input_1" and "input_2".

So the JSON related to the schema you need to compose is constituted from :

{
"schema_id" : "0aaaaa3b",
"data": {
	"input_1" : "<input_1>",
	"input_2" : "<input_2>"
	}
}

Here is an example of verification for data of the presumed schema digitalDocument of "schema_id": "c42e2516". The proof schema is described in the part ********1. Certify a. 2. a. i. Presentation of the digitalDocument schema.

The JSON corresponding to the schema

{
"schema_id": "c42e2516",
	"data": {
	"sha256": "0x298d499999f5018b267b703990d8974e54505c69aa16e697a2026205abf3fc85"
	}
}

The command for the verification is :

POST /proofs/verify -H 'Content-Type: application/json' --data '{ "schema_id": "c42e2516", "data": { "sha256": "0x298d499999f5018b267b703990d8974e54505c69aa16e697a2026205abf3fc85"}}'
Host : "<yourLocalApiInstanceUrl>"

The response is a Code 200, here is the response to above the verification.

{
  "proofs": [
    {
      "id": "f9312476003c3bd51a2faefe128ef9affa64ed1e6acd3e35f1d5529651af1e05",
      "commitment": "4eec9aa957ccb0ad3245e04fc61692de43a9d1c02f7b1dabdd7e46466cdae046",
      "commitment_details": {
        "schema_id": "c42e2516",
        "data_hash": "f4303f4da60deebbca059dbda307159c8c6d5d798d8196a2e0a406f09eab2d19",
        "nullifier": "ea3fa1672a240f69a0a0240be9c161f8631d2c5b2a2f9829d68329047bff7051",
        "issuer_id": "17e28cbbde064617391bdac3282c2c50b33f9baba8bb509d60aca557500ab90c",
        "signature": "7e8d405c446a1f982a5b6ebd2f130cc9b35e2675ec79815a69c13c02e327d0132824abc1c944eb4534fa96b0a6653bd1d1ef9a701c49b70ade2004127c458e0e"
      },
      "anchor_id": "0000000000000000000000000000000000000000000000000000000000000001",
      "accumulator_id": 63793,
      "status": "registered",
      "public_metadata": {
        "dateCreated": {
          "value": "2022-12-24T23:59:59",
          "inclusion_proof": [
            "e0f149baa1db0413137dd49ed2ebb4e99086e74fac4d477aedd797f0e594addf",
            "5361724dc6cf58aceba888cd873949d323d30eb7e6a109ddc5b1449c55f4c64e",
            "5850c9cc205646efcc54cc61fa278672f1febac2854e4b1b2cb91acbca7847a3"
          ],
          "publication_flag": "public"
        },
        "expires": {
          "value": "2023-12-24T23:59:59",
          "inclusion_proof": [
            "e15fc0f1e72b93eb4134fafa5a6f81f33c09fc7d95930c51e2cb5cb55f8226df",
            "b2c111f81a0386a62f69cdcee52f782b0720a5a6729148574c3af972ba361111",
            "5850c9cc205646efcc54cc61fa278672f1febac2854e4b1b2cb91acbca7847a3"
          ],
          "publication_flag": "public"
        },
        "creator": {
          "value": "ARCHIPELS",
          "inclusion_proof": [
            "b20d7deaebe7baf78f625ed7b459c99e7ac4721150a97aca327f3ab4af71894d",
            "b2c111f81a0386a62f69cdcee52f782b0720a5a6729148574c3af972ba361111",
            "5850c9cc205646efcc54cc61fa278672f1febac2854e4b1b2cb91acbca7847a3"
          ],
          "publication_flag": "public"
        },
        "category": {
          "value": "PAYSLIP",
          "inclusion_proof": [
            "50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c",
            "2dba5dbc339e7316aea2683faf839c1b7b1ee2313db792112588118df066aa35",
            "f335f8ee2d316e458fc56228318b1d0034580cca9c5447dc3e8f49ce4ec9b1f5"
          ],
          "publication_flag": "public"
        },
        "description": {
          "value": "example",
          "inclusion_proof": [
            "76d74e17240f1c3a5e2dbc56210dbfd5ccb4374be9cafd61cd14aedc9e4a2670",
            "2dba5dbc339e7316aea2683faf839c1b7b1ee2313db792112588118df066aa35",
            "f335f8ee2d316e458fc56228318b1d0034580cca9c5447dc3e8f49ce4ec9b1f5"
          ],
          "publication_flag": "public"
        }
      },
      "queried_metadata": {
        "sha256": {
          "value": "298d499999f5018b267b703990d8974e54505c69aa16e697a2026205abf3fc85",
          "inclusion_proof": [
            "51a4fa9b4a39792017db0fe1fa75316741815498106bc515025a78c528a81601",
            "5361724dc6cf58aceba888cd873949d323d30eb7e6a109ddc5b1449c55f4c64e",
            "5850c9cc205646efcc54cc61fa278672f1febac2854e4b1b2cb91acbca7847a3"
          ],
          "publication_flag": "searchable"
        }
      }
    }
  ]
}

If the verification doesn’t work, you’ll get a Code 404

VERIFY A PAYSLIP INVOICE

a) How to verify a payslip invoice ?

To verify a payslip you only need few things

  • The URL of our API endpoint :

    https://api.archipels.io/verify-api/v1/verify/digital-document?category=payslip&sha256=<hash>

    There is the call you need to make :

POST <https://api.archipels.io/verify-api/v1/verify/digital-document?category=payslip&sha256=><hash>

It’s possible to verify singular payslip on the web page https://verify-digital-document.archipels.io/. You just have to drop it !

  • Your X-Archipels-Api-Key : Archipels will provide it once agreed to start your tests or when you buy a license. You cannot verify anything without this key.

  • The document you want to verify needs to be hashed with a SHA256 algorithm. Here are the command you need to obtain a <document_hash> :

$ shasum -a 256 <pathToFile>/<nameFile>.<extensionFile>

or

$ openssl dgst -sha256 /<pathToFile>/<nameFile>.<extensionFile>

WARNING : make sure to put “0x” before the <document_hash> of your document to obtain the <hash>. So that the <hash>="Ox"+ <document_hash>

b) Verification results

If the verification is OK, it will be returned JSON metadata about the document. For example :

{
   "certified":true,
   "data":{
      "hash":"0x8d09f56285fdf9beb3c0b37677b42bb83d022e8aa6af1de1f896a81d0a397ed8",
      "timestamp":"2022-08-30T00:00:00",
      "meta":{
         "owner":"8F1CE3C639AB446BBBDA14312B187F2A",
         "category":"PAYSLIP"
      }
   },
   "proof":{
      "id":"8c1495bafa3be85550cea395053b8057994cbf3fe9841519d98981b66e62355a",
      "commitment":"43aa6b9ba34ab3d70edd921ac97d7de503a4901188b8d85dbdb8a1fdb9e78bbe",
      "commitment_details":{
         "schema_id":"c42e2516",
         "data_hash":"0225c2135fab488c0a354df3d7fee8af624a4ae7d420e895ddc19426d1ba985f",
         "nullifier":"24c390918b096af8b9ee827e59fbf55d43147d6f3cb859c03d0743a1325f5833",
         "issuer_id":"263e20ca7ee92d24e5dcca5853a7e477936a29cbc96a26f382166550ba9cfd6b",
         "signature":"6e2d18342d8b84d6a688f68f5bd1532ebe6582242ad7c526f73e0106941c6ff86561141049d5aabf48aa0bcfc934b1bde412d2622c9498561e4022d2f572360c"
      },
      "anchor_id":"0000000000000000000000000000000000000000000000000000000000000001",
      "accumulator_id":35860,
      "status":"registered",
      "public_metadata":{
         "dateCreated":{
            "value":"2022-08-30T00:00:00",
            "inclusion_proof":[
               "0da2ba7f0f48a49f8afc20f5c1dbeea400b6a14066be70ec332ba3980a542a96",
               "35ad829ac2b08ff4f367a178b170a329de038478be6e46e67a73f8a529482797",
               "12d3baa6d1cb178730ee1d978dec993d8e748919150d50f6153f7573bf401827"
            ],
            "publication_flag":"public"
         },
         "expires":{
            "value":"2025-08-30T00:00:00",
            "inclusion_proof":[
               "1740eaf0d12a44cf1da7a6a2fc4424458814fdce6fe0069591d3d9ae3da90e4e",
               "93f45318157269f138924ceb297ae47b149f01595fad6c0c2f3a37d11c5afd5d",
               "12d3baa6d1cb178730ee1d978dec993d8e748919150d50f6153f7573bf401827"
            ],
            "publication_flag":"public"
         },
         "creator":{
            "value":"8F1CE3C639AB446BBBDA14312B187F2A",
            "inclusion_proof":[
               "f9c38fc4fd332b605f3774c42601a1de78b761065f9b15c684da945944866db1",
               "93f45318157269f138924ceb297ae47b149f01595fad6c0c2f3a37d11c5afd5d",
               "12d3baa6d1cb178730ee1d978dec993d8e748919150d50f6153f7573bf401827"
            ],
            "publication_flag":"public"
         },
         "category":{
            "value":"PAYSLIP",
            "inclusion_proof":[
               "e900a1205ded300eb9a58d5d505cdecf082024747d24d4aac9109cb00181342b",
               "2dba5dbc339e7316aea2683faf839c1b7b1ee2313db792112588118df066aa35",
               "f7e3b6ebb5fc5232b65644a25d17198742b6a0073a9047fa7d61b257f81c86a6"
            ],
            "publication_flag":"public"
         },
         "description":{
            "value":"Bulletin de paie",
            "inclusion_proof":[
               "76d74e17240f1c3a5e2dbc56210dbfd5ccb4374be9cafd61cd14aedc9e4a2670",
               "2dba5dbc339e7316aea2683faf839c1b7b1ee2313db792112588118df066aa35",
               "f7e3b6ebb5fc5232b65644a25d17198742b6a0073a9047fa7d61b257f81c86a6"
            ],
            "publication_flag":"public"
         }
      },
      "queried_metadata":{
         "sha256":{
            "value":"9d09f56285fdf9beb3c0b37677b42bb83d022e8aa6af1de1f896a81d0a397ed8",
            "inclusion_proof":[
               "9f771ee5996542058e2ad5657358c553b42b27715c9f55fd9235fccce023e0ea",
               "35ad829ac2b08ff4f367a178b170a329de038478be6e46e67a73f8a529482797",
               "12d3baa6d1cb178730ee1d978dec993d8e748919150d50f6153f7573bf401827"
            ],
            "publication_flag":"searchable"
         },
         "category":{
            "value":"PAYSLIP",
            "inclusion_proof":[
               "e900a1205ded300eb9a58d5d505cdecf082024747d24d4aac9109cb00181342b",
               "2dba5dbc339e7316aea2683faf839c1b7b1ee2313db792112588118df066aa35",
               "f7e3b6ebb5fc5232b65644a25d17198742b6a0073a9047fa7d61b257f81c86a6"
            ],
            "publication_flag":"public"
         }
      }
   }
}

If the verification is KO, it will be returned a JSON like that :

{
	"message":"Couldn't find a proof verifying submitted data"
}

VERIFY A PROOF OF RESIDENCE INVOICE

a) How to verify a proof of residence invoice ?

To verify a Proof of Residence (POR) invoice you only need few things :

sGET [<https://api.archipels.io/gateway/production/v2/doc/verify/>](<https://api.archipels.io/gateway/production/v2/doc/verify/>)<hash> \\
-H "X-Archipels-Api-Key:<apiKey>"
  • Your X-Archipels-Api-Key : Archipels will provide it once agreed to start your tests or when you buy a license. You cannot verify anything without this key.

  • The document you want to verify needs to be hashed with a SHA256 algorithm. Here are the command you need to obtain a <document_hash> :

$ shasum -a 256 <pathToFile>/<nameFile>.<extensionFile>

or

$ openssl dgst -sha256 /<pathToFile>/<nameFile>.<extensionFile>

WARNING : make sure to put “0x” before the <document_hash> of your document to obtain the <hash>.

So that the <hash>="Ox"+ <document_hash>

b) Verification results

If the verification is OK, it will be returned JSON metadata about the document. For example :

{
    "certified": true,
    "data": {
        "hash": "9cd48178a6a4f29b2aca4ea65436882f83cc26b315c91d786b3f45ba65d45b45",
        "timestamp": "1652168899",
        "meta": {
            "documentName": "0x8dc48153a6a4f29b2aca4ea65436882f83cc26b315c91d786b3f45ba65d45b45.pdf",
            "documentType": "facture",
            "owner": "EDF_New"
        }
    }
}

If the verification is KO, it will be returned a JSON like that :

{
    "certified": false,
    "data": {
        "hash": "9cd48153a7a4f29b2aca4ea65436882f83cc26b315c91d786b3f45ba65d45b45",
        "timestamp": "1671453445"
    }
}

Dernière mise à jour