mirror of
https://github.com/bitwarden/browser
synced 2025-12-18 01:03:35 +00:00
59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
import { EncryptionType } from '../../enums/encryptionType';
|
|
|
|
import { Utils } from '../../misc/utils';
|
|
|
|
export class SymmetricCryptoKey {
|
|
key: ArrayBuffer;
|
|
encKey?: ArrayBuffer;
|
|
macKey?: ArrayBuffer;
|
|
encType: EncryptionType;
|
|
|
|
keyB64: string;
|
|
encKeyB64: string;
|
|
macKeyB64: string;
|
|
|
|
meta: any;
|
|
|
|
constructor(key: ArrayBuffer, encType?: EncryptionType) {
|
|
if (key == null) {
|
|
throw new Error('Must provide key');
|
|
}
|
|
|
|
if (encType == null) {
|
|
if (key.byteLength === 32) {
|
|
encType = EncryptionType.AesCbc256_B64;
|
|
} else if (key.byteLength === 64) {
|
|
encType = EncryptionType.AesCbc256_HmacSha256_B64;
|
|
} else {
|
|
throw new Error('Unable to determine encType.');
|
|
}
|
|
}
|
|
|
|
this.key = key;
|
|
this.encType = encType;
|
|
|
|
if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {
|
|
this.encKey = key;
|
|
this.macKey = null;
|
|
} else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {
|
|
this.encKey = key.slice(0, 16);
|
|
this.macKey = key.slice(16, 32);
|
|
} else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {
|
|
this.encKey = key.slice(0, 32);
|
|
this.macKey = key.slice(32, 64);
|
|
} else {
|
|
throw new Error('Unsupported encType/key length.');
|
|
}
|
|
|
|
if (this.key != null) {
|
|
this.keyB64 = Utils.fromBufferToB64(this.key);
|
|
}
|
|
if (this.encKey != null) {
|
|
this.encKeyB64 = Utils.fromBufferToB64(this.encKey);
|
|
}
|
|
if (this.macKey != null) {
|
|
this.macKeyB64 = Utils.fromBufferToB64(this.macKey);
|
|
}
|
|
}
|
|
}
|