| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| goog.module('tink.KeyManager'); |
| |
| const PbKeyData = goog.require('proto.google.crypto.tink.KeyData'); |
| const PbMessage = goog.require('jspb.Message'); |
| |
| /** |
| * 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. |
| * |
| * @record |
| */ |
| class KeyFactory { |
| /** |
| * Generates a new random key according to 'keyFormat'. |
| * |
| * @param {!PbMessage|!Uint8Array} keyFormat is either a KeyFormat |
| * proto or a serialized KeyFormat proto |
| * @return {!PbMessage|!Promise<!PbMessage>} the new generated key |
| */ |
| newKey(keyFormat) {} |
| |
| /** |
| * Generates a new random key based on the "serialized_key_format" and returns |
| * it as a KeyData proto. |
| * |
| * @param {!Uint8Array} serializedKeyFormat |
| * @return {!PbKeyData|!Promise<!PbKeyData>} |
| */ |
| newKeyData(serializedKeyFormat) {} |
| } |
| |
| /** |
| * @record |
| * @extends {KeyFactory} |
| */ |
| class PrivateKeyFactory { |
| /** |
| * Returns a public key data extracted from the given serialized private key. |
| * |
| * @param {!Uint8Array} serializedPrivateKey |
| * @return {!PbKeyData} |
| */ |
| getPublicKeyData(serializedPrivateKey) {} |
| } |
| |
| /** |
| * 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. |
| * |
| * @template P |
| * @record |
| */ |
| class KeyManager { |
| /** |
| * Constructs an instance of primitive P for a given key. |
| * |
| * @param {!Object} primitiveType |
| * @param {!PbKeyData|!PbMessage} key is either a KeyData proto or a supported |
| * key proto |
| * @return {!Promise.<!P>} |
| */ |
| getPrimitive(primitiveType, key) {} |
| |
| /** |
| * Returns true if this KeyManager supports keyType. |
| * |
| * @param {string} keyType |
| * @return {boolean} |
| */ |
| doesSupport(keyType) {} |
| |
| /** |
| * Returns the URL which identifies the keys managed by this KeyManager. |
| * |
| * @return {string} |
| */ |
| getKeyType() {} |
| |
| /** |
| * 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). |
| * |
| * @return {!Object} |
| */ |
| getPrimitiveType() {} |
| |
| /** |
| * Returns the version of this KeyManager. |
| * |
| * @return {number} |
| */ |
| getVersion() {} |
| |
| /** |
| * Returns a factory that generates keys of the key type handled by this |
| * manager. |
| * |
| * @return {!KeyFactory} |
| */ |
| getKeyFactory() {} |
| } |
| |
| exports = { |
| KeyManager, |
| KeyFactory, |
| PrivateKeyFactory |
| }; |