WSSE Header Generator
by piepkrak
HTML
<script src="http://www.teria.com/~koseki/tools/wssegen/sha1.js"></script>
<script src="http://www.teria.com/~koseki/tools/wssegen/base64.js"></script>
<h1>JavaScript WSSE Header Generator</h1>
<form name="f">
UserName: <input type="text" name="username" size="32"/><br/>
Password: <input type="password" name="password" size="32"/><br/>
Nonce: <input type="text" name="nonce" size="32"/> <input type="checkbox" name="autoNonce" checked="checked"> auto<br/>
Created: <input type="text" name="created" size="32"/> <input type="checkbox" name="autoCreated" checked="checked"> auto<br/>
<br/>
Basic-Autentication Username: <input type="text" name="basicUsername" size="32"/><br/>
Basic-Autentication Password: <input type="password" name="basicPassword" size="32"/><br/>
<br/>
<input type="button" onClick="calc()" value="Generate"/>
<br/><br/>
<textarea name="output" rows="20" cols="80">
</textarea>
</form>
JavaScript
// override sha1.js default setting.
b64pad = "=";
function calc() {
var f = document.forms['f'];
var userName = f.elements['username'].value;
var password = f.elements['password'].value;
var nonce = f.elements['nonce'].value;
var autoNonce = f.elements['autoNonce'].checked;
if (autoNonce) {
nonce = generateNonce(16);
f.elements['nonce'].value = nonce;
}
var nonce64 = base64encode(nonce);
var created = f.elements['created'].value;
var autoCreated = f.elements['autoCreated'].checked;
if (autoCreated) {
created = getW3CDate(new Date());
f.elements['created'].value = created;
}
var before = '';
var after = '';
var basicUsername = f.elements['basicUsername'].value;
var basicPassword = f.elements['basicPassword'].value;
var basicAuth = "";
if (basicUsername != null && basicUsername != "" ||
basicPassword != null && basicPassword != "") {
basicAuth = "Authorization: Basic " + base64encode(basicUsername + ":" + basicPassword) + "\n";
}
var passwordDigest = b64_sha1(nonce + created + password);
f.elements['output'].value =
before
+ "UsernameToken Username=\""
+ userName + "\", PasswordDigest=\""
+ password + "\", Nonce=\""
+ nonce64 + "\", Created=\""
+ created + "\"\n"
+ basicAuth
+ after;
}
function generateNonce(length) {
var nonceChars = "0123456789abcdef";
var result = "";
for (var i = 0; i < length; i++) {
result += nonceChars.charAt(Math.floor(Math.random() * nonceChars.length));
}
return result;
}
function getW3CDate(date) {
var yyyy = date.getUTCFullYear();
var mm = (date.getUTCMonth() + 1);
if (mm < 10) mm = "0" + mm;
var dd = (date.getUTCDate());
if (dd < 10) dd = "0" + dd;
var hh = (date.getUTCHours());
if (hh < 10) hh = "0" + hh;
var mn =...