// Symfony SHA512 encryption provider
var cipher = function (secret, salt) {
var salted = secret + '{' + salt + '}';
var digest = CryptoJS.SHA512(salted);
for (var i = 1; i < 5000; i++) {
var parsed = CryptoJS.enc.Utf8.parse(salted);
var cc = digest.concat(parsed)
digest = CryptoJS.SHA512(cc);
}
digest = digest.toString(CryptoJS.enc.Base64);
return digest;
};
// Date formater to UTC
var formatDate = function (d) {
// Padding for date creation
var pad = function (num) {
return ("0" + num).slice(-2);
};
return [d.getUTCFullYear(),
pad(d.getUTCMonth() + 1),
pad(d.getUTCDate())].join("-") + "T" +
[pad(d.getUTCHours()),
pad(d.getUTCMinutes()),
pad(d.getUTCSeconds())].join(":") + "Z";
};
var randomString = function (length) {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < length; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
var base64Encode = function (input) {
var keyStr = 'ABCDEFGHIJKLMNOP' +
'QRSTUVWXYZabcdef' +
'ghijklmnopqrstuv' +
'wxyz0123456789+/' +
'=';
var output = "";
var chr1,
chr2,
chr3 = "";
var enc1,
enc2,
enc3,
enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
keyStr.charAt(enc1) +
keyStr.charAt(enc2) +
keyStr.charAt(enc3) +
keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
}
var username = "admin";
var password = "pass";
var salt = "salt";
var secret = cipher(password, salt)
// Generate nonce
var nonce = randomString(30);
// Creation time of the token
var created = formatDate(new Date());
// Generating digest from secret, creation and nonce
var salted = secret + '{' + salt + '}';
var hash = CryptoJS.SHA1(nonce + created + salted);
var digest = hash.toString(CryptoJS.enc.Base64);
// Base64 Encode digest
var b64nonce = base64Encode(nonce);
// Return generated token
var token = 'UsernameToken Username="' + username + '", PasswordDigest="' + digest + '", Nonce="' + b64nonce + '", Created="' + created + '"';
postman.setGlobalVariable("token", token);