UNPKG

tink-crypto

Version:

A multi-language, cross-platform library that provides cryptographic APIs that are secure, easy to use correctly, and hard(er) to misuse.

43 lines 5.99 kB
/** * @license * Copyright 2020 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { SecurityException } from '../exception/security_exception'; import { PbEciesAeadHkdfPrivateKey } from '../internal/proto'; import { bytesAsU8 } from '../internal/proto_shims'; import * as Util from '../internal/util'; import * as EllipticCurves from '../subtle/elliptic_curves'; // This file contains only functions which are useful for implementation of // private and public ECIES AEAD HKDF key manager. /** * WARNING: This method assumes that the given key proto is valid. * */ export function getJsonWebKeyFromProto(key) { let publicKey; let d = null; if (key instanceof PbEciesAeadHkdfPrivateKey) { publicKey = key.getPublicKey(); } else { publicKey = key; } const params = publicKey.getParams(); if (!params) { throw new SecurityException('Params not set'); } const kemParams = params.getKemParams(); if (!kemParams) { throw new SecurityException('KEM params not set'); } const curveType = Util.curveTypeProtoToSubtle(kemParams.getCurveType()); const expectedLength = EllipticCurves.fieldSizeInBytes(curveType); const x = Util.bigEndianNumberToCorrectLength(bytesAsU8(publicKey.getX()), expectedLength); const y = Util.bigEndianNumberToCorrectLength(bytesAsU8(publicKey.getY()), expectedLength); if (key instanceof PbEciesAeadHkdfPrivateKey) { d = Util.bigEndianNumberToCorrectLength(bytesAsU8(key.getKeyValue()), expectedLength); } return EllipticCurves.getJsonWebKey(curveType, x, y, d); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNpZXNfYWVhZF9oa2RmX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9oeWJyaWQvZWNpZXNfYWVhZF9oa2RmX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyx5QkFBeUIsRUFBMkIsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssY0FBYyxNQUFNLDJCQUEyQixDQUFDO0FBRTVELDJFQUEyRTtBQUMzRSxrREFBa0Q7QUFFbEQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEdBQ3dCO0lBQzdELElBQUksU0FBbUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsR0FBb0IsSUFBSSxDQUFDO0lBQzlCLElBQUksR0FBRyxZQUFZLHlCQUF5QixFQUFFO1FBQzVDLFNBQVMsR0FBSSxHQUFHLENBQUMsWUFBWSxFQUErQixDQUFDO0tBQzlEO1NBQU07UUFDTCxTQUFTLEdBQUcsR0FBRyxDQUFDO0tBQ2pCO0lBQ0QsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxNQUFNLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUMvQztJQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsTUFBTSxJQUFJLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLENBQUM7S0FDbkQ7SUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDeEUsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FDekMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FDekMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELElBQUksR0FBRyxZQUFZLHlCQUF5QixFQUFFO1FBQzVDLENBQUMsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQ25DLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztLQUNuRDtJQUNELE9BQU8sY0FBYyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQge1NlY3VyaXR5RXhjZXB0aW9ufSBmcm9tICcuLi9leGNlcHRpb24vc2VjdXJpdHlfZXhjZXB0aW9uJztcbmltcG9ydCB7UGJFY2llc0FlYWRIa2RmUHJpdmF0ZUtleSwgUGJFY2llc0FlYWRIa2RmUHVibGljS2V5fSBmcm9tICcuLi9pbnRlcm5hbC9wcm90byc7XG5pbXBvcnQge2J5dGVzQXNVOH0gZnJvbSAnLi4vaW50ZXJuYWwvcHJvdG9fc2hpbXMnO1xuaW1wb3J0ICogYXMgVXRpbCBmcm9tICcuLi9pbnRlcm5hbC91dGlsJztcbmltcG9ydCAqIGFzIEVsbGlwdGljQ3VydmVzIGZyb20gJy4uL3N1YnRsZS9lbGxpcHRpY19jdXJ2ZXMnO1xuXG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWZ1bCBmb3IgaW1wbGVtZW50YXRpb24gb2Zcbi8vIHByaXZhdGUgYW5kIHB1YmxpYyBFQ0lFUyBBRUFEIEhLREYga2V5IG1hbmFnZXIuXG5cbi8qKlxuICogV0FSTklORzogVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IHRoZSBnaXZlbiBrZXkgcHJvdG8gaXMgdmFsaWQuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SnNvbldlYktleUZyb21Qcm90byhrZXk6IFBiRWNpZXNBZWFkSGtkZlByaXZhdGVLZXl8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYkVjaWVzQWVhZEhrZGZQdWJsaWNLZXkpOiBKc29uV2ViS2V5IHtcbiAgbGV0IHB1YmxpY0tleTogUGJFY2llc0FlYWRIa2RmUHVibGljS2V5O1xuICBsZXQgZDogVWludDhBcnJheXxudWxsID0gbnVsbDtcbiAgaWYgKGtleSBpbnN0YW5jZW9mIFBiRWNpZXNBZWFkSGtkZlByaXZhdGVLZXkpIHtcbiAgICBwdWJsaWNLZXkgPSAoa2V5LmdldFB1YmxpY0tleSgpIGFzIFBiRWNpZXNBZWFkSGtkZlB1YmxpY0tleSk7XG4gIH0gZWxzZSB7XG4gICAgcHVibGljS2V5ID0ga2V5O1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IHB1YmxpY0tleS5nZXRQYXJhbXMoKTtcbiAgaWYgKCFwYXJhbXMpIHtcbiAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oJ1BhcmFtcyBub3Qgc2V0Jyk7XG4gIH1cbiAgY29uc3Qga2VtUGFyYW1zID0gcGFyYW1zLmdldEtlbVBhcmFtcygpO1xuICBpZiAoIWtlbVBhcmFtcykge1xuICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbignS0VNIHBhcmFtcyBub3Qgc2V0Jyk7XG4gIH1cbiAgY29uc3QgY3VydmVUeXBlID0gVXRpbC5jdXJ2ZVR5cGVQcm90b1RvU3VidGxlKGtlbVBhcmFtcy5nZXRDdXJ2ZVR5cGUoKSk7XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gRWxsaXB0aWNDdXJ2ZXMuZmllbGRTaXplSW5CeXRlcyhjdXJ2ZVR5cGUpO1xuICBjb25zdCB4ID0gVXRpbC5iaWdFbmRpYW5OdW1iZXJUb0NvcnJlY3RMZW5ndGgoXG4gICAgICBieXRlc0FzVTgocHVibGljS2V5LmdldFgoKSksIGV4cGVjdGVkTGVuZ3RoKTtcbiAgY29uc3QgeSA9IFV0aWwuYmlnRW5kaWFuTnVtYmVyVG9Db3JyZWN0TGVuZ3RoKFxuICAgICAgYnl0ZXNBc1U4KHB1YmxpY0tleS5nZXRZKCkpLCBleHBlY3RlZExlbmd0aCk7XG4gIGlmIChrZXkgaW5zdGFuY2VvZiBQYkVjaWVzQWVhZEhrZGZQcml2YXRlS2V5KSB7XG4gICAgZCA9IFV0aWwuYmlnRW5kaWFuTnVtYmVyVG9Db3JyZWN0TGVuZ3RoKFxuICAgICAgICBieXRlc0FzVTgoa2V5LmdldEtleVZhbHVlKCkpLCBleHBlY3RlZExlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIEVsbGlwdGljQ3VydmVzLmdldEpzb25XZWJLZXkoY3VydmVUeXBlLCB4LCB5LCBkKTtcbn1cbiJdfQ==