Повторная реализация старого проекта C ++, который использует SHA2 в nodejs? - PullRequest
0 голосов
/ 02 июля 2018

Я должен конвертировать старый проект c ++ в nodejs. Этот проект полагается на sha2 (polarssl) для выполнения некоторой криптографии. Я попытался сделать это с помощью крипто, но мне не удалось, так как выходы совершенно разные.

//here i declare 2 keys
unsigned char key1[] = {0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F};
unsigned char key2[] = {0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC};
sha2_context sha_ctx;


// Part 1: Compute the key with key1 and key 2
sha2_starts( &sha_ctx, 0 );
sha2_update( &sha_ctx, key1, sizeof(key1) );
sha2_update( &sha_ctx, key2, sizeof(key2) );
sha2_finish( &sha_ctx, digest );


// Part 2: The HMAC SHA-2 HMAC start
sha2_hmac_starts( &sha_ctx, digest, 32, 0 );

// SHA-2 Update
sha2_hmac_update( &sha_ctx, buffer, 16 );

// SHA-2 Finish
sha2_hmac_finish( &sha_ctx, digest );

Вот мои попытки:

  1. Использование крипто-HMAC (я пробовал, даже если думал, что это не правильно)
var  {key1, key2, key_expected, key_expected_hex} = common;
// They use http://asf.atmel.com/docs/latest/uc3c/html/sha2_8h.html
function test(){
    var hmac = crypto.createHmac('SHA256', new Buffer([0x00]))
    hmac.update(key1);
    hmac.update(key2);
    var r = hmac.digest('hex');
    console.log({
        output: r,
        expected: key_expected_hex
    })
    return r === key_expected_hex;
}
  1. Использование библиотеки npm 'sha2'
const {SHA256} = require("sha2");
function test(){
    var hmac = SHA256(key1);
    hmac = SHA256(key2);
    console.log(hmac);
    var r = hmac.toString('hex');;
    console.log({
        output: r,
        expected: key_expected_hex
    })
    return r === key_expected_hex;
}

Может ли кто-нибудь помочь мне указать мне правильное направление?

1 Ответ

0 голосов
/ 02 июля 2018

В node.js часть 1, состоящая из вычисления ключа для hmac, используемого в части 2, не должна использовать hmac, а только sha256, как в коде C ++:

const crypto = require('crypto');

const key1 = new Buffer([0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F]);
const key2 = new Buffer([0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC]);

// Part 1: Compute the key from key1 and key2                                   
var h = crypto.createHash('sha256');
h.update(key1);
h.update(key2);
var keyForHmac = h.digest();
console.log('key:  ' + keyForHmac.toString('hex'));

// Part 2: The HMAC SHA-256                                                     
var buffer = new Buffer([/* data to be HMACed */]);
var hmac = crypto.createHmac('sha256', keyForHmac);
hmac.update(buffer);
var hmacDigest = hmac.digest();
console.log('hmac: ' + hmacDigest.toString('hex'));
...