| /** | |
| * @license | |
| * Copyright 2020 Google LLC | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| import {PbKeyData, PbMessage} from './proto'; | |
| import {Constructor} from './util'; | |
| /** | |
| * An auxiliary container for methods that generate new keys. | |
| * Those methods are separate from KeyManager as their functionality is | |
| * independent of the primitive of the corresponding KeyManager. | |
| * | |
| */ | |
| export interface KeyFactory { | |
| /** | |
| * Generates a new random key according to 'keyFormat'. | |
| * | |
| * @param keyFormat is either a KeyFormat | |
| * proto or a serialized KeyFormat proto | |
| * @return the new generated key | |
| */ | |
| newKey(keyFormat: PbMessage|Uint8Array): PbMessage|Promise<PbMessage>; | |
| /** | |
| * Generates a new random key based on the "serialized_key_format" and returns | |
| * it as a KeyData proto. | |
| * | |
| */ | |
| newKeyData(serializedKeyFormat: Uint8Array): PbKeyData|Promise<PbKeyData>; | |
| /** | |
| * Returns a public key data extracted from the given serialized private key. | |
| * | |
| */ | |
| getPublicKeyData?: (serializedPrivateKey: Uint8Array) => PbKeyData; | |
| } | |
| export interface PrivateKeyFactory extends KeyFactory { | |
| getPublicKeyData(serializedPrivateKey: Uint8Array): PbKeyData; | |
| } | |
| /** | |
| * A KeyManager "understands" keys of a specific key type: it can generate keys | |
| * of the supported type and create primitives for supported keys. | |
| * A key type is identified by the global name of the protocol buffer that holds | |
| * the corresponding key material, and is given by typeUrl-field of | |
| * KeyData-protocol buffer. | |
| * | |
| * The template parameter P denotes the primitive corresponding to the keys | |
| * handled by this manager. | |
| */ | |
| export interface KeyManager<P> { | |
| /** | |
| * Constructs an instance of primitive P for a given key. | |
| * | |
| * @param key is either a KeyData proto or a supported | |
| * key proto | |
| */ | |
| getPrimitive(primitiveType: Constructor<P>, key: PbKeyData|PbMessage): | |
| Promise<P>; | |
| /** | |
| * Returns true if this KeyManager supports keyType. | |
| * | |
| */ | |
| doesSupport(keyType: string): boolean; | |
| /** | |
| * Returns the URL which identifies the keys managed by this KeyManager. | |
| * | |
| */ | |
| getKeyType(): string; | |
| /** | |
| * Returns the type of primitive which can be generated by this KeyManager. | |
| * | |
| * This function is specific for javascript to allow verifying that | |
| * the primitive returned by getPrimitive function implements certain | |
| * primitive interface (e.g. that the primitive is AEAD). | |
| * | |
| */ | |
| getPrimitiveType(): Constructor<P>; | |
| /** | |
| * Returns the version of this KeyManager. | |
| * | |
| */ | |
| getVersion(): number; | |
| /** | |
| * Returns a factory that generates keys of the key type handled by this | |
| * manager. | |
| * | |
| */ | |
| getKeyFactory(): KeyFactory; | |
| } |