openvibe-sdk/locker
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
From types/locker.d.ts (both). Declarations are shown verbatim.
type LockKind
openvibe-sdk/locker: end-to-end encryption for anything on OpenVibe. One format, one library, two runtimes: Node and the browser, WebCrypto only. A locked item is stored and served as ciphertext; the keys never reach our servers.
export type LockKind = 'people' | 'password' | 'link';type SubjectRef
export type SubjectRef = { type: string; id: string };interface PublicKeyJwk
A P-256 public key as a JWK.
export interface PublicKeyJwk { kty: 'EC'; crv: 'P-256'; x: string; y: string; ext?: boolean; key_ops?: string[] }interface PeopleSlot
The key slot of one person: the content key, wrapped for their public key.
export interface PeopleSlot {
subject: SubjectRef;
algorithm: 'ECDH-P256/HKDF-SHA256/AES-256-GCM';
/** The RFC 7638 thumbprint of the recipient's ECDH public key: the slot is bound to it. */
recipient_key: string;
ephemeral_public_key: PublicKeyJwk;
salt: string;
nonce: string;
wrapped_key: string;
}interface PasswordSlot
The key slot of a password: the content key, wrapped with PBKDF2-SHA-256.
export interface PasswordSlot {
algorithm: 'PBKDF2-SHA256/AES-256-GCM';
kdf: 'PBKDF2-SHA-256';
iterations: number;
salt: string;
nonce: string;
wrapped_key: string;
}interface LockerHeader
The header of an envelope. The content key is never in it.
export interface LockerHeader {
version: 'locker.envelope.v1';
suite: 'AES-256-GCM';
chunk_size: number;
padded_size: number;
nonce_base: string;
lock: LockKind;
slots: { people?: PeopleSlot[]; password?: PasswordSlot; link?: Record<string, never> };
}interface EnvelopeInfo
What an envelope says about itself: the header, read without a key.
export interface EnvelopeInfo {
version: string;
lock: LockKind;
padded_size: number;
/** For a people lock: the thumbprint of each recipient's key. */
recipients: string[];
/** For a password lock: the PBKDF2 iteration count. */
iterations: number | null;
}interface Envelope
A sealed envelope: its bytes and its header.
export interface Envelope {
version: string;
header: LockerHeader;
headerBytes: Uint8Array;
bytes: Uint8Array;
chunkOffset: number;
/** A link lock only: the content key, which travels in the part of the link after the #. */
linkKey?: string;
}interface PersonKeys
A person's two key pairs, in memory.
export interface PersonKeys {
ecdh: { publicKey: CryptoKey; privateKey: CryptoKey };
signing: { publicKey: CryptoKey; privateKey: CryptoKey };
ecdhPublic: PublicKeyJwk;
signingPublic: PublicKeyJwk;
fingerprint: string;
fingerprintSignature: Uint8Array;
}interface PublicKeys
A person's public keys, as they are published: locker.public-keys@1.
export interface PublicKeys {
ecdh: PublicKeyJwk;
signing: PublicKeyJwk;
fingerprint: string;
fingerprint_signature: string;
}interface SealOptions
What a seal needs.
export interface SealOptions {
lock: LockKind;
/** A people lock: the recipients, each with their public key. */
keys?: Array<{ subject: SubjectRef; publicKey: PublicKeyJwk }>;
/** A password lock. */
password?: string;
/** A link lock: the content key, if the caller has one. */
contentKey?: Uint8Array;
/** The PBKDF2 iteration count of a password lock. */
iterations?: number;
/** Test vectors only: a fixed byte source instead of the platform's. */
random?: (length: number) => Uint8Array;
/** Test vectors only: a fixed ephemeral key pair. */
ephemeral?: { private?: Record<string, unknown>; privateKey?: CryptoKey; publicKey?: CryptoKey };
}interface OpenCredentials
What an open needs: the credentials of the lock it names.
export interface OpenCredentials {
/** A people lock: the private key of a recipient. */
privateKey?: CryptoKey | Record<string, unknown>;
/** A people lock: which person you are. */
subject?: SubjectRef | string;
/**
* A people lock: the person who is opening, with their ECDH key. The slot that names their
* key is found without knowing anybody's subject; an envelope with no slot for that key
* fails with locker.no_slot.
*/
person?: {
ecdhPublic?: PublicKeyJwk;
ecdh?: { publicKey?: CryptoKey; privateKey?: CryptoKey } | PublicKeyJwk;
ecdhPrivateKey?: CryptoKey;
privateKey?: CryptoKey;
kty?: string;
crv?: string;
x?: string;
y?: string;
};
/** A password lock. */
password?: string;
/** A link lock: the key from the link. */
key?: Uint8Array | string;
}interface RewrapOptions
What a re-wrap needs: who to add, who to drop, and how to open it first.
export interface RewrapOptions {
add?: Array<{ subject: SubjectRef; publicKey: PublicKeyJwk }>;
remove?: Array<SubjectRef | string>;
/** The public keys of the people who stay: a removal re-seals, and that needs their keys. */
keys?: Array<{ subject: SubjectRef; publicKey: PublicKeyJwk }>;
credentials?: OpenCredentials;
random?: (length: number) => Uint8Array;
ephemeral?: { private?: Record<string, unknown>; privateKey?: CryptoKey; publicKey?: CryptoKey };
}export export class LockerError extends Error { code: string; }
export class LockerError extends Error {
code: string;
}export export function seal(content: string | Uint8Array | ArrayBuf
Seals content: a string or bytes.
export function seal(content: string | Uint8Array | ArrayBuffer, options: SealOptions): Promise<Envelope>;export export function open(envelope: Envelope | Uint8Array, creden
Opens an envelope: the content as bytes.
export function open(envelope: Envelope | Uint8Array, credentials?: OpenCredentials): Promise<Uint8Array>;export export function sealStream(stream: ReadableStream<Uint8Array
Seals a stream: the envelope comes out piece by piece. The size of the content is needed.
export function sealStream(stream: ReadableStream<Uint8Array>, options: SealOptions & { size: number }): ReadableStream<Uint8Array>;export export function openStream(stream: ReadableStream<Uint8Array
Opens a stream: the content comes out piece by piece, as the chunks are verified. A stream that ends early throws at the end, when the missing chunk shows up: discard what it yielded.
export function openStream(stream: ReadableStream<Uint8Array>, credentials?: OpenCredentials): ReadableStream<Uint8Array>;export export function rewrap(envelope: Envelope | Uint8Array, opti
Wraps the content key for other people, without touching the content.
export function rewrap(envelope: Envelope | Uint8Array, options?: RewrapOptions): Promise<Envelope>;export export function generatePersonKeys(): Promise<PersonKeys>;
A person's two key pairs, made in the browser.
export function generatePersonKeys(): Promise<PersonKeys>;export export function exportPersonKeys(person: PersonKeys | Awaite
The public half of a person's keys, as it is published.
export function exportPersonKeys(person: PersonKeys | Awaited<ReturnType<typeof importPersonKeys>>): Promise<PublicKeys>;export export function exportPrivateKeys(person: PersonKeys | Await
The private half of a person's keys, as it is stored.
export function exportPrivateKeys(person: PersonKeys | Awaited<ReturnType<typeof importPersonKeys>>): Promise<{ ecdh: Record<string, unknown>; signing: Record<string, unknown> }>;export export function importPersonKeys(data: { ecdh?: Record<strin
A person's keys, ready to use.
export function importPersonKeys(data: { ecdh?: Record<string, unknown>; signing?: Record<string, unknown>; ecdhPrivateKey?: CryptoKey; signingPrivateKey?: CryptoKey }): Promise<{ ecdhPrivateKey: CryptoKey; signingPrivateKey: CryptoKey; ecdhPublic: PublicKeyJwk; signingPublic: PublicKeyJwk }>;export export function verifyPersonKeys(data: PublicKeys): Promise<
Checks a published set of keys: the signature and the eight words.
export function verifyPersonKeys(data: PublicKeys): Promise<boolean>;export export function fingerprintOf(ecdhPublic: PublicKeyJwk, sign
The eight words of a pair of public keys.
export function fingerprintOf(ecdhPublic: PublicKeyJwk, signingPublic: PublicKeyJwk): Promise<string>;export export function fingerprintWords(hash: Uint8Array): string;
The eight words of a hash.
export function fingerprintWords(hash: Uint8Array): string;export export function jwkThumbprint(jwk: PublicKeyJwk): Promise<st
The RFC 7638 thumbprint of a public key: SHA-256 over the canonical JSON of its members, base64url.
export function jwkThumbprint(jwk: PublicKeyJwk): Promise<string>;export export function padme(size: number): number;
The padded size of a content of this size: Padme's grid, never below the floor.
export function padme(size: number): number;export export function inspect(bytes: Uint8Array | Envelope): Envel
What an envelope says about itself, without a key and without decrypting anything.
export function inspect(bytes: Uint8Array | Envelope): EnvelopeInfo;export export function recoveryWords(count?: number, options?: { ra
A recovery phrase: n words from the list, one byte each.
export function recoveryWords(count?: number, options?: { random?: (length: number) => Uint8Array }): string;export export function isRecoveryPhrase(phrase: string): boolean;
Whether every word of a typed phrase is one of the 256.
export function isRecoveryPhrase(phrase: string): boolean;export export function wrapFor(contentKey: Uint8Array, publicKey: P
Wraps the content key for one person.
export function wrapFor(contentKey: Uint8Array, publicKey: PublicKeyJwk, options: { subject: SubjectRef; salt?: Uint8Array; random?: (length: number) => Uint8Array; ephemeral?: { private?: Record<string, unknown>; privateKey?: CryptoKey; publicKey?: CryptoKey } }): Promise<PeopleSlot>;export export function wrapForPassword(contentKey: Uint8Array, pass
Wraps the content key with a password.
export function wrapForPassword(contentKey: Uint8Array, password: string, options?: { salt?: Uint8Array; iterations?: number; random?: (length: number) => Uint8Array }): Promise<PasswordSlot>;export export function unwrapPeopleSlot(slot: PeopleSlot, privateKe
The content key out of a people slot.
export function unwrapPeopleSlot(slot: PeopleSlot, privateKey: CryptoKey): Promise<Uint8Array>;export export function unwrapPasswordSlot(slot: PasswordSlot, passw
The content key out of a password slot.
export function unwrapPasswordSlot(slot: PasswordSlot, password: string): Promise<Uint8Array>;export export const VERSION: string;
export const VERSION: string;export export const SUITE: string;
export const SUITE: string;export export const CHUNK_SIZE: number;
export const CHUNK_SIZE: number;export export const MIN_PADDED_SIZE: number;
export const MIN_PADDED_SIZE: number;export export const MAX_HEADER_BYTES: number;
export const MAX_HEADER_BYTES: number;export export const PASSWORD_ITERATIONS: number;
export const PASSWORD_ITERATIONS: number;export export const PASSWORD_ITERATIONS_MIN: number;
export const PASSWORD_ITERATIONS_MIN: number;export export const PASSWORD_ITERATIONS_MAX: number;
export const PASSWORD_ITERATIONS_MAX: number;export export const RECOVERY_WORDS: number;
How many words a recovery phrase has, unless the caller says otherwise.
export const RECOVERY_WORDS: number;export export const WORDS: string[];
The 256 words a fingerprint and a recovery phrase are made of.
export const WORDS: string[];