Skip to content

Instantly share code, notes, and snippets.

@hakanson
Created January 22, 2014 13:38
Show Gist options
  • Save hakanson/8558839 to your computer and use it in GitHub Desktop.
Save hakanson/8558839 to your computer and use it in GitHub Desktop.
Attempt to wrap the IE11 (msCrypto) implementation of the WebCryptoAPI (based on the spec before Promise) with a promise API inside an AngularJS based application using $q.
var qmsCrypto = {
subtle : {
importKey : function(format, keyData, algorithm, extractable, keyUsages) {
var deferred = $q.defer();
var op = window.msCrypto.subtle.importKey(format, keyData, algorithm, extractable, keyUsages);
op.onerror = function (evt) {
deferred.reject(evt.toString());
$scope.$apply();
};
op.oncomplete = function (evt) {
deferred.resolve(evt.target.result);
$scope.$apply();
};
return deferred.promise;
},
encrypt : function(algorithm, key, buffer) {
var deferred = $q.defer();
var op = window.msCrypto.subtle.encrypt(algorithm, key, buffer);
op.onerror = function (evt) {
deferred.reject(evt.toString());
$scope.$apply();
};
op.oncomplete = function (evt) {
deferred.resolve(evt.target.result);
$scope.$apply();
};
return deferred.promise;
},
decrypt : function(algorithm, key, buffer) {
var deferred = $q.defer();
var op = window.msCrypto.subtle.decrypt(algorithm, key, buffer);
op.onerror = function (evt) {
deferred.reject(evt.toString());
$scope.$apply();
};
op.oncomplete = function (evt) {
deferred.resolve(evt.target.result);
$scope.$apply();
};
return deferred.promise;
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment