UNPKG

@digitalcredentials/x25519-key-agreement-key-2020

Version:

An X25519 (Curve25519) DH (Diffie-Hellman) key implementation to work with the X25519 2020 Crypto suite.

46 lines (35 loc) 1.42 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var nacl = require('tweetnacl'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var nacl__default = /*#__PURE__*/_interopDefaultLegacy(nacl); /*! * Copyright (c) 2021-2022 Digital Bazaar, Inc. All rights reserved. */ /** * Note: The following two functions are async to match the signature of * their native Node.js counterparts (see './crypto.js'). */ async function deriveSecret({privateKey, remotePublicKey}) { return nacl__default['default'].scalarMult(privateKey, remotePublicKey); } async function generateKeyPair() { // Each is a Uint8Array with 32-byte key const {publicKey, secretKey: privateKey} = nacl__default['default'].box.keyPair(); return {publicKey, privateKey}; } function ed25519SecretKeyToX25519(secretKey) { const hash = new Uint8Array(64); // X25519 secret key is the first 32 bytes of the hash with clamped values nacl__default['default'].lowlevel.crypto_hash(hash, secretKey, 32); hash[0] &= 248; hash[31] &= 127; hash[31] |= 64; const x25519SecretKey = hash.slice(0, 32); // zero-fill remainder of hash before returning hash.fill(0, 32); return x25519SecretKey; } exports.deriveSecret = deriveSecret; exports.ed25519SecretKeyToX25519 = ed25519SecretKeyToX25519; exports.generateKeyPair = generateKeyPair;