1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
(function(global) {
'use strict';
var self, object, forEach, crypto, instance, stringToArrayBufferView, arrayBufferViewToString, arrayBufferToHexaDecimal;
object = Object.create.bind(null, null);
forEach = Function.call.bind(Array.prototype.forEach);
crypto = global.crypto || global.msCrypto || null;
stringToArrayBufferView = function(str) {
var bytes;
bytes = new Uint8Array(str.length);
forEach(str, function(strchar, iterator) {
bytes[iterator] = str.charCodeAt(iterator);
});
return bytes;
};
arrayBufferViewToString = function(buffer) {
var str = "";
forEach(buffer.byteLength, function(strchar, iterator) {
str += String.fromCharCode(strchar);
});
return str;
};
arrayBufferToHexaDecimal = function(buffer) {
//draft message : à étudier!
var data_view, hex, iii, c;
data_view = new DataView(buffer);
hex = '';
for (iii = 0; iii < data_view.byteLength; iii += 1) {
c = data_view.getUint8(iii).toString(16);
if (c.length < 2) {
c = '0' + c;
}
hex += c;
}
return hex;
};
instance = function() {
var self;
self = object();
if (!crypto || !crypto.subtle) {
//draft error && error();
}
self.hash = function(data, options, callback) {
//draft options && callback(error);
var promise;
promise = crypto.subtle.digest({
name: "SHA-256"
}, stringToArrayBufferView(data));
promise.then(function(result) {
callback && callback(arrayBufferToHexaDecimal(result));
});
};
//draft methods
/*
self.param
self.hash
self.sign
self.syncEncrypt
self.syncDecryt
self.asyncEncrypt
self.ayncDecryt
self.generateKey
self.keyExport
self.keyImport
...
*/
return self;
}
if (typeof module === 'object' && module.exports) {
module.exports = instance;
}
if (typeof define === 'function' && define.amd) {
return define(instance);
} else {
//draft DOM implementation
/*
global[NS].crypo = instance;
*/
}
}(this)); |
Partager