# Suites

A foundation principle of the DiME design is minimizing options and decisions, and this is equally relevant for the choice of algorithms to use. DiME uses pre-defined cryptographic suits with the intention to remove much of need of detailed understanding and expert knowledge with cryptography.

Currently only one suite has been defined, the "salt" suite (NaCl), based on the popular [Networking and Cryptography library](https://nacl.cr.yp.to/).

<table><thead><tr><th width="254">Usage</th><th width="272">Algorithm</th></tr></thead><tbody><tr><td>Digital signature</td><td><a href="https://en.wikipedia.org/wiki/EdDSA#Ed25519">Ed25519</a> (<a href="https://en.wikipedia.org/wiki/EdDSA">EdDSA</a>)</td></tr><tr><td>Key agreement (exchange)</td><td><a href="https://en.wikipedia.org/wiki/Curve25519">X25519</a> (<a href="https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman">ECDH</a>)</td></tr><tr><td>Secret key encryption</td><td><a href="https://en.wikipedia.org/wiki/ChaCha20-Poly1305#Salsa20-Poly1305_and_XSalsa20-Poly1305">XSalsa20-Poly1305</a> (<a href="https://en.wikipedia.org/wiki/Authenticated_encryption">AE</a>)</td></tr><tr><td>Hash function</td><td><a href="https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE2">BLAKE2</a></td></tr></tbody></table>

The suggested implementation of this cryptography suite is the tried and tested [libsodium library](https://doc.libsodium.org/) which has numerous bindings to diffrent languages and plaforms..

Although the DiME format itself does not solve the need to understand and properly use these algorithms, the idea is that the available reference implementation will remove this need.

The use of a specific suite is closely associated with the raw data of keys. Here is an example of an encryption key:

```
NaCl.eDYvQUipW45guJvDoc13iFQkMwNZUJcBaqJWN7JguG5DVfQED
```

As the header of DiME items, the raw key data starts with a header indicating the cryptographic suite used, in this case ‘NaCl’. The header ‘NaCl’ is used for the DiME standard cryptographic suite.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dimeformat.io/cryptography/profiles.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
