import { type AbstractType } from "@dao-xyz/borsh"; import { Ed25519PublicKey } from "./ed25519.js"; import { X25519Keypair, X25519PublicKey } from "./x25519.js"; export * from "./errors.js"; export declare const equals: (array1?: Uint8Array, array2?: Uint8Array) => boolean; export type MaybePromise = Promise | T; export type PublicKeyEncryptionParameters = { type?: "publicKey"; receiverPublicKeys: (X25519PublicKey | Ed25519PublicKey)[]; }; export type SymmetricKeyEncryptionParameters = { type?: "hash"; }; export type KeyExchangeOptions = PublicKeyEncryptionParameters | SymmetricKeyEncryptionParameters; type EncryptReturnValue = EncryptedThing>; type CipherWithEnvelope = { cipher: Uint8Array; nonce: Uint8Array; envelope: E; }; type SymmetricKeys = Uint8Array; type PublicKeyEncryptionKeys = X25519Keypair; type EnvelopeFromParameter = Parameters extends PublicKeyEncryptionParameters ? PublicKeyEnvelope : HashedKeyEnvelope; type EncryptProvide = (bytes: Uint8Array, parameters: Parameters) => Promise>>; interface KeyProvider { exportByKey(publicKey: X25519PublicKey): Promise; } export declare const createLocalEncryptProvider: (keys: K) => (bytes: Uint8Array, parameters: Parameters) => Promise>>; export type DecryptProvider = (encrypted: Uint8Array, nonce: Uint8Array, exchange: Envelope) => Promise; type KeyResolver = (key: T) => Promise<(T extends X25519PublicKey ? X25519Keypair : Uint8Array) | undefined>; export declare const createDecrypterFromKeyResolver: (keyResolver: KeyResolver) => DecryptProvider; export declare abstract class MaybeEncrypted { /** * Will throw error if not decrypted */ get decrypted(): DecryptedThing; decrypt(keyResolver?: X25519Keypair | KeyProvider): MaybePromise>; decrypt(provider?: DecryptProvider): MaybePromise>; equals(other: MaybeEncrypted): boolean; /** * Clear cached data */ clear(): void; abstract get byteLength(): number; } export declare class DecryptedThing extends MaybeEncrypted { _data?: Uint8Array; constructor(props?: { data?: Uint8Array; value?: T; }); _value?: T; getValue(clazz: AbstractType): T; encrypt(provider: EncryptProvide, parameters: Parameters): Promise>; encrypt(x25519Keypair: X25519Keypair, receiverPublicKeys: (X25519PublicKey | Ed25519PublicKey)[]): Promise>; get decrypted(): this; decrypt(): this; equals(other: MaybeEncrypted): boolean; clear(): void; get byteLength(): number; } export declare class CipherWithNonce { nonce: Uint8Array; cipher: Uint8Array; constructor(props: { nonce: Uint8Array; cipher: Uint8Array; }); equals(other: CipherWithNonce): boolean; } export declare class K { _encryptedKey: CipherWithNonce; _receiverPublicKey: X25519PublicKey; constructor(props: { encryptedKey: CipherWithNonce; receiverPublicKey: X25519PublicKey; }); equals(other: K): boolean; } declare abstract class Envelope { abstract equals(other: Envelope): boolean; } declare class PublicKeyEnvelope extends Envelope { _senderPublicKey: X25519PublicKey; _ks: K[]; constructor(props: { senderPublicKey: X25519PublicKey; ks: K[]; }); equals(other: PublicKeyEnvelope): boolean; } declare class HashedKeyEnvelope extends Envelope { hash: Uint8Array; constructor(props: { hash: Uint8Array; }); equals(other: HashedKeyEnvelope): boolean; } export declare class EncryptedThing extends MaybeEncrypted { _encrypted: Uint8Array; _nonce: Uint8Array; _keyexchange: E; constructor(props: { encrypted: Uint8Array; nonce: Uint8Array; envelope: E; }); _decrypted?: DecryptedThing; get decrypted(): DecryptedThing; decrypt(keyResolver?: X25519Keypair | KeyProvider): Promise>; decrypt(provider?: DecryptProvider): Promise>; equals(other: MaybeEncrypted): boolean; clear(): void; get byteLength(): number; } //# sourceMappingURL=encryption.d.ts.map