【问题标题】:Javacard: error on static array initialization in package build with ant-javacardJavacard:使用 ant-javacard 构建包中的静态数组初始化错误
【发布时间】:2022-01-02 21:14:14
【问题描述】:

对于带有静态数组的库包,我有以下玩具代码:

package testapplets.library;
import javacard.security.RandomData;

public class SomeLibrary {
    public static final short TRUE = (short) 0x5AA5;
    public static final short FALSE = (short) 0xA55A;

    public static final byte[] test = { 'a', 'b', 'c'};

    public static short booleantest(boolean b) {
            return b ? TRUE : FALSE;
    }

    public static RandomData getRandom() {
        return RandomData.getInstance(RandomData.ALG_SECURE_RANDOM);
    }
}

以及以下构建库包的ant任务:

  <target name="libtest" depends="prepare">
    <javacard jckit="${converter.sdk}">
      <cap targetsdk="${target.sdk}" sources="src/library" package="testapplets.library" aid="11:22:33:44:55" export="lib" output="build/libtest.cap" version="1.0"/>
    </javacard>
  </target>

但我收到以下错误消息:

  [convert] [ INFO: ] Converter [v3.1.0]
  [convert] [ INFO: ]     Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
  [convert]     
  [convert]     
  [convert] [ INFO: ] conversion completed with 1 errors and 0 warnings.
  [convert] error:  Static array initialization in class testapplets/library/SomeLibrary in library package not allowed.

为什么库中的静态数组有问题?如果我删除静态数组,构建良好

【问题讨论】:

    标签: java ant javacard


    【解决方案1】:

    如果我没记错的话,Java Card 中禁止在字段初始化中使用new。您要么必须在静态install 方法(或从install 调用的方法)中执行new,要么可以标记字段private,在这种情况下,数组存储在常量池中。我强烈推荐后者。基本上,不允许执行static 代码。

    使用TRUEFALSE 作为公共静态字段也不是一个好主意,因为它们是引用查找,容易受到计时预言的影响。以这种方式定义TRUEFALSE 的整个想法是为了防止此类预言以及故障注入;我建议让他们private

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      相关资源
      最近更新 更多