---
title: "locker.public-key@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/locker.public-key"
updated: null
---

# locker.public-key@1 · OpenVibe.Services

HTML: [locker.public-key@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/locker.public-key)

# LockerPublicKey `locker.public-key@1`

Generated at 2026-11-13 06:25:48 UTC from [`openvibe-contracts v0.419.0`](https://github.com/OpenVibers/OpenVibe.Contracts/tree/v0.419.0) and [`openvibe-sdk v0.161.0`](https://github.com/OpenVibers/OpenVibe.SDK/tree/v0.161.0).

- Version: 1.0.0
- Owner: network
- Visibility: public
- Status: active
- Compatibility: backward
- Schema: [`https://openvibe.network/contracts/locker/public-key.v1.json`](/docs/contracts/locker.public-key.json)

locker.public-key@1: one P-256 public key as a JWK. The same shape is used for the ECDH key that receives content keys and for the ECDSA key that signs the fingerprint; what a key does is decided by where it is used, never by the key itself.

## Fields

| Field | Type | Required | Description | Constraints |
| --- | --- | --- | --- | --- |
| `kty` | const | yes |  | - `= "EC"` |
| `crv` | const | yes |  | - `= "P-256"` |
| `x` | string | yes | The public x coordinate, base64url, as WebCrypto exports it. | - `pattern ^[A-Za-z0-9_-]{43}$` |
| `y` | string | yes | The public y coordinate, base64url, as WebCrypto exports it. | - `pattern ^[A-Za-z0-9_-]{43}$` |
| `ext` | const |  |  | - `= true` |
| `key_ops` | array of enum |  |  | - `items: one of "deriveBits", "deriveKey", "verify"` |

## Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

 Valid: example

~~~~
{
  "kty": "EC",
  "crv": "P-256",
  "x": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg",
  "y": "eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXk"
}
~~~~

Rejected: other-curve

~~~~
{
  "kty": "EC",
  "crv": "P-384",
  "x": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg",
  "y": "eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXk"
}
~~~~

## Validate

~~~~
const contracts = require('openvibe-contracts');
contracts.validate('locker.public-key@1', value);   // { valid, errors: [{ path, message }] }
~~~~
