雅可比坐标系中的椭圆曲线加法

2024-01-12

我尝试在素数场上的椭圆曲线上添加两个点,将这些点从仿射/仿射坐标转换,但无法获得正确的结果(我正在测试的曲线有 a=0)。任何人都可以看到出了什么问题吗?

// From Affine
BigInteger X1=P.x;
BigInteger Y1=P.y;
BigInteger Z1=BigInteger.ONE;

BigInteger X2=Q.x;
BigInteger Y2=Q.y;
BigInteger Z2=BigInteger.ONE;

// Point addition in Jacobian coordinates for a=0
// see http://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl
BigInteger Z1Z1 = Z1.multiply(Z1);
BigInteger Z2Z2 = Z2.multiply(Z2);
BigInteger U1   = X1.multiply(Z2Z2);
BigInteger U2   = X2.multiply(Z1Z1);
BigInteger S1   = Y1.multiply(Z2).multiply(Z2Z2);
BigInteger S2   = Y2.multiply(Z1).multiply(Z1Z1);
BigInteger H    = U2.subtract(U1);
BigInteger I    = H.add(H).multiply(H.add(H));
BigInteger J    = H.multiply(I);
BigInteger r    = S2.subtract(S1).add(S2.subtract(S1));
BigInteger V    = U1.multiply(I);
BigInteger X3   = r.multiply(r).subtract(J).subtract(V.add(V)).mod(FIELD);
BigInteger Y3   = r.multiply(V.subtract(X3)).subtract(S1.add(S1).multiply(J)).mod(FIELD);
BigInteger Z3   = Z1.add(Z2).multiply(Z1.add(Z2)).subtract(Z1Z1).subtract(Z2Z2).multiply(H).mod(FIELD);

//To affine
BigInteger Z3Z3 = Z3.multiply(Z3);
BigInteger Z3Z3Z3 = Z3Z3.multiply(Z3);

return new Point(X3.divide(Z3Z3),Y3.divide(Z3Z3Z3));

CodesInChaos 说道:

分工不可能不对。您需要计算乘法逆模FIELD。此操作非常昂贵,并且只能在标量乘法结束时执行一次,而不是在每次加倍/加法之后执行。使用z^{-1} = ModPow(z, FIELD-2, FIELD).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

雅可比坐标系中的椭圆曲线加法 的相关文章

