aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/applet/ECKeyGenerator.java
diff options
context:
space:
mode:
authorJ08nY2017-01-22 03:17:36 +0100
committerJ08nY2017-01-22 03:17:36 +0100
commit636306e09a84ac785d2711117640efe914ae020f (patch)
treed626572b2e7601d015eefefe9da6a751a00001b9 /src/cz/crcs/ectester/applet/ECKeyGenerator.java
parent2e677ed35520f4c3380461205c548fba28998c40 (diff)
downloadECTester-636306e09a84ac785d2711117640efe914ae020f.tar.gz
ECTester-636306e09a84ac785d2711117640efe914ae020f.tar.zst
ECTester-636306e09a84ac785d2711117640efe914ae020f.zip
Diffstat (limited to 'src/cz/crcs/ectester/applet/ECKeyGenerator.java')
-rw-r--r--src/cz/crcs/ectester/applet/ECKeyGenerator.java54
1 files changed, 37 insertions, 17 deletions
diff --git a/src/cz/crcs/ectester/applet/ECKeyGenerator.java b/src/cz/crcs/ectester/applet/ECKeyGenerator.java
index 47f9c94..417944c 100644
--- a/src/cz/crcs/ectester/applet/ECKeyGenerator.java
+++ b/src/cz/crcs/ectester/applet/ECKeyGenerator.java
@@ -72,6 +72,10 @@ public class ECKeyGenerator {
byte alg = EC_Consts.getCurveType(curve);
sw = ISO7816.SW_NO_ERROR;
+ if (params == EC_Consts.PARAMETERS_NONE) {
+ return sw;
+ }
+
short length;
if (alg == KeyPair.ALG_EC_FP && (params & EC_Consts.PARAMETER_FP) != 0) {
length = EC_Consts.getCurveParameter(curve, EC_Consts.PARAMETER_FP, buffer, offset);
@@ -119,6 +123,9 @@ public class ECKeyGenerator {
*/
public short corruptCurve(KeyPair keypair, byte key, short corruptParams, byte corruption, byte[] buffer, short offset) {
sw = ISO7816.SW_NO_ERROR;
+ if (corruptParams == EC_Consts.PARAMETERS_NONE) {
+ return sw;
+ }
//go through param bit by bit, and invalidate all selected params
short paramMask = EC_Consts.PARAMETER_FP;
@@ -244,6 +251,9 @@ public class ECKeyGenerator {
*/
public short setExternalCurve(KeyPair keypair, byte key, short params, byte[] inBuffer, short inOffset) {
sw = ISO7816.SW_NO_ERROR;
+ if (params == EC_Consts.PARAMETERS_NONE) {
+ return sw;
+ }
short paramMask = EC_Consts.PARAMETER_FP;
while (paramMask <= EC_Consts.PARAMETER_S) {
@@ -261,11 +271,14 @@ public class ECKeyGenerator {
}
/**
- * @param key
- * @param param
- * @param outputBuffer
- * @param outputOffset
- * @return
+ * Exports a selected parameter from a given keyPairs key.
+ *
+ * @param keypair keypair to export from
+ * @param key key to export from (KEY_PUBLIC | KEY_PRIVATE)
+ * @param param parameter to export (EC_Consts.PARAMETER_* || ...)
+ * @param outputBuffer buffer to write to
+ * @param outputOffset offset to start writing in buffer
+ * @return length of data written
*/
public short exportParameter(KeyPair keypair, byte key, short param, byte[] outputBuffer, short outputOffset) {
sw = ISO7816.SW_NO_ERROR;
@@ -319,18 +332,25 @@ public class ECKeyGenerator {
}
/**
- * @param keypair
- * @param key
- * @param params
- * @param buffer
- * @param offset
- * @return
+ * Exports selected parameters from a given keyPairs key.
+ * Raw parameter data is always prepended by its length as a
+ * short value. The order of parameters is the usual one from
+ * EC_Consts: field,a,b,g,r,k,w,s.
+ *
+ * @param keypair keyPair to export from
+ * @param key key to export from (KEY_PUBLIC || KEY_PRIVATE)
+ * @param params params to export (EC_Consts.PARAMETER_* | ...)
+ * @param buffer buffer to export to
+ * @param offset offset to start writing in buffer
+ * @return length of data written
*/
public short exportParameters(KeyPair keypair, byte key, short params, byte[] buffer, short offset) {
sw = ISO7816.SW_NO_ERROR;
+ if (params == EC_Consts.PARAMETERS_NONE) {
+ return sw;
+ }
short length = 0;
-
short paramMask = EC_Consts.PARAMETER_FP;
while (paramMask <= EC_Consts.PARAMETER_S) {
short masked = (short) (paramMask & params);
@@ -352,11 +372,11 @@ public class ECKeyGenerator {
/**
* Copies this KeyPairs curve parameters to another ECKeyGenerator.
*
- * @param from
- * @param to
- * @param buffer
- * @param offset
- * @return
+ * @param from keyPair to copy from
+ * @param to keyPair to copy to
+ * @param buffer buffer to use for copying
+ * @param offset offset to use in buffer
+ * @return sw
*/
public short copyCurve(KeyPair from, KeyPair to, byte[] buffer, short offset) {
sw = ISO7816.SW_NO_ERROR;