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.

69 lines 7.56 kB
/** * @license * Copyright 2020 Google LLC * SPDX-License-Identifier: Apache-2.0 */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { SecurityException } from '../exception/security_exception'; import { PublicKeySign } from '../signature/internal/public_key_sign'; import * as EllipticCurves from './elliptic_curves'; import * as Validators from './validators'; /** * Implementation of ECDSA signing. * * @final */ export class EcdsaSign extends PublicKeySign { /** * @param opt_encoding The * optional encoding of the signature. If absent, default is IEEE P1363. */ constructor(key, hash, opt_encoding) { super(); this.key = key; this.hash = hash; if (!opt_encoding) { opt_encoding = EllipticCurves.EcdsaSignatureEncodingType.IEEE_P1363; } this.encoding = opt_encoding; } /** */ sign(message) { return __awaiter(this, void 0, void 0, function* () { Validators.requireUint8Array(message); const signature = yield window.crypto.subtle.sign({ name: 'ECDSA', hash: { name: this.hash } }, this.key, message); if (this.encoding === EllipticCurves.EcdsaSignatureEncodingType.DER) { return EllipticCurves.ecdsaIeee2Der(new Uint8Array(signature)); } return new Uint8Array(signature); }); } } /** * @param opt_encoding The * optional encoding of the signature. If absent, default is IEEE P1363. */ export function fromJsonWebKey(jwk, hash, opt_encoding) { return __awaiter(this, void 0, void 0, function* () { if (!jwk) { throw new SecurityException('private key has to be non-null'); } const { crv } = jwk; if (!crv) { throw new SecurityException('curve has to be defined'); } Validators.validateEcdsaParams(crv, hash); const cryptoKey = yield EllipticCurves.importPrivateKey('ECDSA', jwk); return new EcdsaSign(cryptoKey, hash, opt_encoding); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2Ffc2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3N1YnRsZS9lY2RzYV9zaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7Ozs7Ozs7Ozs7QUFFSCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFcEUsT0FBTyxLQUFLLGNBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssVUFBVSxNQUFNLGNBQWMsQ0FBQztBQUUzQzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVUsU0FBUSxhQUFhO0lBRzFDOzs7T0FHRztJQUNILFlBQ3FCLEdBQWMsRUFBbUIsSUFBWSxFQUM5RCxZQUE2RDtRQUMvRCxLQUFLLEVBQUUsQ0FBQztRQUZXLFFBQUcsR0FBSCxHQUFHLENBQVc7UUFBbUIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUdoRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLFlBQVksR0FBRyxjQUFjLENBQUMsMEJBQTBCLENBQUMsVUFBVSxDQUFDO1NBQ3JFO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUM7SUFDL0IsQ0FBQztJQUVEO09BQ0c7SUFDRyxJQUFJLENBQUMsT0FBbUI7O1lBQzVCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QyxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDN0MsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxjQUFjLENBQUMsMEJBQTBCLENBQUMsR0FBRyxFQUFFO2dCQUNuRSxPQUFPLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUNoRTtZQUNELE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsQ0FBQztLQUFBO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQWdCLGNBQWMsQ0FDaEMsR0FBZSxFQUFFLElBQVksRUFDN0IsWUFDSTs7UUFDTixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLGlCQUFpQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDL0Q7UUFDRCxNQUFNLEVBQUMsR0FBRyxFQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLElBQUksaUJBQWlCLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUN4RDtRQUNELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7U2VjdXJpdHlFeGNlcHRpb259IGZyb20gJy4uL2V4Y2VwdGlvbi9zZWN1cml0eV9leGNlcHRpb24nO1xuaW1wb3J0IHtQdWJsaWNLZXlTaWdufSBmcm9tICcuLi9zaWduYXR1cmUvaW50ZXJuYWwvcHVibGljX2tleV9zaWduJztcblxuaW1wb3J0ICogYXMgRWxsaXB0aWNDdXJ2ZXMgZnJvbSAnLi9lbGxpcHRpY19jdXJ2ZXMnO1xuaW1wb3J0ICogYXMgVmFsaWRhdG9ycyBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIEVDRFNBIHNpZ25pbmcuXG4gKlxuICogQGZpbmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBFY2RzYVNpZ24gZXh0ZW5kcyBQdWJsaWNLZXlTaWduIHtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmNvZGluZzogRWxsaXB0aWNDdXJ2ZXMuRWNkc2FTaWduYXR1cmVFbmNvZGluZ1R5cGU7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvcHRfZW5jb2RpbmcgVGhlXG4gICAqICAgICBvcHRpb25hbCBlbmNvZGluZyBvZiB0aGUgc2lnbmF0dXJlLiBJZiBhYnNlbnQsIGRlZmF1bHQgaXMgSUVFRSBQMTM2My5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBrZXk6IENyeXB0b0tleSwgcHJpdmF0ZSByZWFkb25seSBoYXNoOiBzdHJpbmcsXG4gICAgICBvcHRfZW5jb2Rpbmc/OiBFbGxpcHRpY0N1cnZlcy5FY2RzYVNpZ25hdHVyZUVuY29kaW5nVHlwZXxudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoIW9wdF9lbmNvZGluZykge1xuICAgICAgb3B0X2VuY29kaW5nID0gRWxsaXB0aWNDdXJ2ZXMuRWNkc2FTaWduYXR1cmVFbmNvZGluZ1R5cGUuSUVFRV9QMTM2MztcbiAgICB9XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdF9lbmNvZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKi9cbiAgYXN5bmMgc2lnbihtZXNzYWdlOiBVaW50OEFycmF5KTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgVmFsaWRhdG9ycy5yZXF1aXJlVWludDhBcnJheShtZXNzYWdlKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5zaWduKFxuICAgICAgICB7bmFtZTogJ0VDRFNBJywgaGFzaDoge25hbWU6IHRoaXMuaGFzaH19LCB0aGlzLmtleSwgbWVzc2FnZSk7XG4gICAgaWYgKHRoaXMuZW5jb2RpbmcgPT09IEVsbGlwdGljQ3VydmVzLkVjZHNhU2lnbmF0dXJlRW5jb2RpbmdUeXBlLkRFUikge1xuICAgICAgcmV0dXJuIEVsbGlwdGljQ3VydmVzLmVjZHNhSWVlZTJEZXIobmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShzaWduYXR1cmUpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIG9wdF9lbmNvZGluZyBUaGVcbiAqICAgICBvcHRpb25hbCBlbmNvZGluZyBvZiB0aGUgc2lnbmF0dXJlLiBJZiBhYnNlbnQsIGRlZmF1bHQgaXMgSUVFRSBQMTM2My5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZyb21Kc29uV2ViS2V5KFxuICAgIGp3azogSnNvbldlYktleSwgaGFzaDogc3RyaW5nLFxuICAgIG9wdF9lbmNvZGluZz86IEVsbGlwdGljQ3VydmVzLkVjZHNhU2lnbmF0dXJlRW5jb2RpbmdUeXBlfFxuICAgIG51bGwpOiBQcm9taXNlPFB1YmxpY0tleVNpZ24+IHtcbiAgaWYgKCFqd2spIHtcbiAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oJ3ByaXZhdGUga2V5IGhhcyB0byBiZSBub24tbnVsbCcpO1xuICB9XG4gIGNvbnN0IHtjcnZ9ID0gandrO1xuICBpZiAoIWNydikge1xuICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbignY3VydmUgaGFzIHRvIGJlIGRlZmluZWQnKTtcbiAgfVxuICBWYWxpZGF0b3JzLnZhbGlkYXRlRWNkc2FQYXJhbXMoY3J2LCBoYXNoKTtcbiAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgRWxsaXB0aWNDdXJ2ZXMuaW1wb3J0UHJpdmF0ZUtleSgnRUNEU0EnLCBqd2spO1xuICByZXR1cm4gbmV3IEVjZHNhU2lnbihjcnlwdG9LZXksIGhhc2gsIG9wdF9lbmNvZGluZyk7XG59XG4iXX0=