随机推荐

  • 如何自定义InitializeComponent的代码生成?更具体地说,如何对所有生成的代码进行后处理?

    我正在尝试自定义 Windows 窗体设计器的代码生成InitializeComponent MSDN 文章 在 NET Framework 可视化设计器中自定义代码生成 http msdn microsoft com en us libr
  • 如何在高图表中包装图例项目?

    我在使用 highcharts 时遇到了一个大问题 因为我已经尝试了几个小时来包装图例项目 如果它们很长 我尝试设置图例和图例项宽度 但我的文本仍然从图例中出来 我唯一发现的就是改变highcharts src js但我认为这不是解决这个问
  • Apex 代码版本控制

    有没有办法集成 Apex 和 Visualforce 代码的版本控制系统 我可以考虑保留一个单独的存储库 但无法将其与 Salesforce Platform 集成 提前致谢 您可以通过使用 Subversion 和 Force com E
  • 如何判断一个点是否在圆内?

    如何测试 LatLng 点是否在圆的范围内 谷歌地图 JavaScript v3 getBounds 方法返回圆的边界框 圆是一个矩形 因此如果一个点落在圆之外但在边界框内 您将得到错误的答案 Use the 球面几何库 https dev
  • 如何访问列表中的随机项?

    我有一个 ArrayList 我需要能够单击一个按钮 然后从该列表中随机挑选一个字符串并将其显示在消息框中 我该怎么做呢 创建一个实例Random某处上课 请注意 不要在每次需要随机数时都创建一个新实例 这一点非常重要 您应该重用旧实例以实
  • spring boot OAuth2 基于角色的授权

    我们有一个扩展 AuthorizationServerConfigurerAdapter 的专用授权服务器 我们在其中设置了覆盖 void configure ClientDetailsS erviceConfigurerclients 方
  • Goertzel算法获取相位?

    我正在使用 Goertzel 算法来获取特定频率的幅度 我现在正在尝试从中获取相位 但我不知道如何 有人可以解释一下 并向我展示如何从这段代码中获取某个 f 的相位吗 另外 我使用它的频率为 16khz 采样率为 44 1 我可以运行的最小
  • 有没有办法在不调用 System.exit() 的情况下终止使用 java3d 的 java 应用程序?

    Java3D 启动多个系统线程 并且不会在它们上设置 isDaemon 标志 当我处置应用程序的 唯一 JFrame 时 它 不会终止 因为这些线程仍在运行 调用 System exit 似乎是终止应用程序的唯一方法 当然 或者从外部杀死它
  • 查找位数组中的第一个零

    我有一个位图 uint64 t bitmap 10000 跟踪系统中分配的资源 现在的问题是如何有效地找到该位图中的第一个未设置 零 位 我知道有ffsll unsigned long long 在 glibc 中查找第一个设置位 我认为这
  • 我正在使用带有加号按钮的底部选项卡,但是加号按钮在 android 中的本机反应中的一半区域中不可单击?

    我在 React Native 中使用 react navigation bottom tabs 我需要该区域上方的加号按钮 所以我能够实现它 但在 Android 中 加号图标的上方一半区域在 android 中不可单击 但在 IOS 中
  • 使用 ApplicationSettingsBase 存储通用 List

    我正在尝试使用 ApplicationSettingsBase 保存 List 但是即使填充了列表 它也仅输出以下内容
  • Foundation Small-12 色谱柱的更改顺序

    我有一个布局 左侧有图像 右侧有文本 适用于中型和大型视图 不过 我希望文本位于 small 12 上的图像之前 拉 推机制似乎不适用于 xxx 12 列 这些是我的 div div class large 4 medium 6 small
  • 如何在 Matlab 中将单个二维曲线绘制到颜色图上?

    我使用 Matlab 中现有的编译数据创建了一个平滑的颜色渐变二维等值线图 我将 x 轴 y 轴和 z 数据轮廓绘制为颜色图 我的目标是在颜色图上绘制一条二维曲线 代表单个 z 数据值 但我不知道如何做 有谁知道如何将 2 D 曲线绘制到
  • Dijkstra 的单源最短路径,带有权重为“w”的额外边

    在最近的一次采访中 我被要求实现单源最短路径算法 用于无向和正加权图 并稍作修改 即我们获得了权重为 w 的额外边缘 我们必须找到一条比 SSSP 算法计算的路径更短的路径 通过在两个尚未连接的节点之间连接权重 w 的额外边 这是一张图片
  • 在 Android 中使用 Google Maps API 从用户位置获取附近地点的结果

    这是第一次使用谷歌地图API和谷歌地点API 我正在做一个演示应用程序 它显示距离用户位置最近的医院列表 例如 以及到每家医院的路线 我能够使用下面的代码获取用户的位置 public class MainActivity extends A
  • 为什么对话框会删除其内容而不刷新?

    我遇到了一个非常奇怪的问题 窗口似乎正在擦除其内容 并且在擦除后没有重新绘制它 该对话框源自CDHtmlDialog 我认为这是问题的一部分 发生某种非确定性代码执行 导致某些代码在某些情况下先于其他代码执行 而在其他情况下则相反 涉及的消
  • android可扩展列表视图从firebase检索数据

    我该如何使用firebase检索我的数据Expandable listview my firebase节点是这样的 适配器类 public class CustomExpandableListViewAdapter extends Base
  • 等待进程结束

    您好 我必须编写必须打开一些系统属性的程序 例如 Process sound new Process sound StartInfo FileName mmsys cpl sound Start Place 1 Process device
  • numpy:沿新轴扩展数组?

    当然一定有办法做到这一点 我无法解决 我有一个 9 4 数组 我想沿第三轴重复它 4096 次 所以它变得简单 9 4 4096 9 4 数组中的每个值简单地重复 4096 次沿着新的轴线 如果我可疑的 3D 图有意义 对角线是 z 轴 4
  • 雅可比坐标系中的椭圆曲线加法

    我尝试在素数场上的椭圆曲线上添加两个点 将这些点从仿射 仿射坐标转换 但无法获得正确的结果 我正在测试的曲线有 a 0 任何人都可以看到出了什么问题吗 From Affine BigInteger X1 P x BigInteger Y1