Crypto Services (utils): Support for SHA256-512 (+ fix typo)

This commit is contained in:
janekptacijarabaci
2017-02-24 07:17:07 +01:00
committed by roytam1
parent 22fd32273f
commit 51b7cabc8e
+43 -32
View File
@@ -76,36 +76,6 @@ this.CryptoUtils = {
hasher.update(bytes, bytes.length);
},
/**
* UTF-8 encode a message and perform a SHA-1 over it.
*
* @param message
* (string) Buffer to perform operation on. Should be a JS string.
* It is possible to pass in a string representing an array
* of bytes. But, you probably don't want to UTF-8 encode
* such data and thus should not be using this function.
*
* @return string
* Raw bytes constituting SHA-1 hash. Value is a JS string. Each
* character is the byte value for that offset. Returned string
* always has .length == 20.
*/
UTF8AndSHA1: function UTF8AndSHA1(message) {
let hasher = Cc["@mozilla.org/security/hash;1"]
.createInstance(Ci.nsICryptoHash);
hasher.init(hasher.SHA1);
return CryptoUtils.digestUTF8(message, hasher);
},
sha1: function sha1(message) {
return CommonUtils.bytesAsHex(CryptoUtils.UTF8AndSHA1(message));
},
sha1Base32: function sha1Base32(message) {
return CommonUtils.encodeBase32(CryptoUtils.UTF8AndSHA1(message));
},
/**
* Produce an HMAC key object from a key string.
*/
@@ -180,9 +150,8 @@ this.CryptoUtils = {
hmacAlg=Ci.nsICryptoHMAC.SHA1, hmacLen=20) {
// We don't have a default in the algo itself, as NSS does.
// Use the constant.
if (!dkLen) {
dkLen = SYNC_KEY_DECODED_LENGTH;
throw new Error("dkLen should be defined");
}
function F(S, c, i, h) {
@@ -544,6 +513,48 @@ this.CryptoUtils = {
};
/**
* Hashing Algorithms SHA-X.
* These values map directly onto the values defined
* in netwerk/base/nsICryptoHash.idl.
*/
let shaX = ["1", "256", "384", "512"];
for (let shaIdx = 0, shaIdxLen = shaX.length; shaIdx < shaIdxLen; shaIdx++) {
let shaXIdx = shaX[shaIdx];
/**
* UTF-8 encode a message and perform a SHA-X over it.
*
* @param message
* (string) Buffer to perform operation on. Should be a JS string.
* It is possible to pass in a string representing an array
* of bytes. But, you probably don't want to UTF-8 encode
* such data and thus should not be using this function.
*
* @return string
* Raw bytes constituting SHA-X hash. Value is a JS string.
* Each character is the byte value for that offset.
*/
CryptoUtils["UTF8AndSHA" + shaXIdx] = function (message) {
let hasher = Cc["@mozilla.org/security/hash;1"]
.createInstance(Ci.nsICryptoHash);
hasher.init(hasher["SHA" + shaXIdx]);
return CryptoUtils.digestUTF8(message, hasher);
};
CryptoUtils["sha" + shaXIdx] = function (message) {
return CommonUtils.bytesAsHex(
CryptoUtils["UTF8AndSHA" + shaXIdx](message));
};
CryptoUtils["sha" + shaXIdx + "Base32"] = function (message) {
return CommonUtils.encodeBase32(
CryptoUtils["UTF8AndSHA" + shaXIdx](message));
};
}
XPCOMUtils.defineLazyGetter(CryptoUtils, "_utf8Converter", function() {
let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
.createInstance(Ci.nsIScriptableUnicodeConverter);