我正在尝试使用我自己的派生密钥S(也是字节数组)对包含inBuffer字节数组的消息进行签名。javacard (jc) 小程序模块的函数片段如下所示。我正在使用 javacard2.2.2 库来开发 jc 小程序。我正在使用 android 应用程序发送进程请求。我收到返回码“ 6A81 ”,表示“不支持功能”。现在,我不知道如何继续,因为我不明白它提到了不支持 HMAC_SHA256 或者我在函数中犯了一些错误。请帮忙。
Signature m_sessionMAC = null;
HMACKey keyType = null;
Sign = new byte[64];
bytesRead = apdu.setIncomingAndReceive();
// Create HMAC Key Used in Mac
m_sessionMAC = Signature.getInstance(Signature.ALG_HMAC_SHA_256, false);
// Create HMAC Key Used in Mac
keyType = (HMACKey) KeyBuilder.buildKey(KeyBuilder.TYPE_HMAC, KeyBuilder.LENGTH_HMAC_SHA_256_BLOCK_64, false);
keyType.setKey(S,(short) 0, (short) S.length);
m_sessionMAC.init(keyType, Signature.MODE_SIGN);
//Generate Signature on inBuffer (received data to sign)
echoOffset = m_sessionMAC.sign(inBuffer, ISO7816.OFFSET_CDATA, ISO7816.OFFSET_LC, Sign , (short)0);
Util.arrayCopyNonAtomic(Sign, ( short ) 0, inBuffer, ( short ) 0, echoOffset);
apdu.setOutgoingAndSend( ( short ) 0, (short) echoOffset );
请在这方面帮助我,或者提供任何用于实现 HMAC_SHA256 或 HMAC_SHA1 对称加密的指针。在 javacard 小程序中。
先感谢您。