我目前正在研究JavaCard项目(v.2.2.2),我需要使用平方根,对数等来计算值......
我知道JavaCard API中没有Math
类,并且想知道是否存在另一个提供此类操作的库?
我也不能使用double
值,但我需要。有没有办法在JavaCard API中表示double
值并执行操作(例如log,sqrt等)?
任何帮助表示赞赏!
答案 0 :(得分:1)
javacard 2.2.2仅支持boolean,byte,short和int。如果你真的需要执行数学,那么你需要用棘手的方法创建自己的类,当然结果不准确。
最佳做法是卡只存储数据并进行简单的计算/加密,服务器/终端端计算复杂的事物。在卡中存储double的解决方法是使用字节数组。
答案 1 :(得分:1)
从2.2.2开始,JavaCard API中有javacardx.framework.math软件包,其功能有限(仅加,减,乘)。但是,通常不受物理卡支持,即使受支持,也可能是only 8 bytes long。
JCAlgTest现在还提供了所有JavaCard软件包的结果,包括数据库中的卡片所支持的所有版本(包括javacardx.framework.math)。
或者,您可以考虑尝试JCMathLib library。该库仅使用公共JC API调用为BigInteger提供任意长度(以及ECPoint操作),并且是旧版BigNat library的改进版本。它将消耗大约1KB的RAM,并且需要支持ECC的卡(如果您想使用ECPoint,则仅对于BigInteger则不需要)。该实现仅部分在硬件(使用RSA和ECC协处理器)中完成,部分在软件中完成,因此对旁通道和故障引发攻击的抵抗力较小。