我正在尝试更新基于 XUL 和 XPCOM 的旧 Firefox 插件并在 WebExtention 中重新实现它。这个新的附加组件将使用firefox 同步服务器 1.1安全地交换一些信息,基于此。我不能使用 firefox 同步服务器 1.5,因为它不使用 J-PAKE。我已经能够很好地与服务器交谈,但现在在协议的第二步上绊倒了。
移动/桌面从随机弱密钥(4 个字符 a-z0-9)和频道 ID 生成 PIN,计算并上传 J-PAKE msg 1. v2 的新功能:为了防止重试时重复上传,If-None-匹配: * 标头已指定。这样可以确保仅在通道为空时才上传消息。如果不是,则请求将失败,并显示 412 Precondition Failed,这应该被视为与 200 OK 相同。412 还将包含客户端刚刚上传的数据的 Etag。
C: PUT /a7id HTTP/1.1
C: If-None-Match: *
C:
C: {
C: 'type': 'receiver1',
C: 'payload': {
C: 'gx1': '45...9b',
C: 'zkp_x1': {
C: 'b': '09e22607ead737150b1a6e528d0c589cb6faa54a',
C: 'gr': '58...7a'
C: 'id': 'receiver',
C: }
C: 'gx2': 'be...93',
C: 'zkp_x2': {
C: 'b': '222069aabbc777dc988abcc56547cd944f056b4c',
C: 'gr': '5c...23'
C: 'id': 'receiver',
C: }
C: }
C: }
问题是旧实现使用了 XPCOM 对象:
var jpake = Component.Classes["@mozilla.org/services-crypto/sync-jpake;1"].createInstance(Ci.nsISyncJPAKE);
jpake.round1(singerId, gx1, gv1, r1, gx2, gv2, r2)
负责生成:gx1, gv1, r1, gx2, gv2 and r2
.
有没有办法在WebExtentions中使用 XPCOM 对象?还是我被迫使用带有XPCOM 低级 API 的Add-on SDK?
我曾尝试使用curve25519.js来模拟此处的值,但没有成功。
欢迎任何帮助,谢谢