add assertions

This commit is contained in:
Christophe Diederichs 2020-06-17 11:12:20 +02:00
parent e423d00ebc
commit 272ac68f6b

View File

@ -12,11 +12,15 @@ const crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX = Number.MAX_SAFE_INTEG
const _pad0 = Buffer.alloc(16) const _pad0 = Buffer.alloc(16)
function crypto_aead_chacha20poly1305_ietf_encrypt (c, m, ad, nsec, npub, k) { function crypto_aead_chacha20poly1305_ietf_encrypt (c, m, ad, nsec, npub, k) {
var ret assert(c.length === m.length + crypto_aead_chacha20poly1305_ietf_ABYTES,
"ciphertext should be 'crypto_aead_chacha20poly1305_ietf_ABYTES' longer than message")
assert(npub.length === crypto_aead_chacha20poly1305_ietf_NPUBBYTES,
"npub should be 'crypto_aead_chacha20poly1305_ietf_NPUBBYTES' long")
assert(k.length === crypto_aead_chacha20poly1305_ietf_KEYBYTES,
"k should be 'crypto_aead_chacha20poly1305_ietf_KEYBYTES' long")
assert(m.length <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, 'message is too large') assert(m.length <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, 'message is too large')
ret = crypto_aead_chacha20poly1305_ietf_encrypt_detached(c, c.subarray(m.length), m, ad, nsec, npub, k) var ret = crypto_aead_chacha20poly1305_ietf_encrypt_detached(c.subarray(0, m.length), c.subarray(m.length), m, ad, nsec, npub, k)
if (ret === 0) { if (ret === 0) {
return m.length + crypto_aead_chacha20poly1305_ietf_ABYTES return m.length + crypto_aead_chacha20poly1305_ietf_ABYTES
@ -26,6 +30,15 @@ function crypto_aead_chacha20poly1305_ietf_encrypt(c, m, ad, nsec, npub, k) {
} }
function crypto_aead_chacha20poly1305_ietf_encrypt_detached (c, mac, m, ad, nsec, npub, k) { function crypto_aead_chacha20poly1305_ietf_encrypt_detached (c, mac, m, ad, nsec, npub, k) {
assert(c.length === m.length, 'ciphertext should be same length than message')
assert(npub.length === crypto_aead_chacha20poly1305_ietf_NPUBBYTES,
"npub should be 'crypto_aead_chacha20poly1305_ietf_NPUBBYTES' long")
assert(k.length === crypto_aead_chacha20poly1305_ietf_KEYBYTES,
"k should be 'crypto_aead_chacha20poly1305_ietf_KEYBYTES' long")
assert(m.length <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, 'message is too large')
assert(mac.length <= crypto_aead_chacha20poly1305_ietf_ABYTES,
"mac should be 'crypto_aead_chacha20poly1305_ietf_ABYTES' long")
const block0 = new Uint8Array(64) const block0 = new Uint8Array(64)
var slen = Buffer.alloc(8) var slen = Buffer.alloc(8)
@ -50,10 +63,18 @@ function crypto_aead_chacha20poly1305_ietf_encrypt_detached(c, mac, m, ad, nsec,
poly.finish(mac, 0) poly.finish(mac, 0)
slen.fill(0) slen.fill(0)
return crypto_aead_chacha20poly1305_ietf_ABYTES return 0
} }
function crypto_aead_chacha20poly1305_ietf_decrypt (m, nsec, c, ad, npub, k) { function crypto_aead_chacha20poly1305_ietf_decrypt (m, nsec, c, ad, npub, k) {
assert(m.length === c.length - crypto_aead_chacha20poly1305_ietf_ABYTES,
"message should be 'crypto_aead_chacha20poly1305_ietf_ABYTES' shorter than ciphertext")
assert(npub.length === crypto_aead_chacha20poly1305_ietf_NPUBBYTES,
"npub should be 'crypto_aead_chacha20poly1305_ietf_NPUBBYTES' long")
assert(k.length === crypto_aead_chacha20poly1305_ietf_KEYBYTES,
"k should be 'crypto_aead_chacha20poly1305_ietf_KEYBYTES' long")
assert(m.length <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, 'message is too large')
var ret = -1 var ret = -1
if (c.length >= crypto_aead_chacha20poly1305_ietf_ABYTES) { if (c.length >= crypto_aead_chacha20poly1305_ietf_ABYTES) {
@ -72,6 +93,15 @@ function crypto_aead_chacha20poly1305_ietf_decrypt (m, nsec, c, ad, npub, k) {
} }
function crypto_aead_chacha20poly1305_ietf_decrypt_detached (m, nsec, c, mac, ad, npub, k) { function crypto_aead_chacha20poly1305_ietf_decrypt_detached (m, nsec, c, mac, ad, npub, k) {
assert(c.length === m.length, 'message should be same length than ciphertext')
assert(npub.length === crypto_aead_chacha20poly1305_ietf_NPUBBYTES,
"npub should be 'crypto_aead_chacha20poly1305_ietf_NPUBBYTES' long")
assert(k.length === crypto_aead_chacha20poly1305_ietf_KEYBYTES,
"k should be 'crypto_aead_chacha20poly1305_ietf_KEYBYTES' long")
assert(m.length <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, 'message is too large')
assert(mac.length <= crypto_aead_chacha20poly1305_ietf_ABYTES,
"mac should be 'crypto_aead_chacha20poly1305_ietf_ABYTES' long")
const block0 = new Uint8Array(64) const block0 = new Uint8Array(64)
const slen = Buffer.alloc(8) const slen = Buffer.alloc(8)
const computed_mac = Buffer.alloc(crypto_aead_chacha20poly1305_ietf_ABYTES) const computed_mac = Buffer.alloc(crypto_aead_chacha20poly1305_ietf_ABYTES)
@ -126,7 +156,6 @@ module.exports = {
crypto_aead_chacha20poly1305_ietf_ABYTES, crypto_aead_chacha20poly1305_ietf_ABYTES,
crypto_aead_chacha20poly1305_ietf_KEYBYTES, crypto_aead_chacha20poly1305_ietf_KEYBYTES,
crypto_aead_chacha20poly1305_ietf_NPUBBYTES, crypto_aead_chacha20poly1305_ietf_NPUBBYTES,
crypto_aead_chacha20poly1305_ietf_NSECBYTES crypto_aead_chacha20poly1305_ietf_NSECBYTES,
} crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX
d_chacha20poly1305_ietf_NSECBYTES
} }