diff options
author | Sergio Giro <sgiro@google.com> | 2016-02-01 10:41:58 +0000 |
---|---|---|
committer | Sergio Giro <sgiro@google.com> | 2016-02-01 10:41:58 +0000 |
commit | 53b61f9fe9d58034fcc7021137e92460f91b70ce (patch) | |
tree | 90632062175928181977c1ab3ab59951bc1146c3 /bcprov/src/main/java/org/bouncycastle/crypto/tls/TlsExtensionsUtils.java | |
parent | 3eebc2629986481f9fc77ab101c0c9b8ff2f2660 (diff) | |
download | android_external_bouncycastle-53b61f9fe9d58034fcc7021137e92460f91b70ce.tar.gz android_external_bouncycastle-53b61f9fe9d58034fcc7021137e92460f91b70ce.tar.bz2 android_external_bouncycastle-53b61f9fe9d58034fcc7021137e92460f91b70ce.zip |
bouncycastle: Android tree with upstream code for version 1.52
Android tree as of
1af9aad12fedf1d93333e19f5ed0ab86f1cc4e2a
Change-Id: I714fa0954a5d000cd88d1fb78b0b7fe28246d404
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/crypto/tls/TlsExtensionsUtils.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/crypto/tls/TlsExtensionsUtils.java | 91 |
1 files changed, 66 insertions, 25 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/crypto/tls/TlsExtensionsUtils.java b/bcprov/src/main/java/org/bouncycastle/crypto/tls/TlsExtensionsUtils.java index fbc39dd..8e50f57 100644 --- a/bcprov/src/main/java/org/bouncycastle/crypto/tls/TlsExtensionsUtils.java +++ b/bcprov/src/main/java/org/bouncycastle/crypto/tls/TlsExtensionsUtils.java @@ -9,6 +9,8 @@ import org.bouncycastle.util.Integers; public class TlsExtensionsUtils { + public static final Integer EXT_encrypt_then_mac = Integers.valueOf(ExtensionType.encrypt_then_mac); + public static final Integer EXT_extended_master_secret = Integers.valueOf(ExtensionType.extended_master_secret); public static final Integer EXT_heartbeat = Integers.valueOf(ExtensionType.heartbeat); public static final Integer EXT_max_fragment_length = Integers.valueOf(ExtensionType.max_fragment_length); public static final Integer EXT_server_name = Integers.valueOf(ExtensionType.server_name); @@ -20,6 +22,16 @@ public class TlsExtensionsUtils return extensions == null ? new Hashtable() : extensions; } + public static void addEncryptThenMACExtension(Hashtable extensions) + { + extensions.put(EXT_encrypt_then_mac, createEncryptThenMACExtension()); + } + + public static void addExtendedMasterSecretExtension(Hashtable extensions) + { + extensions.put(EXT_extended_master_secret, createExtendedMasterSecretExtension()); + } + public static void addHeartbeatExtension(Hashtable extensions, HeartbeatExtension heartbeatExtension) throws IOException { @@ -77,6 +89,18 @@ public class TlsExtensionsUtils return extensionData == null ? null : readStatusRequestExtension(extensionData); } + public static boolean hasEncryptThenMACExtension(Hashtable extensions) throws IOException + { + byte[] extensionData = TlsUtils.getExtensionData(extensions, EXT_encrypt_then_mac); + return extensionData == null ? false : readEncryptThenMACExtension(extensionData); + } + + public static boolean hasExtendedMasterSecretExtension(Hashtable extensions) throws IOException + { + byte[] extensionData = TlsUtils.getExtensionData(extensions, EXT_extended_master_secret); + return extensionData == null ? false : readExtendedMasterSecretExtension(extensionData); + } + public static boolean hasTruncatedHMacExtension(Hashtable extensions) throws IOException { byte[] extensionData = TlsUtils.getExtensionData(extensions, EXT_truncated_hmac); @@ -88,6 +112,16 @@ public class TlsExtensionsUtils return TlsUtils.EMPTY_BYTES; } + public static byte[] createEncryptThenMACExtension() + { + return createEmptyExtensionData(); + } + + public static byte[] createExtendedMasterSecretExtension() + { + return createEmptyExtensionData(); + } + public static byte[] createHeartbeatExtension(HeartbeatExtension heartbeatExtension) throws IOException { @@ -106,12 +140,11 @@ public class TlsExtensionsUtils public static byte[] createMaxFragmentLengthExtension(short maxFragmentLength) throws IOException { - if (!MaxFragmentLength.isValid(maxFragmentLength)) - { - throw new TlsFatalAlert(AlertDescription.internal_error); - } + TlsUtils.checkUint8(maxFragmentLength); - return new byte[]{ (byte)maxFragmentLength }; + byte[] extensionData = new byte[1]; + TlsUtils.writeUint8(maxFragmentLength, extensionData, 0); + return extensionData; } public static byte[] createServerNameExtension(ServerNameList serverNameList) @@ -149,6 +182,31 @@ public class TlsExtensionsUtils return createEmptyExtensionData(); } + private static boolean readEmptyExtensionData(byte[] extensionData) throws IOException + { + if (extensionData == null) + { + throw new IllegalArgumentException("'extensionData' cannot be null"); + } + + if (extensionData.length != 0) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + return true; + } + + public static boolean readEncryptThenMACExtension(byte[] extensionData) throws IOException + { + return readEmptyExtensionData(extensionData); + } + + public static boolean readExtendedMasterSecretExtension(byte[] extensionData) throws IOException + { + return readEmptyExtensionData(extensionData); + } + public static HeartbeatExtension readHeartbeatExtension(byte[] extensionData) throws IOException { @@ -179,14 +237,7 @@ public class TlsExtensionsUtils throw new TlsFatalAlert(AlertDescription.decode_error); } - short maxFragmentLength = (short)extensionData[0]; - - if (!MaxFragmentLength.isValid(maxFragmentLength)) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - - return maxFragmentLength; + return TlsUtils.readUint8(extensionData, 0); } public static ServerNameList readServerNameExtension(byte[] extensionData) @@ -223,18 +274,8 @@ public class TlsExtensionsUtils return statusRequest; } - private static boolean readTruncatedHMacExtension(byte[] extensionData) throws IOException + public static boolean readTruncatedHMacExtension(byte[] extensionData) throws IOException { - if (extensionData == null) - { - throw new IllegalArgumentException("'extensionData' cannot be null"); - } - - if (extensionData.length != 0) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - - return true; + return readEmptyExtensionData(extensionData); } } |