Hi...

I just released a new version of Muse Jabber API.  Hopefully some of you are willing to try and test it for me.. This new release boasts support for XML-RPC and JabberRPC, jabber:iq:time, jabber:iq:version, jabber:iq:last, jabber:x:delay, jabber:x:roster, jabber:x:event, and jabber:x:expire.

http://www.echomine.org/projects/muse/

Aside from my shameless plug for my API, I do have an issue regarding the 0K authentication implementation.

I've been trying to implement 0k authentication in Java and I have no yet gotten it to work.. I followed the docs to the dot (and even strayed away from it just to be adventurous and lucky), but the Hash that I'm generating still doesn't correspond to the Hash that should be sent to the server.

I'm rather confused... Not only that, the 0k authentication draft document doesn't specify exactly what the payload looks like to set/reset the 0k authentication.

Here's a snippet of my algorithm code that generates the the hash.. any help is appreciated..

    protected String getZeroKnowledgePassword(JabberContext context, String zerokToken, int zerokSeq) {
        //cache hash so no need to go through calculation again
        if (hash != null) return hash;
        //instantiate a SHA1 hash
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            //hash password first
            md.update(context.getPassword().getBytes());
            byte[] hashA = md.digest();
            //now hash hashA + zerokToken
            md.reset();
            md.update(HexDec.convertBytesToHexString(hashA).toLowerCase().getBytes());
            md.update(zerokToken.getBytes());
            byte[] hash0 = md.digest();
            byte[] hashSeq = new byte[hash0.length];
            System.arraycopy(hash0, 0, hashSeq, 0, hash0.length);
            for (int i = 0; i < (zerokSeq - 1); i++) {
                md.reset();
                //just start hashing
                hashSeq = md.digest(hashSeq);
            }
            //convert to hex representation
            hash = HexDec.convertBytesToHexString(hashSeq);
        } catch (NoSuchAlgorithmException ex) {
            return "";
        }
        return hash;
    }


Thanks,
Chris

PGP at ldap://certserver.pgp.com/

Reply via email to