(sizeOrKey, keyEncoding, generator, genEncoding)
| 81 | const DH_GENERATOR = 2; |
| 82 | |
| 83 | function DiffieHellman(sizeOrKey, keyEncoding, generator, genEncoding) { |
| 84 | if (!(this instanceof DiffieHellman)) |
| 85 | return new DiffieHellman(sizeOrKey, keyEncoding, generator, genEncoding); |
| 86 | |
| 87 | if (typeof sizeOrKey !== 'number' && |
| 88 | typeof sizeOrKey !== 'string' && |
| 89 | !isArrayBufferView(sizeOrKey) && |
| 90 | !isAnyArrayBuffer(sizeOrKey)) { |
| 91 | throw new ERR_INVALID_ARG_TYPE( |
| 92 | 'sizeOrKey', |
| 93 | ['number', 'string', 'ArrayBuffer', 'Buffer', 'TypedArray', 'DataView'], |
| 94 | sizeOrKey, |
| 95 | ); |
| 96 | } |
| 97 | |
| 98 | // Sizes < 0 don't make sense but they _are_ accepted (and subsequently |
| 99 | // rejected with ERR_OSSL_BN_BITS_TOO_SMALL) by OpenSSL. The glue code |
| 100 | // in node_crypto.cc accepts values that are IsInt32() for that reason |
| 101 | // and that's why we do that here too. |
| 102 | if (typeof sizeOrKey === 'number') { |
| 103 | validateInt32(sizeOrKey, 'sizeOrKey'); |
| 104 | // Coerce -0 to +0. |
| 105 | sizeOrKey += 0; |
| 106 | } |
| 107 | |
| 108 | if (keyEncoding && !Buffer.isEncoding(keyEncoding) && |
| 109 | keyEncoding !== 'buffer') { |
| 110 | genEncoding = generator; |
| 111 | generator = keyEncoding; |
| 112 | keyEncoding = false; |
| 113 | } |
| 114 | |
| 115 | if (typeof sizeOrKey !== 'number') |
| 116 | sizeOrKey = toBuf(sizeOrKey, keyEncoding); |
| 117 | |
| 118 | if (!generator) { |
| 119 | generator = DH_GENERATOR; |
| 120 | } else if (typeof generator === 'number') { |
| 121 | validateInt32(generator, 'generator'); |
| 122 | } else if (typeof generator === 'string') { |
| 123 | generator = toBuf(generator, genEncoding); |
| 124 | } else if (!isArrayBufferView(generator) && !isAnyArrayBuffer(generator)) { |
| 125 | throw new ERR_INVALID_ARG_TYPE( |
| 126 | 'generator', |
| 127 | ['number', 'string', 'ArrayBuffer', 'Buffer', 'TypedArray', 'DataView'], |
| 128 | generator, |
| 129 | ); |
| 130 | } |
| 131 | |
| 132 | |
| 133 | this[kHandle] = new _DiffieHellman(sizeOrKey, generator); |
| 134 | ObjectDefineProperty(this, 'verifyError', { |
| 135 | __proto__: null, |
| 136 | enumerable: true, |
| 137 | value: this[kHandle].verifyError, |
| 138 | writable: false, |
| 139 | }); |
| 140 | } |
no test coverage detected
searching dependent graphs…