我正在使用keybase.io API--试图从JavaScript驱动它。登录是一个两步过程。第二步详述于 https://keybase.io/docs/api/1.0/call/login。在Javascript中为Keybase实现HMAC-SHA256
我被困在以下;
服务器和客户端共享这个秘密,并为客户 成功登录的用户,就必须证明这一点 秘密到服务器的知识。为了防止重播攻击,它不会自己发送秘密。相反,它把作为PWH MAC密钥,和 MAC的在上一步中检索到的临时login_session:
hmac_pwh = HMAC-SHA512(pwh, base64decode(login_session))
两个输入是二进制格式;从上面的scrypt以二进制 格式输出pwh密钥,并且login_session是base64解码的 ,然后以二进制格式输入HMAC。
我使用CryptoJS库,给出了实施下面的例子
var hash = CryptoJS.HmacSHA256('Message','Secret Passphrase');
我有几个问题;
作为术语的问题是“MAC密钥”等于“秘密密码短语”并且因此CryptoJS功能参数在它们的顺序VS上Keybase给出的代码示例逆转吗?
CryptoJS示例具有简单的ascii输入,而Keybase上的指令则用于输入二进制输入。当我尝试并为它提供一个uint8array参数(这是我从使用keybase API的上一步中得到的),它会像下面这样完成:
TypeError: g.clamp is not a function
e,m=4*h; g.sigBytes>m&&(g=f.finalize(g)); g.clamp(); for(var r=this._oKey=g.clone()