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 =...