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.

75 lines 7.4 kB
/** * @license * Copyright 2020 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { InvalidArgumentsException } from '../exception/invalid_arguments_exception'; import { SecurityException } from '../exception/security_exception'; const SUPPORTED_AES_KEY_SIZES = [16, 32]; /** * Validates AES key sizes, at the moment only 128-bit and 256-bit keys are * supported. * * @param n the key size in bytes * @throws {!InvalidArgumentsException} * @static */ export function validateAesKeySize(n) { if (!SUPPORTED_AES_KEY_SIZES.includes(n)) { throw new InvalidArgumentsException('unsupported AES key size: ' + n); } } /** * Validates that the input is a non null Uint8Array. * * @throws {!InvalidArgumentsException} * @static */ export function requireUint8Array(input) { if (input == null || !(input instanceof Uint8Array)) { throw new InvalidArgumentsException('input must be a non null Uint8Array'); } } /** * Validates version, throws exception if candidate version is negative or * bigger than expected. * * @param candidate - version to be validated * @param maxVersion - upper bound on version * @throws {!SecurityException} * @static */ export function validateVersion(candidate, maxVersion) { if (candidate < 0 || candidate > maxVersion) { throw new SecurityException('Version is out of bound, must be ' + 'between 0 and ' + maxVersion + '.'); } } /** * Validates ECDSA parameters. * * @throws {!SecurityException} */ export function validateEcdsaParams(curve, hash) { switch (curve) { case 'P-256': if (hash != 'SHA-256') { throw new SecurityException('expected SHA-256 (because curve is P-256) but got ' + hash); } break; case 'P-384': if (hash != 'SHA-384' && hash != 'SHA-512') { throw new SecurityException('expected SHA-384 or SHA-512 (because curve is P-384) but got ' + hash); } break; case 'P-521': if (hash != 'SHA-512') { throw new SecurityException('expected SHA-512 (because curve is P-521) but got ' + hash); } break; default: throw new SecurityException('unsupported curve: ' + curve); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3N1YnRsZS92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxNQUFNLHVCQUF1QixHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRW5EOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsQ0FBUztJQUMxQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3hDLE1BQU0sSUFBSSx5QkFBeUIsQ0FBQyw0QkFBNEIsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN2RTtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFpQjtJQUNqRCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUMsRUFBRTtRQUNuRCxNQUFNLElBQUkseUJBQXlCLENBQUMscUNBQXFDLENBQUMsQ0FBQztLQUM1RTtBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBaUIsRUFBRSxVQUFrQjtJQUNuRSxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksU0FBUyxHQUFHLFVBQVUsRUFBRTtRQUMzQyxNQUFNLElBQUksaUJBQWlCLENBQ3ZCLG1DQUFtQztZQUNuQyxnQkFBZ0IsR0FBRyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDMUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsSUFBWTtJQUM3RCxRQUFRLEtBQUssRUFBRTtRQUNiLEtBQUssT0FBTztZQUNWLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRTtnQkFDckIsTUFBTSxJQUFJLGlCQUFpQixDQUN2QixvREFBb0QsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUNsRTtZQUNELE1BQU07UUFDUixLQUFLLE9BQU87WUFDVixJQUFJLElBQUksSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRTtnQkFDMUMsTUFBTSxJQUFJLGlCQUFpQixDQUN2QiwrREFBK0Q7b0JBQy9ELElBQUksQ0FBQyxDQUFDO2FBQ1g7WUFDRCxNQUFNO1FBQ1IsS0FBSyxPQUFPO1lBQ1YsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFO2dCQUNyQixNQUFNLElBQUksaUJBQWlCLENBQ3ZCLG9EQUFvRCxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQ2xFO1lBQ0QsTUFBTTtRQUNSO1lBQ0UsTUFBTSxJQUFJLGlCQUFpQixDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQzlEO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHtJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9ufSBmcm9tICcuLi9leGNlcHRpb24vaW52YWxpZF9hcmd1bWVudHNfZXhjZXB0aW9uJztcbmltcG9ydCB7U2VjdXJpdHlFeGNlcHRpb259IGZyb20gJy4uL2V4Y2VwdGlvbi9zZWN1cml0eV9leGNlcHRpb24nO1xuY29uc3QgU1VQUE9SVEVEX0FFU19LRVlfU0laRVM6IG51bWJlcltdID0gWzE2LCAzMl07XG5cbi8qKlxuICogVmFsaWRhdGVzIEFFUyBrZXkgc2l6ZXMsIGF0IHRoZSBtb21lbnQgb25seSAxMjgtYml0IGFuZCAyNTYtYml0IGtleXMgYXJlXG4gKiBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIG4gdGhlIGtleSBzaXplIGluIGJ5dGVzXG4gKiBAdGhyb3dzIHshSW52YWxpZEFyZ3VtZW50c0V4Y2VwdGlvbn1cbiAqIEBzdGF0aWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWVzS2V5U2l6ZShuOiBudW1iZXIpIHtcbiAgaWYgKCFTVVBQT1JURURfQUVTX0tFWV9TSVpFUy5pbmNsdWRlcyhuKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKCd1bnN1cHBvcnRlZCBBRVMga2V5IHNpemU6ICcgKyBuKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IHRoZSBpbnB1dCBpcyBhIG5vbiBudWxsIFVpbnQ4QXJyYXkuXG4gKlxuICogQHRocm93cyB7IUludmFsaWRBcmd1bWVudHNFeGNlcHRpb259XG4gKiBAc3RhdGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlVWludDhBcnJheShpbnB1dDogVWludDhBcnJheSkge1xuICBpZiAoaW5wdXQgPT0gbnVsbCB8fCAhKGlucHV0IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50c0V4Y2VwdGlvbignaW5wdXQgbXVzdCBiZSBhIG5vbiBudWxsIFVpbnQ4QXJyYXknKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB2ZXJzaW9uLCB0aHJvd3MgZXhjZXB0aW9uIGlmIGNhbmRpZGF0ZSB2ZXJzaW9uIGlzIG5lZ2F0aXZlIG9yXG4gKiBiaWdnZXIgdGhhbiBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0gY2FuZGlkYXRlIC0gdmVyc2lvbiB0byBiZSB2YWxpZGF0ZWRcbiAqIEBwYXJhbSBtYXhWZXJzaW9uIC0gdXBwZXIgYm91bmQgb24gdmVyc2lvblxuICogQHRocm93cyB7IVNlY3VyaXR5RXhjZXB0aW9ufVxuICogQHN0YXRpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVWZXJzaW9uKGNhbmRpZGF0ZTogbnVtYmVyLCBtYXhWZXJzaW9uOiBudW1iZXIpIHtcbiAgaWYgKGNhbmRpZGF0ZSA8IDAgfHwgY2FuZGlkYXRlID4gbWF4VmVyc2lvbikge1xuICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihcbiAgICAgICAgJ1ZlcnNpb24gaXMgb3V0IG9mIGJvdW5kLCBtdXN0IGJlICcgK1xuICAgICAgICAnYmV0d2VlbiAwIGFuZCAnICsgbWF4VmVyc2lvbiArICcuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgRUNEU0EgcGFyYW1ldGVycy5cbiAqXG4gKiBAdGhyb3dzIHshU2VjdXJpdHlFeGNlcHRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUVjZHNhUGFyYW1zKGN1cnZlOiBzdHJpbmcsIGhhc2g6IHN0cmluZykge1xuICBzd2l0Y2ggKGN1cnZlKSB7XG4gICAgY2FzZSAnUC0yNTYnOlxuICAgICAgaWYgKGhhc2ggIT0gJ1NIQS0yNTYnKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihcbiAgICAgICAgICAgICdleHBlY3RlZCBTSEEtMjU2IChiZWNhdXNlIGN1cnZlIGlzIFAtMjU2KSBidXQgZ290ICcgKyBoYXNoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1AtMzg0JzpcbiAgICAgIGlmIChoYXNoICE9ICdTSEEtMzg0JyAmJiBoYXNoICE9ICdTSEEtNTEyJykge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oXG4gICAgICAgICAgICAnZXhwZWN0ZWQgU0hBLTM4NCBvciBTSEEtNTEyIChiZWNhdXNlIGN1cnZlIGlzIFAtMzg0KSBidXQgZ290ICcgK1xuICAgICAgICAgICAgaGFzaCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQLTUyMSc6XG4gICAgICBpZiAoaGFzaCAhPSAnU0hBLTUxMicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKFxuICAgICAgICAgICAgJ2V4cGVjdGVkIFNIQS01MTIgKGJlY2F1c2UgY3VydmUgaXMgUC01MjEpIGJ1dCBnb3QgJyArIGhhc2gpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigndW5zdXBwb3J0ZWQgY3VydmU6ICcgKyBjdXJ2ZSk7XG4gIH1cbn1cbiJdfQ==