mirror of
https://github.com/crypto-pro-web/crypto-pro-js.git
synced 2025-04-19 12:03:10 +03:00
113 lines
3.3 KiB
TypeScript
113 lines
3.3 KiB
TypeScript
import 'cadesplugin';
|
|
import { rawCertificates, parsedCertificates } from '../__mocks__/certificates';
|
|
import { createDetachedSignature } from './createDetachedSignature';
|
|
import { _getCadesCert } from '../helpers/_getCadesCert';
|
|
import { addDetachedSignature } from './addDetachedSignature';
|
|
import { createHash } from './createHash';
|
|
|
|
const [rawCertificateMock] = rawCertificates;
|
|
const [parsedCertificateMock] = parsedCertificates;
|
|
|
|
jest.mock('../helpers/_getCadesCert', () => ({ _getCadesCert: jest.fn(() => rawCertificateMock) }));
|
|
|
|
beforeEach(() => {
|
|
(_getCadesCert as jest.Mock).mockClear();
|
|
});
|
|
|
|
const executionSteps = [
|
|
Symbol('step 0'),
|
|
Symbol('step 1'),
|
|
Symbol('step 2'),
|
|
Symbol('step 3'),
|
|
Symbol('step 4'),
|
|
Symbol('step 5'),
|
|
Symbol('step 6'),
|
|
Symbol('step 7'),
|
|
];
|
|
|
|
const executionFlow = {
|
|
[executionSteps[0]]: {
|
|
propset_Name: jest.fn(),
|
|
propset_Value: jest.fn(),
|
|
},
|
|
[executionSteps[1]]: {
|
|
propset_ContentEncoding: jest.fn(),
|
|
propset_Content: jest.fn(),
|
|
SignHash: jest.fn(() => executionSteps[4]),
|
|
VerifyHash: jest.fn(),
|
|
CoSignHash: jest.fn(() => executionSteps[6]),
|
|
},
|
|
[executionSteps[2]]: {
|
|
propset_Certificate: jest.fn(),
|
|
AuthenticatedAttributes2: executionSteps[3],
|
|
propset_Options: jest.fn(),
|
|
},
|
|
[executionSteps[3]]: {
|
|
Add: jest.fn(),
|
|
},
|
|
[executionSteps[4]]: 'signature',
|
|
[executionSteps[5]]: {
|
|
propset_Algorithm: jest.fn(),
|
|
propset_DataEncoding: jest.fn(),
|
|
Hash: jest.fn(),
|
|
Value: executionSteps[7],
|
|
SetHashValue: jest.fn(),
|
|
},
|
|
[executionSteps[6]]: 'newSignature',
|
|
[executionSteps[7]]: 'hash',
|
|
};
|
|
|
|
window.cadesplugin.__defineExecutionFlow(executionFlow);
|
|
window.cadesplugin.CreateObjectAsync.mockImplementation((object) => {
|
|
switch (object) {
|
|
case 'CADESCOM.CPAttribute':
|
|
return executionSteps[0];
|
|
case 'CAdESCOM.CadesSignedData':
|
|
return executionSteps[1];
|
|
case 'CAdESCOM.CPSigner':
|
|
return executionSteps[2];
|
|
case 'CAdESCOM.HashedData':
|
|
return executionSteps[5];
|
|
}
|
|
});
|
|
|
|
describe('addDetachedSignature', () => {
|
|
test('uses specified certificate', async () => {
|
|
const originalBufferFrom = global.Buffer.from;
|
|
|
|
(global.Buffer.from as jest.Mock) = jest.fn(() => ({
|
|
toString: jest.fn(),
|
|
}));
|
|
|
|
const signature = await createDetachedSignature(parsedCertificateMock.thumbprint, 'message');
|
|
const signatureHash = await createHash(signature);
|
|
await addDetachedSignature(parsedCertificateMock.thumbprint, signature, signatureHash);
|
|
|
|
expect(_getCadesCert).toHaveBeenCalledWith(parsedCertificateMock.thumbprint);
|
|
|
|
expect(global.Buffer.from).toHaveBeenCalledTimes(1);
|
|
|
|
global.Buffer.from = originalBufferFrom;
|
|
});
|
|
|
|
test('returns new signature', async () => {
|
|
const originalBufferFrom = global.Buffer.from;
|
|
|
|
(global.Buffer.from as jest.Mock) = jest.fn(() => ({
|
|
toString: jest.fn(),
|
|
}));
|
|
|
|
let signature = await createDetachedSignature(parsedCertificateMock.thumbprint, 'message');
|
|
const signatureHash = await createHash(signature);
|
|
signature = await addDetachedSignature(parsedCertificateMock.thumbprint, signature, signatureHash);
|
|
|
|
expect(_getCadesCert).toHaveBeenCalledWith(parsedCertificateMock.thumbprint);
|
|
|
|
expect(global.Buffer.from).toHaveBeenCalledTimes(1);
|
|
|
|
expect(signature).toEqual('newSignature');
|
|
|
|
global.Buffer.from = originalBufferFrom;
|
|
});
|
|
});
|