JSFiddle - React, Tailwind, and code Playground
by KgomDr
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/tweetnacl/1.0.0/nacl-fast.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/libsodium-wrappers/0.5.4/sodium.min.js"></script>
<console></console>
JavaScript
const console_el = document.querySelector('console')
const console_log = console.log
console.log = msg => {
console_log(msg)
console_el.innerText = JSON.stringify(msg)
}
let key_pair_alice = nacl.box.keyPair()
let key_pair_bob = nacl.box.keyPair()
let secretkey1 = nacl.box.before(key_pair_alice.publicKey, key_pair_bob.secretKey)
let secretkey2 = nacl.box.before(key_pair_bob.publicKey, key_pair_alice.secretKey)
// let box = nacl.box.after(new Uint8Array([1, 245, 36, 5]), nonce, secretkey1)
// let decrypted = nacl.box.open.after(box, nonce, secretkey2)
let plaintext = sodium.from_string('hello')
console.log(plaintext)
let ad = new Uint8Array([1, 2, 3, 4, 5])
let key_pair1 = sodium.crypto_box_keypair()
let key_pair2 = sodium.crypto_box_keypair()
let key = sodium.crypto_scalarmult(key_pair1.privateKey, key_pair2.publicKey)
let nonce = sodium.randombytes_buf(sodium.crypto_aead_xchacha20poly1305_ietf_NPUBBYTES)
let cyphertext = sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(plaintext, ad, null, nonce, key)
let decrypted = sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(null, cyphertext, ad, nonce, key)
console.log(key)
console.log(sodium.to_string(decrypted))
console.log([sodium.crypto_aead_xchacha20poly1305_ietf_KEYBYTES,
sodium.crypto_aead_xchacha20poly1305_ietf_NPUBBYTES,
sodium.crypto_aead_xchacha20poly1305_ietf_ABYTES,
sodium.crypto_kdf_KEYBYTES,
sodium.crypto_kdf_CONTEXTBYTES,
])
let context = new Uint8Array([1,2,3,4,5,6,7,8])
let salt = new Uint8Array([1,2,3,4,5,6,7,8])
let new_key = sodium.crypto_kdf_derive_from_key(sodium.crypto_aead_xchacha20poly1305_ietf_KEYBYTES, 0,
context, key)
let new_key2 = sodium.crypto_kdf_derive_from_key(sodium.crypto_aead_xchacha20poly1305_ietf_KEYBYTES, 0,
"helloooooooooooooooooo", key)
let new_key3 = sodium.crypto_kdf_derive_from_key(sodium.crypto_aead_xchacha20poly1305_ietf_KEYBYTES, 0,
"hellooooooo", key)
console.log("keys")
console.log(new_key)
console.log(new_key2)
console.log(new_key3)