/* eslint-disable camelcase */
const test = require('brittle')
const sodium = require('..')

test('crypto_onetimeauth', function (t) {
  const key = Buffer.alloc(sodium.crypto_onetimeauth_KEYBYTES)
  const mac = Buffer.alloc(sodium.crypto_onetimeauth_BYTES)
  const value = Buffer.from('Hello, World!')

  sodium.randombytes_buf(key)
  sodium.crypto_onetimeauth(mac, value, key)

  t.not(mac, Buffer.alloc(mac.length), 'not blank')
  t.absent(sodium.crypto_onetimeauth_verify(Buffer.alloc(mac.length), value, key), 'does not verify')
  t.ok(sodium.crypto_onetimeauth_verify(mac, value, key), 'verifies')
})

test.skip('crypto_onetimeauth_state', function (t) {
  const key = Buffer.alloc(sodium.crypto_onetimeauth_KEYBYTES, 'lo')
  const state = Buffer.alloc(sodium.crypto_onetimeauth_STATEBYTES)

  t.exception.all(function () {
    sodium.crypto_onetimeauth_init(state)
  }, 'key required')

  key[0] = 42

  sodium.crypto_onetimeauth_init(state, key)
  const value = Buffer.from('Hello, World!')

  for (let i = 0; i < 10; i++) sodium.crypto_onetimeauth_update(state, value)

  const mac = Buffer.alloc(sodium.crypto_onetimeauth_BYTES)
  sodium.crypto_onetimeauth_final(state, mac)

  t.alike(mac.toString('hex'), 'ac35df70e6b95051e015de11a6cbf4ab', 'streaming mac')
})
