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.
36 lines • 4.97 kB
JavaScript
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { InvalidArgumentsException } from '../../../exception/invalid_arguments_exception';
import { PbHpkeKem } from '../../../internal/proto';
import { bytesAsU8 } from '../../../internal/proto_shims';
import * as hpkeUtil from './hpke_util';
import * as nistCurvesHpkeKemPrivateKey from './nist_curves_hpke_kem_private_key';
/** Helper class for creating HPKE KEM asymmetric keys. */
export class HpkeKemKeyFactory {
constructor() { }
static createPrivate(privateKey) {
const publicKey = privateKey.getPublicKey();
if (!publicKey) {
throw new InvalidArgumentsException('Public key not set');
}
const params = publicKey.getParams();
if (!params) {
throw new InvalidArgumentsException('Params not set');
}
switch (params.getKem()) {
case PbHpkeKem.DHKEM_P256_HKDF_SHA256:
case PbHpkeKem.DHKEM_P521_HKDF_SHA512:
return nistCurvesHpkeKemPrivateKey.fromBytes({
privateKey: bytesAsU8(privateKey.getPrivateKey()),
publicKey: bytesAsU8(publicKey.getPublicKey()),
curveType: hpkeUtil.nistHpkeKemToCurve(params.getKem())
});
default:
throw new InvalidArgumentsException('Unrecognized HPKE KEM identifier');
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHBrZV9rZW1fa2V5X2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9oeWJyaWQvaW50ZXJuYWwvaHBrZS9ocGtlX2tlbV9rZXlfZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFDLFNBQVMsRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFHeEQsT0FBTyxLQUFLLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxLQUFLLDJCQUEyQixNQUFNLG9DQUFvQyxDQUFDO0FBRWxGLDBEQUEwRDtBQUMxRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLGdCQUF1QixDQUFDO0lBRXhCLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBNEI7UUFFL0MsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxNQUFNLElBQUkseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUMzRDtRQUNELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxJQUFJLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDdkQ7UUFDRCxRQUFRLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2QixLQUFLLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQztZQUN0QyxLQUFLLFNBQVMsQ0FBQyxzQkFBc0I7Z0JBQ25DLE9BQU8sMkJBQTJCLENBQUMsU0FBUyxDQUFDO29CQUMzQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDakQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzlDLFNBQVMsRUFBRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN4RCxDQUFDLENBQUM7WUFDTDtnQkFDRSxNQUFNLElBQUkseUJBQXlCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTENcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHtJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9ufSBmcm9tICcuLi8uLi8uLi9leGNlcHRpb24vaW52YWxpZF9hcmd1bWVudHNfZXhjZXB0aW9uJztcbmltcG9ydCB7UGJIcGtlS2VtLCBQYkhwa2VQcml2YXRlS2V5fSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC9wcm90byc7XG5pbXBvcnQge2J5dGVzQXNVOH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvcHJvdG9fc2hpbXMnO1xuXG5pbXBvcnQge0hwa2VLZW1Qcml2YXRlS2V5fSBmcm9tICcuL2hwa2Vfa2VtX3ByaXZhdGVfa2V5JztcbmltcG9ydCAqIGFzIGhwa2VVdGlsIGZyb20gJy4vaHBrZV91dGlsJztcbmltcG9ydCAqIGFzIG5pc3RDdXJ2ZXNIcGtlS2VtUHJpdmF0ZUtleSBmcm9tICcuL25pc3RfY3VydmVzX2hwa2Vfa2VtX3ByaXZhdGVfa2V5JztcblxuLyoqIEhlbHBlciBjbGFzcyBmb3IgY3JlYXRpbmcgSFBLRSBLRU0gYXN5bW1ldHJpYyBrZXlzLiAqL1xuZXhwb3J0IGNsYXNzIEhwa2VLZW1LZXlGYWN0b3J5IHtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc3RhdGljIGNyZWF0ZVByaXZhdGUocHJpdmF0ZUtleTogUGJIcGtlUHJpdmF0ZUtleSk6XG4gICAgICBQcm9taXNlPEhwa2VLZW1Qcml2YXRlS2V5PiB7XG4gICAgY29uc3QgcHVibGljS2V5ID0gcHJpdmF0ZUtleS5nZXRQdWJsaWNLZXkoKTtcbiAgICBpZiAoIXB1YmxpY0tleSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudHNFeGNlcHRpb24oJ1B1YmxpYyBrZXkgbm90IHNldCcpO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbXMgPSBwdWJsaWNLZXkuZ2V0UGFyYW1zKCk7XG4gICAgaWYgKCFwYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKCdQYXJhbXMgbm90IHNldCcpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHBhcmFtcy5nZXRLZW0oKSkge1xuICAgICAgY2FzZSBQYkhwa2VLZW0uREhLRU1fUDI1Nl9IS0RGX1NIQTI1NjpcbiAgICAgIGNhc2UgUGJIcGtlS2VtLkRIS0VNX1A1MjFfSEtERl9TSEE1MTI6XG4gICAgICAgIHJldHVybiBuaXN0Q3VydmVzSHBrZUtlbVByaXZhdGVLZXkuZnJvbUJ5dGVzKHtcbiAgICAgICAgICBwcml2YXRlS2V5OiBieXRlc0FzVTgocHJpdmF0ZUtleS5nZXRQcml2YXRlS2V5KCkpLFxuICAgICAgICAgIHB1YmxpY0tleTogYnl0ZXNBc1U4KHB1YmxpY0tleS5nZXRQdWJsaWNLZXkoKSksXG4gICAgICAgICAgY3VydmVUeXBlOiBocGtlVXRpbC5uaXN0SHBrZUtlbVRvQ3VydmUocGFyYW1zLmdldEtlbSgpKVxuICAgICAgICB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKCdVbnJlY29nbml6ZWQgSFBLRSBLRU0gaWRlbnRpZmllcicpO1xuICAgIH1cbiAgfVxufVxuIl19