Security Code Snippets
October 1, 2017 ยท View on GitHub
- Create
KeyStoreinstance and prepare it for working usingAndroidKeyStoreprovider:
val keyStore = KeyStore.getInstance("AndroidKeyStore")
keyStore.load(null)
- Get information about keys currently existed in keystore:
// Define data class to store key info
data class KeyData(val alias: String, val creationDate: Date)
val keyData = keyStore.aliases().toList().map { KeyData(it, keyStore.getCreationDate(it)) }
- Prepare
KeyGeneratorinstance for generating and savingAESsymmetric keys usingAndroidKeyStoreprovider:
val generator = KeyGenerator.getInstance(algorithm, "AndroidKeyStore")
val builder = KeyGenParameterSpec.Builder(alias, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setUserAuthenticationRequired(userAuthenticationRequired)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.setInvalidatedByBiometricEnrollment(invalidatedByBiometricEnrollment)
generator?.init(builder.build())
// This will create and save key to KeyStore
val key = keyGenerator?.generateKey()
- Prepare
KeyPairGeneratorinstance for generating and savingRSAasymmetric key pairs usingAndroidKeyStoreprovider:
val generator = KeyPairGenerator.getInstance(keyProps.mKeyType, provider);
val startDate = Calendar.getInstance()
val endDate = Calendar.getInstance()
endDate.add(Calendar.YEAR, 20)
val builder = KeyGenParameterSpec.Builder(alias, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
.setCertificateSerialNumber(BigInteger.ONE)
.setCertificateSubject(X500Principal("CN=${alias} CA Certificate"))
.setCertificateNotBefore(startDate.time)
.setCertificateNotAfter(endDate.time)
.setBlockModes(KeyProperties.BLOCK_MODE_ECB)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
generator.initialize(generator.build())
// This will create and save key to KeyStore
val keyPair = generator?.generateKeyPair()