JWT Framework
v4.0
v4.0
  • Introduction
  • Introduction
    • Provided Features
    • Security Recommendations
    • The Framework
    • Pre-requisite
    • Contributing
  • The Components
    • Algorithm Management (JWA)
    • Key (JWK) and Key Set (JWKSet)
      • Key (JWK)
      • Key Set (JWKSet)
    • Header Checker
    • Claim Checker
    • Signed Tokens (JWS)
      • Signature Algorithms
      • JWS Creation
      • JWS Loading
    • Encrypted Tokens (JWE)
      • Encryption Algorithms
      • JWE Creation
      • JWE Loading
  • The Symfony Bundle
    • Symfony Bundle
    • Algorithm Management
    • Key and Key Set Management
      • Key Management (JWK)
      • Key Set Management (JWKSet)
    • Header and Claim Checker Management
    • Signed Tokens
      • JWS serializers
      • JWS creation
      • JWS verification
    • Encrypted Tokens
      • JWE serializers
      • JWE creation
      • JWE decryption
    • Configuration Helper
    • Events
  • Console Command
    • Console
    • Standalone Application
    • PHAR Application
    • Symfony Console
  • Advanced Topics
    • Nested Tokens
    • Serialization
    • Custom Algorithm
    • Signed tokens and
      • Unprotected Header
      • Multiple Signatures
      • Detached Payload
      • Unencoded Payload
    • Encrypted tokens and
      • Unprotected Headers
      • Multiple Recipients
      • Additional Authentication Data (AAD)
  • Benchmark
    • How To
    • Result table
  • Migration
    • From v1.x to v2.0
    • From v2.x to v3.0
    • From v3.x to v4.0
Powered by GitBook
On this page
  • All algorithms
  • Algorithm Selection
  • Examples
  • Benchmark Details

Was this helpful?

Export as PDF
  1. Benchmark

How To

You can easily check if an algorithm is fast enough on your platform. This project has tests for all operations with (almost) all algorithms.

All algorithms

To run those tests, you must install the library with all dev dependencies. When done, just run the following command:

./vendor/bin/phpbench run --store

The previous command will test ALL algorithms and may take more than 7 hours.

Algorithm Selection

We recommend you to run tests only for the algorithm(s) you want to use. Just run the following command:

./vendor/bin/phpbench run --group GROUP --store

The value of GROUP should be one of the following values:

  • All signature algorithms: JWS

    • All HMAC algorithms: hmac

      • HS256: HS256

      • HS384: HS384

      • HS512: HS512

    • All Elliptic Curves algorithms: ECDSA

      • ES256: ES256

      • ES384: ES384

      • ES512: ES512

    • All Edwards-curve algorithms: EdDSA

      • Ed25519: Ed25519

    • All RSA algorithms: RSASign

      • RS256: RS256

      • RS384: RS384

      • RS512: RS512

      • PS256: PS256

      • PS384: PS384

      • PS512: PS512

  • All key encryption algorithms: JWE

    • KW

      • A128KW: A128KW

      • A192KW: A192KW

      • A256KW: A256KW

    • GCMKW

      • A128GCMKW: A128GCMKW

      • A192GCMKW: A192GCMKW

      • A256GCMKW: A256GCMKW

    • ECDHES

      • ECDH-ES: ECDHES

      • ECDHESKW

        • ECDHESA128KW: ECDH-ES+A128KW

        • ECDHESA192KW: ECDH-ES+A192KW

        • ECDHESA256KW: ECDH-ES+A256KW

    • PBES2

      • PBES2-HS256+A128KW: PBES2HS256A128KW

      • PBES2-HS384+A192KW: PBES2HS384A192KW

      • PBES2-HS512+A256KW: PBES2HS512A256KW

    • RSAEnc

      • RSA1_5: RSA1_5

      • RSA-OAEP: RSA-OAEP

      • RSA-OAEP-256: RSA-OAEP-256

  • Note 1: the dir algorithm is not tested as there is no key encryption or key decryption with this algorithm.

  • Note 2: tests consist in a full JWS/JWE creation and loading and sometimes using multiple key sizes.

  • Note 3: for JWE creation and loading, each key encryption algorithm is tested with the following content encryption algorithms:

    • A128GCM, A192GCM and A256GCM

    • A128CBC-HS256, A192CBC-HS384 and A256CBC-HS512

Examples

Test all HMAC algorithms:

./vendor/bin/phpbench run --group hmac --store

Test the RSA1_5 algorithm:

./vendor/bin/phpbench run --group RSA1_5 --store

Benchmark Details

The result of the following command will only give you partial result. For example:

PhpBench 0.13.0. Running benchmarks.
Using configuration file: phpbench.json

............

12 subjects, 12 iterations, 12,000 revs, 0 rejects
(best [mean mode] worst) = 31.275 [86.783 86.783] 31.275 (μs)
⅀T: 1,041.395μs μSD/r 0.000μs μRSD/r: 0.000%
Storing results ... OK
Run: 133c8a853cf321f0b7b63e4e60f819f9910e1285

The main information is that the best algorithm takes only 31.275 µs... but you may need more information.

Just run the following command:

./vendor/bin/phpbench report --report=simple --output=md --uuid=133c8a853cf321f0b7b63e4e60f819f9910e1285

*The value of the --uuid option is given at the end of the previous command. You can also use latest.

A report.md file will be created. It contains a detailed report (Markdown format). Example:

Jose Performance Test Suite
===========================

### suite: 133c8a853cf321f0b7b63e4e60f819f9910e1285, date: 2017-09-20, stime: 22:05:45

benchmark | groups | subject | mean
 --- | --- | --- | --- 
HS256Bench | JWS,hmac,HS256 | benchSignature | 104.450μs
HS256Bench | JWS,hmac,HS256 | benchVerification | 161.093μs
HS384Bench | JWS,hmac,HS384 | benchSignature | 112.788μs
HS384Bench | JWS,hmac,HS384 | benchVerification | 161.978μs
HS512Bench | JWS,hmac,HS512 | benchSignature | 105.686μs
HS512Bench | JWS,hmac,HS512 | benchVerification | 163.139μs

If it is not enough for you, you can get a full report with the following command:

./vendor/bin/phpbench report --report=default --output=md --uuid=133c8a853cf321f0b7b63e4e60f819f9910e1285
PreviousAdditional Authentication Data (AAD)NextResult table

Last updated 10 months ago

Was this helpful?