MCPcopy
hub / github.com/scality/cloudserver / createDecipher

Method createDecipher

lib/kms/common.js:121–145  ·  view source on GitHub ↗

* createDecipher * @param {number} cryptoScheme - cryptoScheme being used * @param {buffer} dataKey - the unencrypted key (either from the * appliance on a get or originally generated by kms in the case of a put) * @param {number} offset - offset * @param {object} log -

(cryptoScheme, dataKey, offset, log, cb)

Source from the content-addressed store, hash-verified

119 * @callback called with (err, decipher: ReadWritable.stream)
120 */
121 static createDecipher(cryptoScheme, dataKey, offset, log, cb) {
122 this._deriveKey(
123 cryptoScheme, dataKey, log,
124 (err, derivedKey, derivedIV) => {
125 if (err) {
126 log.debug('key derivation failed', { error: err });
127 return cb(err);
128 }
129 const aesBlockSize = this._aesBlockSize();
130 const blocks = Math.floor(offset / aesBlockSize);
131 const toSkip = offset % aesBlockSize;
132 const iv = this._incrementIV(derivedIV, blocks);
133 const cipher = crypto.createDecipheriv(this._algorithm(),
134 derivedKey, iv);
135 if (toSkip) {
136 /* Above, we advanced to the latest boundary not
137 greater than the offset amount. Here we advance by
138 the toSkip amount if necessary. */
139 const dummyBuffer = Buffer.alloc(toSkip);
140 cipher.write(dummyBuffer);
141 cipher.read();
142 }
143 return cb(null, cipher);
144 });
145 }
146
147 /**
148 * createCipher (currently same as createDecipher function above. this

Callers 4

createCipherMethod · 0.95
createDecipherBundleMethod · 0.80
backend.jsFile · 0.80
backend.jsFile · 0.80

Calls 6

_deriveKeyMethod · 0.95
_aesBlockSizeMethod · 0.95
_incrementIVMethod · 0.95
_algorithmMethod · 0.95
debugMethod · 0.80
writeMethod · 0.80

Tested by

no test coverage detected