| function runDigestTests(subtle, sourceData, getVectors) { | |
| function algorithmName(algorithm) { | |
| return typeof algorithm === 'string' ? algorithm : algorithm.name; | |
| } | |
| function withNameGetter(algorithm, getter) { | |
| var result = typeof algorithm === 'string' ? {} : { ...algorithm }; | |
| Object.defineProperty(result, 'name', { | |
| enumerable: true, | |
| get: getter, | |
| }); | |
| return result; | |
| } | |
| Object.keys(sourceData).forEach(function (size) { | |
| getVectors(size).forEach(function (vector) { | |
| promise_test(function () { | |
| return subtle.digest(vector.algorithm, sourceData[size]) | |
| .then(function (result) { | |
| assert_true( | |
| equalBuffers(result, vector.expected), | |
| 'digest matches expected' | |
| ); | |
| }); | |
| }, vector.label); | |
| if (!vector.mutations || sourceData[size].length === 0) { | |
| return; | |
| } | |
| promise_test(function () { | |
| var buffer = new Uint8Array(sourceData[size]); | |
| buffer[0] = ~buffer[0]; | |
| var algorithm = withNameGetter(vector.algorithm, function () { | |
| buffer[0] = sourceData[size][0]; | |
| return algorithmName(vector.algorithm); | |
| }); | |
| return subtle.digest(algorithm, buffer).then(function (result) { | |
| assert_true( | |
| equalBuffers(result, vector.expected), | |
| 'digest matches expected' | |
| ); | |
| }); | |
| }, vector.label + ' and altered buffer during call'); | |
| promise_test(function () { | |
| var buffer = new Uint8Array(sourceData[size]); | |
| var promise = subtle.digest(vector.algorithm, buffer) | |
| .then(function (result) { | |
| assert_true( | |
| equalBuffers(result, vector.expected), | |
| 'digest matches expected' | |
| ); | |
| }); | |
| buffer[0] = ~buffer[0]; | |
| return promise; | |
| }, vector.label + ' and altered buffer after call'); | |
| promise_test(function () { | |
| var buffer = new Uint8Array(sourceData[size]); | |
| var algorithm = withNameGetter(vector.algorithm, function () { | |
| if (!buffer.buffer.detached) { | |
| buffer.buffer.transfer(); | |
| } | |
| return algorithmName(vector.algorithm); | |
| }); | |
| return subtle.digest(algorithm, buffer).then(function (result) { | |
| assert_true( | |
| equalBuffers(result, vector.emptyExpected), | |
| 'digest on transferred buffer should match result for empty buffer' | |
| ); | |
| }); | |
| }, vector.label + ' and transferred buffer during call'); | |
| promise_test(function () { | |
| var buffer = new Uint8Array(sourceData[size]); | |
| var promise = subtle.digest(vector.algorithm, buffer) | |
| .then(function (result) { | |
| assert_true( | |
| equalBuffers(result, vector.expected), | |
| 'digest matches expected' | |
| ); | |
| }); | |
| buffer.buffer.transfer(); | |
| return promise; | |
| }, vector.label + ' and transferred buffer after call'); | |
| }); | |
| }); | |
| } |