From ae0b3dc396c9ec4e8da2b76cf239736080fe9822 Mon Sep 17 00:00:00 2001 From: Arnaud Fontaine Date: Mon, 25 Sep 2017 10:13:41 +0200 Subject: [PATCH] Fix EC decipher template (#2166) Fix EC decipher template --- .../securitytoken/SecurityTokenHelper.java | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenHelper.java index 9802d182b..f627c7473 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/SecurityTokenHelper.java @@ -297,6 +297,7 @@ public class SecurityTokenHelper { } byte[] data; + byte[] dataLen; int pLen = 0; X9ECParameters x9Params; @@ -324,18 +325,27 @@ public class SecurityTokenHelper { } data = p.getEncoded(false); - data = Arrays.concatenate( - Hex.decode("86"), - new byte[]{(byte) data.length}, - data); - data = Arrays.concatenate( - Hex.decode("7F49"), - new byte[]{(byte) data.length}, - data); - data = Arrays.concatenate( - Hex.decode("A6"), - new byte[]{(byte) data.length}, - data); + + if (data.length < 128) { + dataLen = new byte[]{(byte) data.length}; + } else { + dataLen = new byte[]{(byte)0x81, (byte) data.length}; + } + data = Arrays.concatenate(Hex.decode("86"), dataLen, data); + + if (data.length < 128) { + dataLen = new byte[]{(byte) data.length}; + } else { + dataLen = new byte[]{(byte)0x81, (byte) data.length}; + } + data = Arrays.concatenate(Hex.decode("7F49"), dataLen, data); + + if (data.length < 128) { + dataLen = new byte[]{(byte) data.length}; + } else { + dataLen = new byte[]{(byte)0x81, (byte) data.length}; + } + data = Arrays.concatenate(Hex.decode("A6"), dataLen, data); break; default: