【发布时间】:2013-06-27 06:03:04
【问题描述】:
我正在尝试通过 SSH 在 Ngit 上进行推送。我正在使用此处列出的方法指定我自己的密钥:NGit making a connection with a private key file
它适用于克隆,并且在第一次推送时。在那之后,它有 30% 的时间失败了,在 Mono.Security 中总是在这个方法中:
Mono.Security.dll!Mono.Math.BigInteger.Kernel.MinusEq(Mono.Math.BigInteger big, Mono.Math.BigInteger small)
要么失败并显示消息:“在加密函数期间发生错误”,要么在此函数中无限期挂起。同样,它是否成功似乎完全随机。它被 NGit 中的函数调用:
DiffieHellmanManaged dh = new DiffieHellmanManaged (pspec.P.GetBytes (), pspec.G.GetBytes (), 0);
在 GenerateKeyPair (KeyPairGenerator.cs)中
有什么想法吗?如果没有,有什么方法可以通过其他方法生成 Diffie-Helman 密钥?
非常感谢,
干杯,
更新:我发现了一个我不完全理解的奇怪解决方案:
之前,我创建了一个新线程,因为我从 UI 调用它并且不希望它挂起。这是一个 STA 线程,因为我们正在构建一个 VSTO 应用程序,它不支持来自 UI 组件的 MTA / BackgroundWorker() 等(几乎限制了您使用旧的 Thread(),因为您可以根据需要指定它是 STA )。我发现当用户在推送过程中点击周围时问题更频繁地发生(因此进行了一些 git checkouts),所以我禁用了线程并直接从 UI 运行它。从那时起,它像地狱一样冻结了 UI,但不会在 BigInt 的计算上挂起 pr crash。对于这种情况,我完全感到困惑,除非:Office(我们正在为其构建插件)以某种方式无法为 BigInt 计算提供具有足够内存的线程(或对该内存管理不善,这并不完全令人惊讶) ,或者,由于某种原因,BigInt 计算根本无法在线程上下文中调用(可能是 Thread->Ngit->Sharpen->Mono.Security->Mono.Math(32 digit number)断线??)
知道这可能是什么原因吗?
【问题讨论】: