import javacard.security.ECKey; //导入方法依赖的package包/类
/**
* \brief Initialize an EC key with the curve parameters from buf.
*
* \param buf The buffer containing the EC curve parameters. It must be TLV with the following format:
* 81 - prime
* 82 - coefficient A
* 83 - coefficient B
* 84 - base point G
* 85 - order
* 87 - cofactor
*
* \param bOff The offset at where the first entry is located.
*
* \param bLen The remaining length of buf.
*
* \param key The EC key to initialize.
*
* \throw NotFoundException Parts of the data needed to fully initialize
* the key were missing.
*
* \throw InvalidArgumentsException The ASN.1 sequence was malformatted.
*/
private void initEcParams(byte[] buf, short bOff, short bLen, ECKey key) throws NotFoundException, InvalidArgumentsException {
short pos = bOff;
short len;
/* Search for the prime */
pos = UtilTLV.findTag(buf, bOff, bLen, (byte) 0x81);
pos++;
len = UtilTLV.decodeLengthField(buf, pos);
pos += UtilTLV.getLengthFieldLength(len);
key.setFieldFP(buf, pos, len); // "p"
/* Search for coefficient A */
pos = UtilTLV.findTag(buf, bOff, bLen, (byte) 0x82);
pos++;
len = UtilTLV.decodeLengthField(buf, pos);
pos += UtilTLV.getLengthFieldLength(len);
key.setA(buf, pos, len);
/* Search for coefficient B */
pos = UtilTLV.findTag(buf, bOff, bLen, (byte) 0x83);
pos++;
len = UtilTLV.decodeLengthField(buf, pos);
pos += UtilTLV.getLengthFieldLength(len);
key.setB(buf, pos, len);
/* Search for base point G */
pos = UtilTLV.findTag(buf, bOff, bLen, (byte) 0x84);
pos++;
len = UtilTLV.decodeLengthField(buf, pos);
pos += UtilTLV.getLengthFieldLength(len);
key.setG(buf, pos, len); // G(x,y)
/* Search for order */
pos = UtilTLV.findTag(buf, bOff, bLen, (byte) 0x85);
pos++;
len = UtilTLV.decodeLengthField(buf, pos);
pos += UtilTLV.getLengthFieldLength(len);
key.setR(buf, pos, len); // Order of G - "q"
/* Search for cofactor */
pos = UtilTLV.findTag(buf, bOff, bLen, (byte) 0x87);
pos++;
len = UtilTLV.decodeLengthField(buf, pos);
pos += UtilTLV.getLengthFieldLength(len);
if(len == 2) {
key.setK(Util.getShort(buf, pos));
} else if(len == 1) {
key.setK(buf[pos]);
} else {
throw InvalidArgumentsException.getInstance();
}
}