是否有一个教学图书馆-可供阅读的每日生活津贴的少实现?(不是ECDSA.)
显然,BigInteger和散列函数可能来自库,但我希望阅读与签名和验证签名有关的所有计算的实现,使用适合该语言的任何BigInteger操作。
理想情况下,它将把键视为数字,而不是以任何方式与DER/PEM文件格式交互。
Java,Python,Javascript,Haskell,甚至C都很好。
有什么建议吗?
发布于 2015-11-06 22:02:29
不是很好的答案,而是一些东西:
如果您只想要数学计算、实现索引,那么维基百科有一个很好的解释,而标准是确定的。
Java源代码是开放的。存储库是git (我还没有设置);Oracle(Sun) JDK发行版有src.zip,但排除了JCE部分;JRE发行版根本没有源代码。用于CentOS/RedHat的openjdk包确实包含JCE,而且我假设/预期至少会有其他一些Unixes,但可能不是Windows。JCE facade/provider/engine框架在一定程度上使所有提供者(包括DSA )的代码变得复杂。
Java BouncyCastle (http://www.bouncycastle.org)源代码是开放的。它们的构建方法对我来说太复杂了,但是可以通过下载jar(s)和源代码并告诉调试器链接它们来避免;我使用Eclipse并为库设置源代码属性。BC包括两个提供程序实现,其复杂性与Oracle相同,但也包括一个“轻量级”API,您只需直接调用一个实现;org.bouncycastle.crypto.signers.DSASigner就是您想要的。如果我想在Java中调试某些东西,我就会使用它。
OpenSSL C (http://www.openssl.org)源代码是开放的。除了标准C工具链(编译器、预处理程序(如果分开)、汇编程序(如果分开)、链接器、库/存档等,以及调试器)之外,构建只需要perl (几乎所有Unix都内置,Windows很容易获得);优化的构建可能需要一个单独的汇编程序,但在教学上则不需要优化。尽管链接足够多,您需要构建整个过程,但是为了执行代码,代码是非常模块化的,您可以轻松地编写一个小程序,只需调用DSA_*和BN_* (bignum)模块来执行一些DSA操作。但是,C代码必须显式地处理错误处理和内存管理,这(主要是)在Java中是隐式的,而针对旧模块的OpenSSL C代码并不是最清晰的。OpenSSL还使添加文件处理变得非常容易,而且只在您需要的时候。
请注意,DSA中涉及的数字,即使使用原始FIPS186的长过时的512位最小值,也会太大,无法手动处理、检查或识别,因此您可以逐步了解代码,并看到它做了一些工作,但实际上不会比规范中告诉您的公式更多地了解它所做的事情。
https://crypto.stackexchange.com/questions/30337
复制相似问题