Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
crypto: initialize transform lazily
Browse files Browse the repository at this point in the history
  • Loading branch information
indutny authored and isaacs committed Mar 20, 2013
1 parent 008ab12 commit 855caa8
Showing 1 changed file with 30 additions and 12 deletions.
42 changes: 30 additions & 12 deletions lib/crypto.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,15 +150,33 @@ exports.createCredentials = function(options, context) {
};


function LazyTransform(options) {
this._options = options;
}
util.inherits(LazyTransform, stream.Transform);

['read', 'write', 'end'].forEach(function(action, i, actions) {
LazyTransform.prototype[action] = function() {
stream.Transform.call(this, this._options);

actions.forEach(function(action) {
this[action] = stream.Transform.prototype[action];
}, this);

return this[action].apply(this, arguments);
};
});


exports.createHash = exports.Hash = Hash;
function Hash(algorithm, options) {
if (!(this instanceof Hash))
return new Hash(algorithm);
this._binding = new binding.Hash(algorithm);
stream.Transform.call(this, options);
LazyTransform.call(this, options);
}

util.inherits(Hash, stream.Transform);
util.inherits(Hash, LazyTransform);

Hash.prototype._transform = function(chunk, encoding, callback) {
this._binding.update(chunk, encoding);
Expand Down Expand Up @@ -194,10 +212,10 @@ function Hmac(hmac, key, options) {
return new Hmac(hmac, key);
this._binding = new binding.Hmac();
this._binding.init(hmac, toBuf(key));
stream.Transform.call(this, options);
LazyTransform.call(this, options);
}

util.inherits(Hmac, stream.Transform);
util.inherits(Hmac, LazyTransform);

Hmac.prototype.update = Hash.prototype.update;
Hmac.prototype.digest = Hash.prototype.digest;
Expand All @@ -221,10 +239,10 @@ function Cipher(cipher, password, options) {
this._binding.init(cipher, toBuf(password));
this._decoder = null;

stream.Transform.call(this, options);
LazyTransform.call(this, options);
}

util.inherits(Cipher, stream.Transform);
util.inherits(Cipher, LazyTransform);

Cipher.prototype._transform = function(chunk, encoding, callback) {
this.push(this._binding.update(chunk, encoding));
Expand Down Expand Up @@ -280,10 +298,10 @@ function Cipheriv(cipher, key, iv, options) {
this._binding.initiv(cipher, toBuf(key), toBuf(iv));
this._decoder = null;

stream.Transform.call(this, options);
LazyTransform.call(this, options);
}

util.inherits(Cipheriv, stream.Transform);
util.inherits(Cipheriv, LazyTransform);

Cipheriv.prototype._transform = Cipher.prototype._transform;
Cipheriv.prototype._flush = Cipher.prototype._flush;
Expand All @@ -302,10 +320,10 @@ function Decipher(cipher, password, options) {
this._binding.init(cipher, toBuf(password));
this._decoder = null;

stream.Transform.call(this, options);
LazyTransform.call(this, options);
}

util.inherits(Decipher, stream.Transform);
util.inherits(Decipher, LazyTransform);

Decipher.prototype._transform = Cipher.prototype._transform;
Decipher.prototype._flush = Cipher.prototype._flush;
Expand All @@ -325,10 +343,10 @@ function Decipheriv(cipher, key, iv, options) {
this._binding.initiv(cipher, toBuf(key), toBuf(iv));
this._decoder = null;

stream.Transform.call(this, options);
LazyTransform.call(this, options);
}

util.inherits(Decipheriv, stream.Transform);
util.inherits(Decipheriv, LazyTransform);

Decipheriv.prototype._transform = Cipher.prototype._transform;
Decipheriv.prototype._flush = Cipher.prototype._flush;
Expand Down

0 comments on commit 855caa8

Please sign in to comment.