Web Key Directory - Tester

The OpenPGP Web Key Directory is a key discovery scheme that allows you to locate OpenPGP keys using an e-mail address.

OpenPGP defines User IDs (which include e-mail addresses) as UTF-8 strings. To simplify storing these in a file system, implementations first convert all uppercase ASCII characters in the local-part of the address to lowercase (non-ASCII characters remain unchanged). This normalized local-part is then hashed using SHA-1, and the resulting 160-bit digest is encoded with the Z-Base-32 method, producing a fixed-length 32-character string.

Two methods are defined to form the lookup URI:

  • Advanced Method: Requires a dedicated openpgpkey sub-domain. The URI is built by concatenating:
    https://openpgpkey.<domain>/.well-known/openpgpkey/<domain>/hu/<32-character-hash>?l=<local-part>
    For example, for Joe.Doe@Example.ORG:
    https://openpgpkey.example.org/.well-known/openpgpkey/example.org/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe
  • Direct Method: Does not require additional DNS entries. The URI is built by concatenating:
    https://<domain>/.well-known/openpgpkey/hu/<32-character-hash>?l=<local-part>
    For example, for Joe.Doe@Example.ORG:
    https://example.org/.well-known/openpgpkey/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe

According to the standard, implementations must first try the Advanced Method. Only if the required sub-domain does not exist should the Direct Method be used. Note that a non-responding server does not automatically trigger a fallback.

Lookup

For testing purposes, you can use the following form to look up keys or generate the locations you need to store your binary formatted key:

Results for author@lch361.net

Direct Method

URI
Fingerprint
D3DC12E3E35CF45BB280798428BB615D2B4028EE
Algorithm
EdDSALegacy
Revocation
Not as far as we know
Expiry
No expiry date set
Randomart
+--[EdDSALegacy]--+
|     ..          |
|  . ..   . .     |
| . .  o . = o    |
|  .    = = X .   |
| .    + S X = o .|
|  E  . o = = . = |
|      .   o   o  |
|                 |
|                 |
+-----[SHA1]------+
Passed Tests
✅ HTTP Head Method
✅ No Index found
✅ Policy File Found
✅ Content-Type: application/octet-stream
✅ Access-Control-Allow: *
Errors
No errors
Fetch Timestamp
2026-10-08T22:38:52.280085829Z

Advanced Method

URI
Fingerprint
D3DC12E3E35CF45BB280798428BB615D2B4028EE
Algorithm
EdDSALegacy
Revocation
Not as far as we know
Expiry
No expiry date set
Randomart
+--[EdDSALegacy]--+
|     ..          |
|  . ..   . .     |
| . .  o . = o    |
|  .    = = X .   |
| .    + S X = o .|
|  E  . o = = . = |
|      .   o   o  |
|                 |
|                 |
+-----[SHA1]------+
Passed Tests
✅ HTTP Head Method
✅ No Index found
✅ Policy File Found
✅ Content-Type: application/octet-stream
✅ Access-Control-Allow: *
Errors
No errors
Fetch Timestamp
2026-10-08T22:38:53.165688152Z

API usage

There is also an API that returns the same results in JSON format, its endpoint is: /api/lookup?email=Joe.Doe@example.org

You can find the OpenAPI specification and Swagger UI at /api-docs/ui/