public byte[] saltKey(Key key) {
   MessageDigest md = SHA256.getMessageDigest();
   md.update(key.getRoutingKey());
   md.update(globalSalt);
   byte[] ret = md.digest();
   SHA256.returnMessageDigest(md);
   return ret;
 }
 public static ClientKSK create(String keyword) {
   MessageDigest md256 = SHA256.getMessageDigest();
   try {
     byte[] keywordHash;
     try {
       keywordHash = md256.digest(keyword.getBytes("UTF-8"));
     } catch (UnsupportedEncodingException e) {
       throw new Error("Impossible: JVM doesn't support UTF-8: " + e, e);
     }
     MersenneTwister mt = new MersenneTwister(keywordHash);
     DSAPrivateKey privKey = new DSAPrivateKey(Global.DSAgroupBigA, mt);
     DSAPublicKey pubKey = new DSAPublicKey(Global.DSAgroupBigA, privKey);
     byte[] pubKeyHash = md256.digest(pubKey.asBytes());
     try {
       return new ClientKSK(keyword, pubKeyHash, pubKey, privKey, keywordHash);
     } catch (MalformedURLException e) {
       throw new Error(e);
     }
   } finally {
     SHA256.returnMessageDigest(md256);
   }
 }