Signal-Desktop/ts/test-electron/context/Crypto_test.ts

60 lines
1.4 KiB
TypeScript

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import crypto from 'crypto';
import {
CipherType,
HashType,
hash,
sign,
encrypt,
decrypt,
} from '../../Crypto';
describe('SignalContext.Crypto', () => {
describe('hash', () => {
it('returns SHA512 hash of the input', () => {
const result = hash(HashType.size512, Buffer.from('signal'));
assert.strictEqual(
Buffer.from(result).toString('base64'),
'WxneQjrfSlY95Bi+SAzDAr2cf3mxUXePeNYn6DILN4a8NFr9VelTbP5tGHdthi+' +
'mrJLqMZd1I6w8CxCnmJ/OFw=='
);
});
});
describe('sign', () => {
it('returns hmac SHA256 hash of the input', () => {
const result = sign(Buffer.from('secret'), Buffer.from('signal'));
assert.strictEqual(
Buffer.from(result).toString('base64'),
'5ewbITW27c1F7dluF9KwGcVQSxmZp6mpVhPj3ww1Sh8='
);
});
});
describe('encrypt+decrypt', () => {
it('returns original input', () => {
const iv = crypto.randomBytes(16);
const key = crypto.randomBytes(32);
const input = Buffer.from('plaintext');
const ciphertext = encrypt(CipherType.AES256CBC, {
key,
iv,
plaintext: input,
});
const plaintext = decrypt(CipherType.AES256CBC, {
key,
iv,
ciphertext,
});
assert.strictEqual(Buffer.from(plaintext).toString(), 'plaintext');
});
});
});