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
JavaScript
/**
* @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==