var assert = require('assert');
var sodium = require('../build/Release/sodium');

var shared = Buffer.from([
    0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d,
    0xe1, 0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35,
    0x0f, 0x25, 0xe0, 0x7e, 0x21, 0xc9, 0x47,
    0xd1, 0x9e, 0x33, 0x76, 0xf0, 0x9b, 0x3c,
    0x1e, 0x16, 0x17, 0x42 
]);

var c = Buffer.from([
    0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x20, 0x33,
    0x32, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x20, 0x6b
]);

var expected= Buffer.from([
    0x1b,0x27,0x55,0x64,0x73,0xe9,0x85,0xd4,
    0x62,0xcd,0x51,0x19,0x7a,0x9a,0x46,0xc7,
    0x60,0x09,0x54,0x9e,0xac,0x64,0x74,0xf2,
    0x06,0xc4,0xee,0x08,0x44,0xf6,0x83,0x89
]);

describe("libsodium_core1", function () {
    it('crypto_core_hsalsa20', function() {
        var zero = Buffer.alloc(16);
        var fisrtKey = sodium.crypto_core_hsalsa20(zero, shared, c);
        assert(fisrtKey.equals(expected));

        assert(sodium.crypto_core_hsalsa20_outputbytes() > 0);
        assert(sodium.crypto_core_hsalsa20_inputbytes() > 0);
        assert(sodium.crypto_core_hsalsa20_keybytes() > 0);
        assert(sodium.crypto_core_hsalsa20_constbytes() > 0);
    });
});

