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  generateKeyPairSync,
11  getCurves,
12} = require('crypto');
13
14// This test creates EC key pairs on curves without associated OIDs.
15// Specifying a key encoding should not crash.
16{
17  if (process.versions.openssl >= '1.1.1i') {
18    for (const namedCurve of ['Oakley-EC2N-3', 'Oakley-EC2N-4']) {
19      if (!getCurves().includes(namedCurve))
20        continue;
21
22      const expectedErrorCode =
23        common.hasOpenSSL3 ? 'ERR_OSSL_MISSING_OID' : 'ERR_OSSL_EC_MISSING_OID';
24      const params = {
25        namedCurve,
26        publicKeyEncoding: {
27          format: 'der',
28          type: 'spki'
29        }
30      };
31
32      assert.throws(() => {
33        generateKeyPairSync('ec', params);
34      }, {
35        code: expectedErrorCode
36      });
37
38      generateKeyPair('ec', params, common.mustCall((err) => {
39        assert.strictEqual(err.code, expectedErrorCode);
40      }));
41    }
42  }
43}
44