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.
41 lines • 4.28 kB
JavaScript
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { SecurityException } from '../exception/security_exception';
import { PbKeyset } from './proto';
/**
* BinaryKeysetReader knows how to read a keyset or an encrypted keyset
* serialized to binary format.
*
* @final
*/
export class BinaryKeysetReader {
constructor(serializedKeyset) {
this.serializedKeyset = serializedKeyset;
}
static withUint8Array(serializedKeyset) {
if (!serializedKeyset) {
throw new SecurityException('Serialized keyset has to be non-null.');
}
return new BinaryKeysetReader(serializedKeyset);
}
read() {
let keyset;
try {
keyset = PbKeyset.deserializeBinary(this.serializedKeyset);
}
catch (e) {
throw new SecurityException('Could not parse the given serialized proto as a keyset proto.');
}
if (keyset.getKeyList().length === 0) {
throw new SecurityException('Could not parse the given serialized proto as a keyset proto.');
}
return keyset;
}
readEncrypted() {
throw new SecurityException('Not implemented yet.');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5X2tleXNldF9yZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9pbnRlcm5hbC9iaW5hcnlfa2V5c2V0X3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFHbEUsT0FBTyxFQUFvQixRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFcEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQTZCLGdCQUE0QjtRQUE1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVk7SUFBRyxDQUFDO0lBRTdELE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQTRCO1FBQ2hELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixNQUFNLElBQUksaUJBQWlCLENBQUMsdUNBQXVDLENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxNQUFnQixDQUFDO1FBQ3JCLElBQUk7WUFDRixNQUFNLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzVEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksaUJBQWlCLENBQ3ZCLCtEQUErRCxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxpQkFBaUIsQ0FDdkIsK0RBQStELENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxJQUFJLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQge1NlY3VyaXR5RXhjZXB0aW9ufSBmcm9tICcuLi9leGNlcHRpb24vc2VjdXJpdHlfZXhjZXB0aW9uJztcblxuaW1wb3J0IHtLZXlzZXRSZWFkZXJ9IGZyb20gJy4va2V5c2V0X3JlYWRlcic7XG5pbXBvcnQge1BiRW5jcnlwdGVkS2V5c2V0LCBQYktleXNldH0gZnJvbSAnLi9wcm90byc7XG5cbi8qKlxuICogQmluYXJ5S2V5c2V0UmVhZGVyIGtub3dzIGhvdyB0byByZWFkIGEga2V5c2V0IG9yIGFuIGVuY3J5cHRlZCBrZXlzZXRcbiAqIHNlcmlhbGl6ZWQgdG8gYmluYXJ5IGZvcm1hdC5cbiAqXG4gKiBAZmluYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEJpbmFyeUtleXNldFJlYWRlciBpbXBsZW1lbnRzIEtleXNldFJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2VyaWFsaXplZEtleXNldDogVWludDhBcnJheSkge31cblxuICBzdGF0aWMgd2l0aFVpbnQ4QXJyYXkoc2VyaWFsaXplZEtleXNldDogVWludDhBcnJheSk6IEJpbmFyeUtleXNldFJlYWRlciB7XG4gICAgaWYgKCFzZXJpYWxpemVkS2V5c2V0KSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oJ1NlcmlhbGl6ZWQga2V5c2V0IGhhcyB0byBiZSBub24tbnVsbC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBCaW5hcnlLZXlzZXRSZWFkZXIoc2VyaWFsaXplZEtleXNldCk7XG4gIH1cblxuICByZWFkKCkge1xuICAgIGxldCBrZXlzZXQ6IFBiS2V5c2V0O1xuICAgIHRyeSB7XG4gICAgICBrZXlzZXQgPSBQYktleXNldC5kZXNlcmlhbGl6ZUJpbmFyeSh0aGlzLnNlcmlhbGl6ZWRLZXlzZXQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IHBhcnNlIHRoZSBnaXZlbiBzZXJpYWxpemVkIHByb3RvIGFzIGEga2V5c2V0IHByb3RvLicpO1xuICAgIH1cbiAgICBpZiAoa2V5c2V0LmdldEtleUxpc3QoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IHBhcnNlIHRoZSBnaXZlbiBzZXJpYWxpemVkIHByb3RvIGFzIGEga2V5c2V0IHByb3RvLicpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5c2V0O1xuICB9XG5cbiAgcmVhZEVuY3J5cHRlZCgpOiBQYkVuY3J5cHRlZEtleXNldCB7XG4gICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCdOb3QgaW1wbGVtZW50ZWQgeWV0LicpO1xuICB9XG59XG4iXX0=