From eb30e64f3fac192404a6ae3c162a0770201a7dc2 Mon Sep 17 00:00:00 2001 From: Crystal Qin Date: Tue, 3 Jan 2017 15:45:23 -0800 Subject: [PATCH] Add new key purpose Wrap Key to KeyProperties.java and KeymasterDefs.java. Test: There will be a CTS test CL submitted together. Change-Id: Ic60c3efc451cd7cbb04689b3d7bf9d607fae6c1f --- api/current.txt | 1 + api/system-current.txt | 1 + api/test-current.txt | 1 + .../android/security/keymaster/KeymasterDefs.java | 2 ++ .../java/android/security/keystore/KeyProperties.java | 11 +++++++++++ 5 files changed, 16 insertions(+) diff --git a/api/current.txt b/api/current.txt index c3a831621c458..f6128eb634613 100644 --- a/api/current.txt +++ b/api/current.txt @@ -35269,6 +35269,7 @@ package android.security.keystore { field public static final int PURPOSE_ENCRYPT = 1; // 0x1 field public static final int PURPOSE_SIGN = 4; // 0x4 field public static final int PURPOSE_VERIFY = 8; // 0x8 + field public static final int PURPOSE_WRAP_KEY = 16; // 0x10 field public static final java.lang.String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1"; field public static final java.lang.String SIGNATURE_PADDING_RSA_PSS = "PSS"; } diff --git a/api/system-current.txt b/api/system-current.txt index ccfbf019354f4..8c8e484cbb7c4 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -38175,6 +38175,7 @@ package android.security.keystore { field public static final int PURPOSE_ENCRYPT = 1; // 0x1 field public static final int PURPOSE_SIGN = 4; // 0x4 field public static final int PURPOSE_VERIFY = 8; // 0x8 + field public static final int PURPOSE_WRAP_KEY = 16; // 0x10 field public static final java.lang.String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1"; field public static final java.lang.String SIGNATURE_PADDING_RSA_PSS = "PSS"; } diff --git a/api/test-current.txt b/api/test-current.txt index b26760b13f348..e52e505a14b1a 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -35390,6 +35390,7 @@ package android.security.keystore { field public static final int PURPOSE_ENCRYPT = 1; // 0x1 field public static final int PURPOSE_SIGN = 4; // 0x4 field public static final int PURPOSE_VERIFY = 8; // 0x8 + field public static final int PURPOSE_WRAP_KEY = 16; // 0x10 field public static final java.lang.String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1"; field public static final java.lang.String SIGNATURE_PADDING_RSA_PSS = "PSS"; } diff --git a/core/java/android/security/keymaster/KeymasterDefs.java b/core/java/android/security/keymaster/KeymasterDefs.java index eb3d0312b2cfd..22f1bedc6072a 100644 --- a/core/java/android/security/keymaster/KeymasterDefs.java +++ b/core/java/android/security/keymaster/KeymasterDefs.java @@ -132,6 +132,8 @@ public final class KeymasterDefs { public static final int KM_PURPOSE_DECRYPT = 1; public static final int KM_PURPOSE_SIGN = 2; public static final int KM_PURPOSE_VERIFY = 3; + public static final int KM_PURPOSE_DERIVE_KEY = 4; + public static final int KM_PURPOSE_WRAP_KEY = 5; // Key formats. public static final int KM_KEY_FORMAT_X509 = 0; diff --git a/keystore/java/android/security/keystore/KeyProperties.java b/keystore/java/android/security/keystore/KeyProperties.java index d6b1cf1da8a2f..bf7a779ace08a 100644 --- a/keystore/java/android/security/keystore/KeyProperties.java +++ b/keystore/java/android/security/keystore/KeyProperties.java @@ -45,6 +45,7 @@ public abstract class KeyProperties { PURPOSE_DECRYPT, PURPOSE_SIGN, PURPOSE_VERIFY, + PURPOSE_WRAP_KEY, }) public @interface PurposeEnum {} @@ -68,6 +69,12 @@ public abstract class KeyProperties { */ public static final int PURPOSE_VERIFY = 1 << 3; + /** + * Purpose of key: wrapping key for secure key import. + */ + public static final int PURPOSE_WRAP_KEY = 1 << 4; + + /** * @hide */ @@ -84,6 +91,8 @@ public abstract class KeyProperties { return KeymasterDefs.KM_PURPOSE_SIGN; case PURPOSE_VERIFY: return KeymasterDefs.KM_PURPOSE_VERIFY; + case PURPOSE_WRAP_KEY: + return KeymasterDefs.KM_PURPOSE_WRAP_KEY; default: throw new IllegalArgumentException("Unknown purpose: " + purpose); } @@ -99,6 +108,8 @@ public abstract class KeyProperties { return PURPOSE_SIGN; case KeymasterDefs.KM_PURPOSE_VERIFY: return PURPOSE_VERIFY; + case KeymasterDefs.KM_PURPOSE_WRAP_KEY: + return PURPOSE_WRAP_KEY; default: throw new IllegalArgumentException("Unknown purpose: " + purpose); }