/** * Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * @file src/crypto.js * @author leeight */ /* eslint-env node */ var fs = require('fs'); var crypto = require('crypto'); var Q = require('q'); exports.md5sum = function (data, enc, digest) { if (!Buffer.isBuffer(data)) { data = new Buffer(data, enc || 'UTF-8'); } var md5 = crypto.createHash('md5'); md5.update(data); return md5.digest(digest || 'base64'); }; exports.md5stream = function (stream, digest) { var deferred = Q.defer(); var md5 = crypto.createHash('md5'); stream.on('data', function (chunk) { md5.update(chunk); }); stream.on('end', function () { deferred.resolve(md5.digest(digest || 'base64')); }); stream.on('error', function (error) { deferred.reject(error); }); return deferred.promise; }; exports.md5file = function (filename, digest) { return exports.md5stream(fs.createReadStream(filename), digest); }; exports.md5blob = function (blob, digest) { var deferred = Q.defer(); var reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.onerror = function (e) { deferred.reject(reader.error); }; reader.onloadend = function (e) { if (e.target.readyState === FileReader.DONE) { var content = e.target.result; var md5 = exports.md5sum(content, null, digest); deferred.resolve(md5); } }; return deferred.promise; };