package com.yakivmospan.scytale;
import android.security.KeyPairGeneratorSpec;
import java.math.BigInteger;
import java.util.Date;
import javax.security.auth.x500.X500Principal;
public final class KeyProps {
String mAlias;
char[] mPassword;
String mKeyType;
int mKeySize;
String mBlockModes;
String mEncryptionPaddings;
String mSignatureAlgorithm;
BigInteger mSerialNumber;
X500Principal mSubject;
Date mStartDate;
Date mEndDate;
public static final class Builder {
private KeyProps mProps = new KeyProps();
/**
* Required for Symmetric and Asymmetric key
*/
public Builder setAlias(String alias) {
mProps.mAlias = alias;
return this;
}
/**
* Required for Symmetric and Asymmetric key
*/
public Builder setKeyType(String keyType) {
mProps.mKeyType = keyType;
return this;
}
/**
* Required for Symmetric using API < 23 and Asymmetric key using API < 18.
*
* @param password used for additional key secure in Default KeyStore.
*/
public Builder setPassword(char[] password) {
mProps.mPassword = password;
return this;
}
/**
* Required for Symmetric using API < 23 and Asymmetric key using API < 18. Is ignored in 18 API for Asymmetric
* keys as there is no possibility to specify it for {@link KeyPairGeneratorSpec}
*/
public Builder setKeySize(int keySize) {
mProps.mKeySize = keySize;
return this;
}
/**
* Required for Asymmetric key.
*/
public Builder setSerialNumber(BigInteger serialNumber) {
mProps.mSerialNumber = serialNumber;
return this;
}
/**
* Required for Asymmetric key.
* <p/>
* Example: final X500Principal subject = new X500Principal("CN=" + alias + " CA Certificate");
*/
public Builder setSubject(X500Principal subject) {
mProps.mSubject = subject;
return this;
}
/**
* Required for Asymmetric key.
*/
public Builder setStartDate(Date startDate) {
mProps.mStartDate = startDate;
return this;
}
/**
* Required for Asymmetric key.
*/
public Builder setEndDate(Date endDate) {
mProps.mEndDate = endDate;
return this;
}
/**
* Required for Symmetric and Asymmetric keys using API >= 23.
*/
public Builder setBlockModes(String blockModes) {
mProps.mBlockModes = blockModes;
return this;
}
/**
* Required for Symmetric and Asymmetric keys using API >= 23.
*/
public Builder setEncryptionPaddings(String encryptionPaddings) {
mProps.mEncryptionPaddings = encryptionPaddings;
return this;
}
/**
* Required for Asymmetric key using API < 18.
*/
public Builder setSignatureAlgorithm(String signatureAlgorithm) {
mProps.mSignatureAlgorithm = signatureAlgorithm;
return this;
}
public KeyProps build() {
return mProps;
}
}
}