1'use strict';
2
3const common = require('../common');
4if (!common.hasCrypto)
5  common.skip('missing crypto');
6
7const assert = require('assert');
8const {
9  generateKeyPair,
10} = require('crypto');
11
12// Test async elliptic curve key generation with 'jwk' encoding.
13{
14  [
15    'ed25519',
16    'ed448',
17    'x25519',
18    'x448',
19  ].forEach((type) => {
20    generateKeyPair(type, {
21      publicKeyEncoding: {
22        format: 'jwk'
23      },
24      privateKeyEncoding: {
25        format: 'jwk'
26      }
27    }, common.mustSucceed((publicKey, privateKey) => {
28      assert.strictEqual(typeof publicKey, 'object');
29      assert.strictEqual(typeof privateKey, 'object');
30      assert.strictEqual(publicKey.x, privateKey.x);
31      assert(!publicKey.d);
32      assert(privateKey.d);
33      assert.strictEqual(publicKey.kty, 'OKP');
34      assert.strictEqual(publicKey.kty, privateKey.kty);
35      const expectedCrv = `${type.charAt(0).toUpperCase()}${type.slice(1)}`;
36      assert.strictEqual(publicKey.crv, expectedCrv);
37      assert.strictEqual(publicKey.crv, privateKey.crv);
38    }));
39  });
40}
41