Объедините два значения CRC32 в одно в nodejs

Я хочу объединить два предварительно рассчитанных crc32 в новый:

Пример кода в nodejs:

// i'm using crc32 lib: https://github.com/brianloveswords/buffer-crc32/blob/master/index.js
var crc32 = require('buffer-crc32');

var foo = new Buffer('foo');
var bar = new Buffer('bar');

var fooCrc32 = crc32(foo); // <Buffer 8c 73 65 21>
var barCrc32 = crc32(bar); // <Buffer 76 ff 8c aa>

// how to combine crc32 of foo and crc32 of bar to get crc32 of 'foobar'
var foobarCrc32 = some_function(fooCrc32, barCrc32);  // <Buffer 9e f6 1f 95> 

Как сделать это в nodejs? Я знаю, что это возможно из-за функции zlib crc32_combine:

ZEXTERN uLong ZEXPORT crc32_combine OF ((uLong crc1, uLong crc2, z_off_t len2)); Объедините два контрольных значения CRC-32 в одно. Для двух последовательностей байтов, seq1 и seq2 с длинами len1 и len2, для каждой были вычислены контрольные значения CRC-32, crc1 и crc2. crc32_combine () возвращает контрольное значение CRC-32 для конкатенированных seq1 и seq2, требуя только crc1, crc2 и len2.

Но я не знаю, как это реализовать в nodejs. Есть ли в nodejs какая-нибудь библиотека, которая делает это, или, может быть, какой-то GIST? Может ли кто-нибудь предоставить эту функцию в nodejs?


person Tereska    schedule 29.05.2013    source источник


Ответы (3)


Поскольку они в любом случае используют zlib, вы можете попросить авторов nodejs добавить интерфейс в crc32_combine() zlib.

За исключением этого, вы можете скопировать исходный код из zlib и переписать его на js.

Обратите внимание, что только двух crc недостаточно. Вам нужны два CRC и длины второй части.

person Mark Adler    schedule 29.05.2013
comment
Очень хороший. Вы можете рассмотреть возможность предоставления информации о том, как вы это сделали, в ответе на свой вопрос, на случай, если кто-то другой задаст тот же вопрос и когда-нибудь найдет его. - person Mark Adler; 31.05.2013

Если кому-то еще нужна эта функциональность, я сделал модуль для узла:

https://github.com/tereska/node-crc-utils

person Tereska    schedule 30.05.2013

Должна быть возможность реализовать операцию в Node, вот код в zlib: http://www.raspberryginger.com/jbailey/minix/html/crc32_8c-source.html#l00370

При этом вам, вероятно, лучше вызвать zlib C из узла, а не повторно реализовывать его.

person Zack Bloom    schedule 30.05.2013