diff --git a/lib/crypto.js b/lib/crypto.js index 6f0b3f07ac..fe5e712d9b 100644 --- a/lib/crypto.js +++ b/lib/crypto.js @@ -3599,17 +3599,24 @@ try { } -function Credentials(method) { +function Credentials (method) { if (!crypto) { throw new Error('node.js not compiled with openssl crypto support.'); } + this.context = new SecureContext(); - if (method) this.context.init(method); - else this.context.init(); + + if (method) { + this.context.init(method); + } else { + this.context.init(); + } + this.shouldVerify = false; } -exports.createCredentials = function(cred) { + +exports.createCredentials = function (cred) { if (!cred) cred={}; var c = new Credentials(cred.method); if (cred.key) c.context.setKey(cred.key); @@ -3631,45 +3638,54 @@ exports.createCredentials = function(cred) { }; exports.Credentials = Credentials; + exports.Hash = Hash; -exports.createHash = function(hash) { +exports.createHash = function (hash) { return new Hash(hash); }; + exports.Hmac = Hmac; -exports.createHmac = function(hmac, key) { +exports.createHmac = function (hmac, key) { return (new Hmac).init(hmac, key); }; + exports.Cipher = Cipher; -exports.createCipher = function(cipher, key) { +exports.createCipher = function (cipher, key) { return (new Cipher).init(cipher, key); }; -exports.createCipheriv = function(cipher, key, iv) { + +exports.createCipheriv = function (cipher, key, iv) { return (new Cipher).initiv(cipher, key, iv); }; + exports.Decipher = Decipher; -exports.createDecipher = function(cipher, key) { +exports.createDecipher = function (cipher, key) { return (new Decipher).init(cipher, key); }; -exports.createDecipheriv = function(cipher, key, iv) { + +exports.createDecipheriv = function (cipher, key, iv) { return (new Decipher).initiv(cipher, key, iv); }; + exports.Sign = Sign; -exports.createSign = function(algorithm) { +exports.createSign = function (algorithm) { return (new Sign).init(algorithm); }; exports.Verify = Verify; -exports.createVerify = function(algorithm) { +exports.createVerify = function (algorithm) { return (new Verify).init(algorithm); }; + exports.RootCaCerts = RootCaCerts; + var securepair = require('securepair'); exports.createPair = securepair.createSecurePair; diff --git a/lib/securepair.js b/lib/securepair.js index 7377bd06f8..0a1e5655d4 100644 --- a/lib/securepair.js +++ b/lib/securepair.js @@ -345,7 +345,7 @@ SecurePair.prototype._destroy = function (err) { if (!this._done) { this._done = true; this._ssl.close(); - delete this._ssl; + this._ssl = null; this.emit('end', err); } }; diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 90219281b8..26c091fcba 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -69,36 +69,36 @@ Handle SecureContext::Init(const Arguments& args) { OPENSSL_CONST SSL_METHOD *method = SSLv23_method(); - if (args.Length() == 1) { - if (!args[0]->IsString()) - return ThrowException(Exception::TypeError( - String::New("Bad parameter"))); - + if (args.Length() == 1 && args[0]->IsString()) { String::Utf8Value sslmethod(args[0]->ToString()); - if (strcmp(*sslmethod, "SSLv2_method") == 0) + + if (strcmp(*sslmethod, "SSLv2_method") == 0) { method = SSLv2_method(); - if (strcmp(*sslmethod, "SSLv2_server_method") == 0) + } else if (strcmp(*sslmethod, "SSLv2_server_method") == 0) { method = SSLv2_server_method(); - if (strcmp(*sslmethod, "SSLv2_client_method") == 0) + } else if (strcmp(*sslmethod, "SSLv2_client_method") == 0) { method = SSLv2_client_method(); - if (strcmp(*sslmethod, "SSLv3_method") == 0) + } else if (strcmp(*sslmethod, "SSLv3_method") == 0) { method = SSLv3_method(); - if (strcmp(*sslmethod, "SSLv3_server_method") == 0) + } else if (strcmp(*sslmethod, "SSLv3_server_method") == 0) { method = SSLv3_server_method(); - if (strcmp(*sslmethod, "SSLv3_client_method") == 0) + } else if (strcmp(*sslmethod, "SSLv3_client_method") == 0) { method = SSLv3_client_method(); - if (strcmp(*sslmethod, "SSLv23_method") == 0) + } else if (strcmp(*sslmethod, "SSLv23_method") == 0) { method = SSLv23_method(); - if (strcmp(*sslmethod, "SSLv23_server_method") == 0) + } else if (strcmp(*sslmethod, "SSLv23_server_method") == 0) { method = SSLv23_server_method(); - if (strcmp(*sslmethod, "SSLv23_client_method") == 0) + } else if (strcmp(*sslmethod, "SSLv23_client_method") == 0) { method = SSLv23_client_method(); - if (strcmp(*sslmethod, "TLSv1_method") == 0) + } else if (strcmp(*sslmethod, "TLSv1_method") == 0) { method = TLSv1_method(); - if (strcmp(*sslmethod, "TLSv1_server_method") == 0) + } else if (strcmp(*sslmethod, "TLSv1_server_method") == 0) { method = TLSv1_server_method(); - if (strcmp(*sslmethod, "TLSv1_client_method") == 0) + } else if (strcmp(*sslmethod, "TLSv1_client_method") == 0) { method = TLSv1_client_method(); + } else { + return ThrowException(Exception::Error(String::New("Unknown method"))); + } } sc->ctx_ = SSL_CTX_new(method);