# Result Table

The table hereafter is the result of all benchmarks *with our development environment*. It is given to help you to select the appropriate algorithms for your application.

**The use of the algorithm** `ECDH-ES` **with curves** `P-256`**,** `P-384` **or** `P-521` **is not recommended with PHP7.1 or 7.2**. The cryptographic operations with those curves are done using a pure PHP function and hence very slow.

The use of the RSA algorithms with a very long key (more that 4096 bits) is quite slow, but offers a good protection.

The PBES2\* algorithms are quite slow, but also offer a good protection (see <https://en.wikipedia.org/wiki/PBKDF2>). Default salt size (512 bits) and iterations (4096) and custom values (256/1024) used for the tests. Those values can be configured if needed.

| subject               | groups                           | mean                                                                                            |
| --------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------- |
| sign                  | JWS,EdDSA,Ed25519                | 139.323μs                                                                                       |
| verify                | JWS,EdDSA,Ed25519                | 169.125μs                                                                                       |
| sign                  | JWS,ECDSA,ES256                  | 139.144μs                                                                                       |
| verify                | JWS,ECDSA,ES256                  | 223.170μs                                                                                       |
| sign                  | JWS,ECDSA,ES384                  | 941.535μs                                                                                       |
| verify                | JWS,ECDSA,ES384                  | 1,075.417μs                                                                                     |
| sign                  | JWS,ECDSA,ES512                  | 504.271μs                                                                                       |
| verify                | JWS,ECDSA,ES512                  | 826.615μs                                                                                       |
| sign                  | JWS,hmac,HS256                   | 19.593μs                                                                                        |
| verify                | JWS,hmac,HS256                   | 24.045μs                                                                                        |
| sign                  | JWS,hmac,HS384                   | 20.061μs                                                                                        |
| verify                | JWS,hmac,HS384                   | 24.672μs                                                                                        |
| sign                  | JWS,hmac,HS512                   | 19.838μs                                                                                        |
| verify                | JWS,hmac,HS512                   | 24.935μs                                                                                        |
| sign                  | JWS,none                         | 14.021μs                                                                                        |
| verify                | JWS,none                         | 17.317μs                                                                                        |
| sign                  | JWS,RSASign,PS256                | 1,310.264μs                                                                                     |
| verify                | JWS,RSASign,PS256                | 121.113μs                                                                                       |
| sign                  | JWS,RSASign,PS384                | 1,300.622μs                                                                                     |
| verify                | JWS,RSASign,PS384                | 119.065μs                                                                                       |
| sign                  | JWS,RSASign,PS512                | 1,302.404μs                                                                                     |
| verify                | JWS,RSASign,PS512                | 117.445μs                                                                                       |
| sign                  | JWS,RSASign,RS256                | 1,280.885μs                                                                                     |
| verify                | JWS,RSASign,RS256                | 106.382μs                                                                                       |
| sign                  | JWS,RSASign,RS384                | 1,280.652μs                                                                                     |
| verify                | JWS,RSASign,RS384                | 297.263μs                                                                                       |
| sign                  | JWS,RSASign,RS512                | 1,659.753μs                                                                                     |
| verify                | JWS,RSASign,RS512                | 119.476μs                                                                                       |
| encryption/decryption | JWE,GCMKW,A128GCMKW              | 63.022μs, 60.639μs, 58.909μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively)    |
| encryption/decryption | JWE,GCMKW,A128GCMKW              | 48.335μs, 50.021μs, 49.393μs (with A128GCM, A192GCM, A256GCM respectively)                      |
| encryption/decryption | JWE,GCMKW,A192GCMKW              | 59.719μs, 59.396μs, 60.329μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively)    |
| encryption/decryption | JWE,GCMKW,A192GCMKW              | 48.432μs, 49.295μs, 50.244μs (with A128GCM, A192GCM, A256GCM respectively)                      |
| encryption/decryption | JWE,GCMKW,A256GCMKW              | 60.966μs, 60.621μs, 59.821μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively)    |
| encryption/decryption | JWE,GCMKW,A256GCMKW              | 48.894μs, 49.165μs, 49.224μs (with A128GCM, A192GCM, A256GCM respectively)                      |
| encryption/decryption | JWE,KW,A128KW                    | 159.758μs, 176.995μs, 210.580μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively) |
| encryption/decryption | JWE,KW,A128KW                    | 93.752μs, 117.309μs, 162.917μs (with A128GCM, A192GCM, A256GCM respectively)                    |
| encryption/decryption | JWE,KW,A192KW                    | 137.808μs, 176.636μs, 214.446μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively) |
| encryption/decryption | JWE,KW,A192KW                    | 104.048μs, 122.472μs, 138.150μs (with A128GCM, A192GCM, A256GCM respectively)                   |
| encryption/decryption | JWE,KW,A256KW                    | 139.867μs, 176.727μs, 208.664μs (with A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 respectively) |
| encryption/decryption | JWE,KW,A256KW                    | 93.840μs, 115.313μs, 140.135μs (with A128GCM, A192GCM, A256GCM respectively)                    |
| encryption            | JWE,RSAEnc,RSA1\_5               | from 178.368μs to 373.941μs (depending on the Content Encryption Algorithm and the key size)    |
| decryption            | JWE,RSAEnc,RSA1\_5               | from 354.921μs to 10,148.146μs (depending on the Content Encryption Algorithm and the key size) |
| encryption            | JWE,RSAEnc,RSA-OAEP              | from 188.228μs to 428.624μs (depending on the Content Encryption Algorithm and the key size)    |
| decryption            | JWE,RSAEnc,RSA-OAEP              | from 381.853μs to 13,079.733μs (depending on the Content Encryption Algorithm and the key size) |
| encryption            | JWE,RSAEnc,RSA-OAEP-256          | from 195.231μs to 410.868μs (depending on the Content Encryption Algorithm and the key size)    |
| decryption            | JWE,RSAEnc,RSA-OAEP-256          | from 354.090μs to 11,238.001μs (depending on the Content Encryption Algorithm and the key size) |
| encryption/decryption | JWE,PBES2,PBES2HS256A128KW       | from 2,109.175μs (256 bit salt / 1024 counts) to 7,943.047μs (512 bit salt / 4096 counts)       |
| encryption/decryption | JWE,PBES2,PBES2HS384A192KW       | from 2,719.313μs (256 bit salt / 1024 counts) to 10,466.043μs (512 bit salt / 4096 counts)      |
| encryption/decryption | JWE,PBES2,PBES2HS256A128KW       | from 2,746.634μs (256 bit salt / 1024 counts) to 10,600.124μs (512 bit salt / 4096 counts)      |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA128KW | \~45,198.922μs (with curve P-256)                                                               |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA128KW | \~77,320.816μs (with curve P-384)                                                               |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA128KW | \~120,709.648μs (with curve P-521)                                                              |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA128KW | \~453.445μs (with curve X25519)                                                                 |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA128KW | \~21,249.059μs (with curve P-256)                                                               |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA128KW | \~37,207.750μs (with curve P-384)                                                               |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA128KW | \~57,072.871μs (with curve P-521)                                                               |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA128KW | \~387.441μs (with curve X25519)                                                                 |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA192KW | \~44,697.707μs (with curve P-256)                                                               |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA192KW | \~76,731.773μs (with curve P-384)                                                               |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA192KW | \~124,164.813μs (with curve P-521)                                                              |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA192KW | \~501.742μs (with curve X25519)                                                                 |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA192KW | \~21,603.676μs (with curve P-256)                                                               |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA192KW | \~36,172.617μs (with curve P-384)                                                               |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA192KW | \~55,530.465μs (with curve P-521)                                                               |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA192KW | \~378.129μs (with curve X25519)                                                                 |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA256KW | \~44,701.426μs (with curve P-256)                                                               |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA256KW | \~76,805.012μs (with curve P-384)                                                               |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA256KW | \~121,017.648μs (with curve P-521)                                                              |
| encryption            | JWE,ECDHES,ECDHESKW,ECDHESA256KW | \~451.094μs (with curve X25519)                                                                 |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA256KW | \~21,335.781μs (with curve P-256)                                                               |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA256KW | \~36,207.594μs (with curve P-384)                                                               |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA256KW | \~55,440.664μs (with curve P-521)                                                               |
| decryption            | JWE,ECDHES,ECDHESKW,ECDHESA256KW | \~377.367μs (with curve X25519)                                                                 |
| encryption            | JWE,ECDHES                       | \~44,762.633μs (with curve P-256)                                                               |
| encryption            | JWE,ECDHES                       | \~76,660.664μs (with curve P-384)                                                               |
| encryption            | JWE,ECDHES                       | \~119,539.141μs (with curve P-521)                                                              |
| encryption            | JWE,ECDHES                       | \~369.992μs (with curve X25519)                                                                 |
| decryption            | JWE,ECDHES                       | \~21,894.422μs (with curve P-256)                                                               |
| decryption            | JWE,ECDHES                       | \~37,380.137μs (with curve P-384)                                                               |
| decryption            | JWE,ECDHES                       | \~58,231.930μs (with curve P-521)                                                               |
| decryption            | JWE,ECDHES                       | \~263.254μs (with curve X25519)                                                                 |


---

# 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://web-token.spomky-labs.com/benchmarks/result-table.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.
