如何解决有弹性的城堡C#:如何定义曲线和点以便使用EC点算术进行测试/播放?
我有一个用于C#的简单EC库,但是它不见了,因此我无法在网络上找到它。它先前已发布在MSDN上,但是link现在已经死了。
我正在尝试使用Bouncy Castle库来完成类似的任务。我想创建一条曲线(secp256k1),并且希望能够进行点算术并查看原始点数据。
即:
G + 3 * G = 4 * G
p + q
4 * G-G = 3 * G
等
我需要包括哪些名称空间,如何定义/声明曲线,以及如何定义点? 我已经成功(我相信...)在我的C#项目中包含了Bouncy Castle .dll。
我对创建键或任何类似的东西都不感兴趣。只是EC点算术。一个可以让我执行这些相同操作的不同(简单)库将同样好或更好。
感谢您的帮助。
编辑: 我继续进行此工作,我的代码如下:
private static ECDomainParameters GetCurveParameters(string name)
{
X9ECParameters ecP = ECNamedCurveTable.GetByName(name);
if (ecP == null)
throw new Exception("unknown curve name: " + name);
return new ECDomainParameters(ecP.Curve,ecP.G,ecP.N,ecP.H,ecP.GetSeed());
}
private void btnTest2_Click(object sender,EventArgs e)
{
ECDomainParameters ecSpec = GetCurveParameters("secp256k1");
ECCurve mycurve = ecSpec.Curve;
ECPoint G,g2,twoG,threeG;
G = ecSpec.G;
g2 = ecSpec.G;
twoG = G.Add(g2);
threeG = G.Multiply(new BigInteger("3"));
}
现在,我可以运行代码,并且可以重新获取值,但是却得不到正确的要点。 G是正确的,但其他所有都不正确。 即:
2*G or G+G should =
c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5,1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a
I am getting:
7d152c041ea8e1dc2191843d1fa9db55b68f88fef695e2c791d40444b365afc2,56915849f52cc8f76f5fd7e4bf60db4a43bf633e1b1383f85fe89164bfadcbdb
G * 3也不正确。
(我所说的正确是来自PyCoin应用程序,也可以在this EC arithmetic website上进行验证。)
有什么建议吗?
解决方法
简短答案:使用ECPoint.Normalize返回一个ECPoint,其(X,Y)坐标可以与PyCoin进行比较。
详细信息:默认情况下(BouncyCastle的)window.onload=function {/*other code goes here*/}
操作在投影坐标系中执行;特别是通常所说的“ Jacobian修改坐标”。这是为了执行一系列运算时的性能,尤其是标量乘法。如果您打印出例如ECPoint
使用提供的twoG
方法,您会看到额外的坐标。
当您要将ECPoint.ToString
与某个(X,Y)值进行比较时,可以调用ECPoint
,它返回一个新的ECPoint.Normalize
,其中Z坐标为1,X坐标为和Y坐标是仿射值。这是一个相对昂贵的操作,通常要等到进行较大计算的最后一步时才能避免。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。