UNPKG

pooja-docucomb-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.

67 lines (60 loc) 2.08 kB
/** * @license * Copyright 2020 Google LLC * SPDX-License-Identifier: Apache-2.0 */ 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 { private readonly encoding: EllipticCurves.EcdsaSignatureEncodingType; /** * @param opt_encoding The * optional encoding of the signature. If absent, default is IEEE P1363. */ constructor( private readonly key: CryptoKey, private readonly hash: string, opt_encoding?: EllipticCurves.EcdsaSignatureEncodingType|null) { super(); if (!opt_encoding) { opt_encoding = EllipticCurves.EcdsaSignatureEncodingType.IEEE_P1363; } this.encoding = opt_encoding; } /** */ async sign(message: Uint8Array): Promise<Uint8Array> { Validators.requireUint8Array(message); const signature = await 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 async function fromJsonWebKey( jwk: JsonWebKey, hash: string, opt_encoding?: EllipticCurves.EcdsaSignatureEncodingType| null): Promise<PublicKeySign> { 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 = await EllipticCurves.importPrivateKey('ECDSA', jwk); return new EcdsaSign(cryptoKey, hash, opt_encoding); }