Merge "Make Callbacks and SaProposals public APIs" am: d4abbc76e8 am: 03f2c35fb9
Original change: https://android-review.googlesource.com/c/platform/packages/modules/IPsec/+/1468265
Change-Id: Ie5972ad59a079b6cfdf52649165f91dd31129365
diff --git a/api/current.txt b/api/current.txt
index 240a0a9..b89060c 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -1,6 +1,25 @@
// Signature format: 2.0
package android.net.ipsec.ike {
+ public final class ChildSaProposal extends android.net.ipsec.ike.SaProposal {
+ }
+
+ public static final class ChildSaProposal.Builder {
+ ctor public ChildSaProposal.Builder();
+ method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addDhGroup(int);
+ method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addEncryptionAlgorithm(int, int);
+ method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addIntegrityAlgorithm(int);
+ method @NonNull public android.net.ipsec.ike.ChildSaProposal build();
+ }
+
+ public interface ChildSessionCallback {
+ method public void onClosed();
+ method public void onClosedExceptionally(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+ method public void onIpSecTransformCreated(@NonNull android.net.IpSecTransform, int);
+ method public void onIpSecTransformDeleted(@NonNull android.net.IpSecTransform, int);
+ method public void onOpened(@NonNull android.net.ipsec.ike.ChildSessionConfiguration);
+ }
+
public final class ChildSessionConfiguration {
method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getInboundTrafficSelectors();
method @NonNull public java.util.List<android.net.LinkAddress> getInternalAddresses();
@@ -43,6 +62,25 @@
field @NonNull public final String rfc822Name;
}
+ public final class IkeSaProposal extends android.net.ipsec.ike.SaProposal {
+ method @NonNull public java.util.List<java.lang.Integer> getPseudorandomFunctions();
+ }
+
+ public static final class IkeSaProposal.Builder {
+ ctor public IkeSaProposal.Builder();
+ method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addDhGroup(int);
+ method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addEncryptionAlgorithm(int, int);
+ method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addIntegrityAlgorithm(int);
+ method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addPseudorandomFunction(int);
+ method @NonNull public android.net.ipsec.ike.IkeSaProposal build();
+ }
+
+ public interface IkeSessionCallback {
+ method public void onClosed();
+ method public void onClosedExceptionally(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+ method public void onOpened(@NonNull android.net.ipsec.ike.IkeSessionConfiguration);
+ }
+
public final class IkeSessionConfiguration {
method @NonNull public android.net.ipsec.ike.IkeSessionConnectionInfo getIkeSessionConnectionInfo();
method @NonNull public java.util.List<java.net.InetAddress> getPcscfServers();
@@ -67,6 +105,40 @@
field @NonNull public final java.net.InetAddress startingAddress;
}
+ public abstract class SaProposal {
+ method @NonNull public java.util.List<java.lang.Integer> getDhGroups();
+ method @NonNull public java.util.List<android.util.Pair<java.lang.Integer,java.lang.Integer>> getEncryptionAlgorithms();
+ method @NonNull public java.util.List<java.lang.Integer> getIntegrityAlgorithms();
+ field public static final int DH_GROUP_1024_BIT_MODP = 2; // 0x2
+ field public static final int DH_GROUP_1536_BIT_MODP = 5; // 0x5
+ field public static final int DH_GROUP_2048_BIT_MODP = 14; // 0xe
+ field public static final int DH_GROUP_3072_BIT_MODP = 15; // 0xf
+ field public static final int DH_GROUP_4096_BIT_MODP = 16; // 0x10
+ field public static final int DH_GROUP_NONE = 0; // 0x0
+ field public static final int ENCRYPTION_ALGORITHM_3DES = 3; // 0x3
+ field public static final int ENCRYPTION_ALGORITHM_AES_CBC = 12; // 0xc
+ field public static final int ENCRYPTION_ALGORITHM_AES_CTR = 13; // 0xd
+ field public static final int ENCRYPTION_ALGORITHM_AES_GCM_12 = 19; // 0x13
+ field public static final int ENCRYPTION_ALGORITHM_AES_GCM_16 = 20; // 0x14
+ field public static final int ENCRYPTION_ALGORITHM_AES_GCM_8 = 18; // 0x12
+ field public static final int ENCRYPTION_ALGORITHM_CHACHA20_POLY1305 = 28; // 0x1c
+ field public static final int INTEGRITY_ALGORITHM_AES_XCBC_96 = 5; // 0x5
+ field public static final int INTEGRITY_ALGORITHM_HMAC_SHA1_96 = 2; // 0x2
+ field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_256_128 = 12; // 0xc
+ field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_384_192 = 13; // 0xd
+ field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_512_256 = 14; // 0xe
+ field public static final int INTEGRITY_ALGORITHM_NONE = 0; // 0x0
+ field public static final int KEY_LEN_AES_128 = 128; // 0x80
+ field public static final int KEY_LEN_AES_192 = 192; // 0xc0
+ field public static final int KEY_LEN_AES_256 = 256; // 0x100
+ field public static final int KEY_LEN_UNUSED = 0; // 0x0
+ field public static final int PSEUDORANDOM_FUNCTION_AES128_XCBC = 4; // 0x4
+ field public static final int PSEUDORANDOM_FUNCTION_HMAC_SHA1 = 2; // 0x2
+ field public static final int PSEUDORANDOM_FUNCTION_SHA2_256 = 5; // 0x5
+ field public static final int PSEUDORANDOM_FUNCTION_SHA2_384 = 6; // 0x6
+ field public static final int PSEUDORANDOM_FUNCTION_SHA2_512 = 7; // 0x7
+ }
+
}
package android.net.ipsec.ike.exceptions {
diff --git a/api/system-current.txt b/api/system-current.txt
index 66aecf4..01fe1d2 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -48,25 +48,6 @@
package android.net.ipsec.ike {
- public final class ChildSaProposal extends android.net.ipsec.ike.SaProposal {
- }
-
- public static final class ChildSaProposal.Builder {
- ctor public ChildSaProposal.Builder();
- method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addDhGroup(int);
- method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addEncryptionAlgorithm(int, int);
- method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addIntegrityAlgorithm(int);
- method @NonNull public android.net.ipsec.ike.ChildSaProposal build();
- }
-
- public interface ChildSessionCallback {
- method public void onClosed();
- method public void onClosedExceptionally(@NonNull android.net.ipsec.ike.exceptions.IkeException);
- method public void onIpSecTransformCreated(@NonNull android.net.IpSecTransform, int);
- method public void onIpSecTransformDeleted(@NonNull android.net.IpSecTransform, int);
- method public void onOpened(@NonNull android.net.ipsec.ike.ChildSessionConfiguration);
- }
-
public abstract class ChildSessionParams {
method @IntRange(from=0x12c, to=0x3840) public int getHardLifetimeSeconds();
method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getInboundTrafficSelectors();
@@ -75,19 +56,6 @@
method @IntRange(from=0x78, to=0x3840) public int getSoftLifetimeSeconds();
}
- public final class IkeSaProposal extends android.net.ipsec.ike.SaProposal {
- method @NonNull public java.util.List<java.lang.Integer> getPseudorandomFunctions();
- }
-
- public static final class IkeSaProposal.Builder {
- ctor public IkeSaProposal.Builder();
- method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addDhGroup(int);
- method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addEncryptionAlgorithm(int, int);
- method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addIntegrityAlgorithm(int);
- method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addPseudorandomFunction(int);
- method @NonNull public android.net.ipsec.ike.IkeSaProposal build();
- }
-
public final class IkeSession implements java.lang.AutoCloseable {
ctor public IkeSession(@NonNull android.content.Context, @NonNull android.net.ipsec.ike.IkeSessionParams, @NonNull android.net.ipsec.ike.ChildSessionParams, @NonNull java.util.concurrent.Executor, @NonNull android.net.ipsec.ike.IkeSessionCallback, @NonNull android.net.ipsec.ike.ChildSessionCallback);
method public void close();
@@ -97,10 +65,7 @@
}
public interface IkeSessionCallback {
- method public void onClosed();
- method public void onClosedExceptionally(@NonNull android.net.ipsec.ike.exceptions.IkeException);
method public void onError(@NonNull android.net.ipsec.ike.exceptions.IkeProtocolException);
- method public void onOpened(@NonNull android.net.ipsec.ike.IkeSessionConfiguration);
}
public final class IkeSessionParams {
@@ -176,40 +141,6 @@
public static interface IkeSessionParams.IkeConfigRequest {
}
- public abstract class SaProposal {
- method @NonNull public java.util.List<java.lang.Integer> getDhGroups();
- method @NonNull public java.util.List<android.util.Pair<java.lang.Integer,java.lang.Integer>> getEncryptionAlgorithms();
- method @NonNull public java.util.List<java.lang.Integer> getIntegrityAlgorithms();
- field public static final int DH_GROUP_1024_BIT_MODP = 2; // 0x2
- field public static final int DH_GROUP_1536_BIT_MODP = 5; // 0x5
- field public static final int DH_GROUP_2048_BIT_MODP = 14; // 0xe
- field public static final int DH_GROUP_3072_BIT_MODP = 15; // 0xf
- field public static final int DH_GROUP_4096_BIT_MODP = 16; // 0x10
- field public static final int DH_GROUP_NONE = 0; // 0x0
- field public static final int ENCRYPTION_ALGORITHM_3DES = 3; // 0x3
- field public static final int ENCRYPTION_ALGORITHM_AES_CBC = 12; // 0xc
- field public static final int ENCRYPTION_ALGORITHM_AES_CTR = 13; // 0xd
- field public static final int ENCRYPTION_ALGORITHM_AES_GCM_12 = 19; // 0x13
- field public static final int ENCRYPTION_ALGORITHM_AES_GCM_16 = 20; // 0x14
- field public static final int ENCRYPTION_ALGORITHM_AES_GCM_8 = 18; // 0x12
- field public static final int ENCRYPTION_ALGORITHM_CHACHA20_POLY1305 = 28; // 0x1c
- field public static final int INTEGRITY_ALGORITHM_AES_XCBC_96 = 5; // 0x5
- field public static final int INTEGRITY_ALGORITHM_HMAC_SHA1_96 = 2; // 0x2
- field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_256_128 = 12; // 0xc
- field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_384_192 = 13; // 0xd
- field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_512_256 = 14; // 0xe
- field public static final int INTEGRITY_ALGORITHM_NONE = 0; // 0x0
- field public static final int KEY_LEN_AES_128 = 128; // 0x80
- field public static final int KEY_LEN_AES_192 = 192; // 0xc0
- field public static final int KEY_LEN_AES_256 = 256; // 0x100
- field public static final int KEY_LEN_UNUSED = 0; // 0x0
- field public static final int PSEUDORANDOM_FUNCTION_AES128_XCBC = 4; // 0x4
- field public static final int PSEUDORANDOM_FUNCTION_HMAC_SHA1 = 2; // 0x2
- field public static final int PSEUDORANDOM_FUNCTION_SHA2_256 = 5; // 0x5
- field public static final int PSEUDORANDOM_FUNCTION_SHA2_384 = 6; // 0x6
- field public static final int PSEUDORANDOM_FUNCTION_SHA2_512 = 7; // 0x7
- }
-
public final class TransportModeChildSessionParams extends android.net.ipsec.ike.ChildSessionParams {
}
diff --git a/src/java/android/net/ipsec/ike/ChildSaProposal.java b/src/java/android/net/ipsec/ike/ChildSaProposal.java
index a45958d..1e3af9a 100644
--- a/src/java/android/net/ipsec/ike/ChildSaProposal.java
+++ b/src/java/android/net/ipsec/ike/ChildSaProposal.java
@@ -19,7 +19,7 @@
import static com.android.internal.net.ipsec.ike.message.IkeSaPayload.EsnTransform.ESN_POLICY_NO_EXTENDED;
import android.annotation.NonNull;
-import android.annotation.SystemApi;
+import android.annotation.SuppressLint;
import android.os.PersistableBundle;
import com.android.internal.net.ipsec.ike.message.IkePayload;
@@ -44,9 +44,7 @@
*
* @see <a href="https://tools.ietf.org/html/rfc7296#section-3.3">RFC 7296, Internet Key Exchange
* Protocol Version 2 (IKEv2)</a>
- * @hide
*/
-@SystemApi
public final class ChildSaProposal extends SaProposal {
private static final String ESN_KEY = "mEsns";
private final EsnTransform[] mEsns;
@@ -226,6 +224,9 @@
* 3DES) only {@link SaProposal.KEY_LEN_UNUSED} is allowed.
* @return Builder of ChildSaProposal.
*/
+ // The matching getter is defined in the super class. Please see {@link
+ // SaProposal#getEncryptionAlgorithms}
+ @SuppressLint("MissingGetterMatchingBuilder")
@NonNull
public Builder addEncryptionAlgorithm(@EncryptionAlgorithm int algorithm, int keyLength) {
validateAndAddEncryptAlgo(algorithm, keyLength);
@@ -238,6 +239,9 @@
* @param algorithm integrity algorithm to add to ChildSaProposal.
* @return Builder of ChildSaProposal.
*/
+ // The matching getter is defined in the super class. Please see
+ // {@link SaProposal#getIntegrityAlgorithms}
+ @SuppressLint("MissingGetterMatchingBuilder")
@NonNull
public Builder addIntegrityAlgorithm(@IntegrityAlgorithm int algorithm) {
addIntegrityAlgo(algorithm);
@@ -250,6 +254,9 @@
* @param dhGroup to add to ChildSaProposal.
* @return Builder of ChildSaProposal.
*/
+ // The matching getter is defined in the super class. Please see
+ // {@link SaProposal#getDhGroups}
+ @SuppressLint("MissingGetterMatchingBuilder")
@NonNull
public Builder addDhGroup(@DhGroup int dhGroup) {
addDh(dhGroup);
diff --git a/src/java/android/net/ipsec/ike/ChildSessionCallback.java b/src/java/android/net/ipsec/ike/ChildSessionCallback.java
index fc01eff..0f2570b 100644
--- a/src/java/android/net/ipsec/ike/ChildSessionCallback.java
+++ b/src/java/android/net/ipsec/ike/ChildSessionCallback.java
@@ -17,7 +17,7 @@
package android.net.ipsec.ike;
import android.annotation.NonNull;
-import android.annotation.SystemApi;
+import android.annotation.SuppressLint;
import android.net.IpSecTransform;
import android.net.annotations.PolicyDirection;
import android.net.ipsec.ike.exceptions.IkeException;
@@ -31,10 +31,10 @@
*
* <p>{@link ChildSessionCallback}s are also used for identifying Child Sessions. It is required
* when a caller wants to delete a specific Child Session.
- *
- * @hide
*/
-@SystemApi
+// Using interface instead of abstract class to indicate this callback does not have any state or
+// implementation.
+@SuppressLint("CallbackInterface")
public interface ChildSessionCallback {
/**
* Called when the Child Session setup succeeds.
diff --git a/src/java/android/net/ipsec/ike/IkeSaProposal.java b/src/java/android/net/ipsec/ike/IkeSaProposal.java
index f5b553f..7b93963 100644
--- a/src/java/android/net/ipsec/ike/IkeSaProposal.java
+++ b/src/java/android/net/ipsec/ike/IkeSaProposal.java
@@ -17,7 +17,7 @@
package android.net.ipsec.ike;
import android.annotation.NonNull;
-import android.annotation.SystemApi;
+import android.annotation.SuppressLint;
import android.os.PersistableBundle;
import android.util.ArraySet;
@@ -45,9 +45,7 @@
*
* @see <a href="https://tools.ietf.org/html/rfc7296#section-3.3">RFC 7296, Internet Key Exchange
* Protocol Version 2 (IKEv2)</a>
- * @hide
*/
-@SystemApi
public final class IkeSaProposal extends SaProposal {
private static final String PRF_KEY = "mPseudorandomFunctions";
private final PrfTransform[] mPseudorandomFunctions;
@@ -206,6 +204,9 @@
* 3DES) only {@link SaProposal.KEY_LEN_UNUSED} is allowed.
* @return Builder of IkeSaProposal.
*/
+ // The matching getter is defined in the super class. Please see {@link
+ // SaProposal#getEncryptionAlgorithms}
+ @SuppressLint("MissingGetterMatchingBuilder")
@NonNull
public Builder addEncryptionAlgorithm(@EncryptionAlgorithm int algorithm, int keyLength) {
validateAndAddEncryptAlgo(algorithm, keyLength);
@@ -218,6 +219,9 @@
* @param algorithm integrity algorithm to add to IkeSaProposal.
* @return Builder of IkeSaProposal.
*/
+ // The matching getter is defined in the super class. Please see
+ // {@link SaProposal#getIntegrityAlgorithms}
+ @SuppressLint("MissingGetterMatchingBuilder")
@NonNull
public Builder addIntegrityAlgorithm(@IntegrityAlgorithm int algorithm) {
addIntegrityAlgo(algorithm);
@@ -230,6 +234,9 @@
* @param dhGroup to add to IkeSaProposal.
* @return Builder of IkeSaProposal.
*/
+ // The matching getter is defined in the super class. Please see
+ // {@link SaProposal#getDhGroups}
+ @SuppressLint("MissingGetterMatchingBuilder")
@NonNull
public Builder addDhGroup(@DhGroup int dhGroup) {
addDh(dhGroup);
diff --git a/src/java/android/net/ipsec/ike/IkeSessionCallback.java b/src/java/android/net/ipsec/ike/IkeSessionCallback.java
index edcc2e7..1d0f783 100644
--- a/src/java/android/net/ipsec/ike/IkeSessionCallback.java
+++ b/src/java/android/net/ipsec/ike/IkeSessionCallback.java
@@ -17,6 +17,7 @@
package android.net.ipsec.ike;
import android.annotation.NonNull;
+import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.net.ipsec.ike.exceptions.IkeException;
import android.net.ipsec.ike.exceptions.IkeProtocolException;
@@ -27,10 +28,10 @@
* <p>{@link IkeSessionCallback} MUST be unique to each {@link IkeSession}. It is registered when
* callers are requesting a new {@link IkeSession}. It is automatically unregistered when an {@link
* IkeSession} is closed.
- *
- * @hide
*/
-@SystemApi
+// Using interface instead of abstract class to indicate this callback does not have any state or
+// implementation.
+@SuppressLint("CallbackInterface")
public interface IkeSessionCallback {
/**
* Called when the {@link IkeSession} setup succeeds.
@@ -66,7 +67,11 @@
* INVALID_MESSAGE_ID.
*
* @param exception the detailed error information.
+ * @hide
*/
+ // TODO: b/158033037 Deprecate this method and add a public API that takes an IkeException when
+ // exposing MOBIKE APIs
+ @SystemApi
void onError(@NonNull IkeProtocolException exception);
/**
diff --git a/src/java/android/net/ipsec/ike/SaProposal.java b/src/java/android/net/ipsec/ike/SaProposal.java
index dad73cf..2669d68 100644
--- a/src/java/android/net/ipsec/ike/SaProposal.java
+++ b/src/java/android/net/ipsec/ike/SaProposal.java
@@ -18,7 +18,6 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
-import android.annotation.SystemApi;
import android.os.PersistableBundle;
import android.util.Pair;
import android.util.SparseArray;
@@ -50,9 +49,7 @@
*
* @see <a href="https://tools.ietf.org/html/rfc7296#section-3.3">RFC 7296, Internet Key Exchange
* Protocol Version 2 (IKEv2)</a>
- * @hide
*/
-@SystemApi
public abstract class SaProposal {
/** @hide */
@Retention(RetentionPolicy.SOURCE)