Skip to content

Commit 5a8552d

Browse files
committed
changed wrap KS operation to a latest method
1 parent e77bcfc commit 5a8552d

File tree

1 file changed

+36
-14
lines changed

1 file changed

+36
-14
lines changed

common/src/main/java/com/microsoft/identity/common/crypto/AndroidWrappedKeyLoader.java

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import android.content.Context;
2727
import android.os.Build;
2828
import android.security.KeyPairGeneratorSpec;
29+
import android.security.keystore.KeyGenParameterSpec;
30+
import android.security.keystore.KeyProperties;
2931

3032
import androidx.annotation.RequiresApi;
3133

@@ -44,7 +46,9 @@
4446
import java.security.KeyStore;
4547
import java.security.spec.AlgorithmParameterSpec;
4648
import java.util.Calendar;
49+
import java.util.Date;
4750
import java.util.Locale;
51+
import java.util.concurrent.TimeUnit;
4852

4953
import javax.crypto.SecretKey;
5054
import javax.security.auth.x500.X500Principal;
@@ -273,25 +277,43 @@ public void deleteSecretKeyFromStorage() throws ClientException {
273277
* @param context an Android {@link Context} object.
274278
* @return a {@link AlgorithmParameterSpec} for the keystore key (that we'll use to wrap the secret key).
275279
*/
276-
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
277-
private static AlgorithmParameterSpec getSpecForKeyStoreKey(@NonNull final Context context,
278-
@NonNull final String alias) {
280+
// @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
281+
// private static AlgorithmParameterSpec getLegacySpecForKeyStoreKey(@NonNull final Context context,
282+
// @NonNull final String alias) {
283+
// // Generate a self-signed cert.
284+
// final String certInfo = String.format(Locale.ROOT, "CN=%s, OU=%s",
285+
// alias,
286+
// context.getPackageName());
287+
//
288+
// final Calendar start = Calendar.getInstance();
289+
// final Calendar end = Calendar.getInstance();
290+
// final int certValidYears = 100;
291+
// end.add(Calendar.YEAR, certValidYears);
292+
//
293+
// return new KeyPairGeneratorSpec.Builder(context)
294+
// .setAlias(alias)
295+
// .setSubject(new X500Principal(certInfo))
296+
// .setSerialNumber(BigInteger.ONE)
297+
// .setStartDate(start.getTime())
298+
// .setEndDate(end.getTime())
299+
// .build();
300+
// }
301+
302+
303+
private static AlgorithmParameterSpec getSpecForKeyStoreKey(@NonNull final Context context, @NonNull final String alias) {
279304
// Generate a self-signed cert.
280305
final String certInfo = String.format(Locale.ROOT, "CN=%s, OU=%s",
281306
alias,
282307
context.getPackageName());
283-
284-
final Calendar start = Calendar.getInstance();
285-
final Calendar end = Calendar.getInstance();
286308
final int certValidYears = 100;
287-
end.add(Calendar.YEAR, certValidYears);
288-
289-
return new KeyPairGeneratorSpec.Builder(context)
290-
.setAlias(alias)
291-
.setSubject(new X500Principal(certInfo))
292-
.setSerialNumber(BigInteger.ONE)
293-
.setStartDate(start.getTime())
294-
.setEndDate(end.getTime())
309+
return new KeyGenParameterSpec.Builder(alias, KeyProperties.PURPOSE_WRAP_KEY | KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
310+
.setCertificateSubject(new X500Principal(certInfo))
311+
.setCertificateSerialNumber(BigInteger.ONE)
312+
.setCertificateNotBefore(new Date())
313+
.setCertificateNotAfter(new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(365 * certValidYears)))
314+
.setKeySize(2048)
315+
.setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
316+
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
295317
.build();
296318
}
297319

0 commit comments

Comments
 (0)