11cb0ef41Sopenharmony_ci/* eslint-disable no-proto */
21cb0ef41Sopenharmony_ci'use strict';
31cb0ef41Sopenharmony_ciconst common = require('../common');
41cb0ef41Sopenharmony_ci
51cb0ef41Sopenharmony_ciif (!common.hasCrypto)
61cb0ef41Sopenharmony_ci  common.skip('missing crypto');
71cb0ef41Sopenharmony_ci
81cb0ef41Sopenharmony_ciconst { strictEqual, deepStrictEqual } = require('assert');
91cb0ef41Sopenharmony_ciconst { translatePeerCertificate } = require('_tls_common');
101cb0ef41Sopenharmony_ci
111cb0ef41Sopenharmony_ciconst certString = '__proto__=42\nA=1\nB=2\nC=3';
121cb0ef41Sopenharmony_ci
131cb0ef41Sopenharmony_cistrictEqual(translatePeerCertificate(null), null);
141cb0ef41Sopenharmony_cistrictEqual(translatePeerCertificate(undefined), null);
151cb0ef41Sopenharmony_ci
161cb0ef41Sopenharmony_cistrictEqual(translatePeerCertificate(0), null);
171cb0ef41Sopenharmony_cistrictEqual(translatePeerCertificate(1), 1);
181cb0ef41Sopenharmony_ci
191cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({}), {});
201cb0ef41Sopenharmony_ci
211cb0ef41Sopenharmony_ci// Earlier versions of Node.js parsed the issuer property but did so
221cb0ef41Sopenharmony_ci// incorrectly. This behavior has now reached end-of-life and user-supplied
231cb0ef41Sopenharmony_ci// strings will not be parsed at all.
241cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ issuer: '' }),
251cb0ef41Sopenharmony_ci                { issuer: '' });
261cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ issuer: null }),
271cb0ef41Sopenharmony_ci                { issuer: null });
281cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ issuer: certString }),
291cb0ef41Sopenharmony_ci                { issuer: certString });
301cb0ef41Sopenharmony_ci
311cb0ef41Sopenharmony_ci// Earlier versions of Node.js parsed the issuer property but did so
321cb0ef41Sopenharmony_ci// incorrectly. This behavior has now reached end-of-life and user-supplied
331cb0ef41Sopenharmony_ci// strings will not be parsed at all.
341cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ subject: '' }),
351cb0ef41Sopenharmony_ci                { subject: '' });
361cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ subject: null }),
371cb0ef41Sopenharmony_ci                { subject: null });
381cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ subject: certString }),
391cb0ef41Sopenharmony_ci                { subject: certString });
401cb0ef41Sopenharmony_ci
411cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ issuerCertificate: '' }),
421cb0ef41Sopenharmony_ci                { issuerCertificate: null });
431cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ issuerCertificate: null }),
441cb0ef41Sopenharmony_ci                { issuerCertificate: null });
451cb0ef41Sopenharmony_cideepStrictEqual(
461cb0ef41Sopenharmony_ci  translatePeerCertificate({ issuerCertificate: { subject: certString } }),
471cb0ef41Sopenharmony_ci  { issuerCertificate: { subject: certString } });
481cb0ef41Sopenharmony_ci
491cb0ef41Sopenharmony_ci{
501cb0ef41Sopenharmony_ci  const cert = {};
511cb0ef41Sopenharmony_ci  cert.issuerCertificate = cert;
521cb0ef41Sopenharmony_ci  deepStrictEqual(translatePeerCertificate(cert), { issuerCertificate: cert });
531cb0ef41Sopenharmony_ci}
541cb0ef41Sopenharmony_ci
551cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ infoAccess: '' }),
561cb0ef41Sopenharmony_ci                { infoAccess: Object.create(null) });
571cb0ef41Sopenharmony_cideepStrictEqual(translatePeerCertificate({ infoAccess: null }),
581cb0ef41Sopenharmony_ci                { infoAccess: null });
591cb0ef41Sopenharmony_ci{
601cb0ef41Sopenharmony_ci  const input =
611cb0ef41Sopenharmony_ci      '__proto__:mostly harmless\n' +
621cb0ef41Sopenharmony_ci      'hasOwnProperty:not a function\n' +
631cb0ef41Sopenharmony_ci      'OCSP - URI:file:///etc/passwd\n';
641cb0ef41Sopenharmony_ci  const expected = Object.create(null);
651cb0ef41Sopenharmony_ci  expected.__proto__ = ['mostly harmless'];
661cb0ef41Sopenharmony_ci  expected.hasOwnProperty = ['not a function'];
671cb0ef41Sopenharmony_ci  expected['OCSP - URI'] = ['file:///etc/passwd'];
681cb0ef41Sopenharmony_ci  deepStrictEqual(translatePeerCertificate({ infoAccess: input }),
691cb0ef41Sopenharmony_ci                  { infoAccess: expected });
701cb0ef41Sopenharmony_ci}
71