ContainerEncryptionParamspublic class ContainerEncryptionParams extends Object implements android.os.ParcelableRepresents encryption parameters used to read a container. |
Fields Summary |
---|
protected static final String | TAG | private static final String | TO_STRING_PREFIXWhat we print out first when toString() is called. | private static final int | ENC_PARAMS_IV_PARAMETERSParameter type for parceling that indicates the next parameters are
IvParameters. | private static final int | MAC_PARAMS_NONEParameter type for paceling that indicates there are no MAC parameters. | private final String | mEncryptionAlgorithmThe encryption algorithm used. | private final IvParameterSpec | mEncryptionSpecThe parameter spec to be used for encryption. | private final SecretKey | mEncryptionKeySecret key to be used for decryption. | private final String | mMacAlgorithmAlgorithm name for the MAC to be used. | private final AlgorithmParameterSpec | mMacSpecThe parameter spec to be used for the MAC tag authentication. | private final SecretKey | mMacKeySecret key to be used for MAC tag authentication. | private final byte[] | mMacTagMAC tag authenticating the data in the container. | private final long | mAuthenticatedDataStartOffset into file where authenticated (e.g., MAC protected) data begins. | private final long | mEncryptedDataStartOffset into file where encrypted data begins. | private final long | mDataEndOffset into file for the end of encrypted data (and, by extension,
authenticated data) in file. | public static final Parcelable.Creator | CREATOR |
Constructors Summary |
---|
public ContainerEncryptionParams(String encryptionAlgorithm, AlgorithmParameterSpec encryptionSpec, SecretKey encryptionKey)
this(encryptionAlgorithm, encryptionSpec, encryptionKey, null, null, null, null, -1, -1,
-1);
| private ContainerEncryptionParams(android.os.Parcel source)
mEncryptionAlgorithm = source.readString();
final int encParamType = source.readInt();
final byte[] encParamsEncoded = source.createByteArray();
mEncryptionKey = (SecretKey) source.readSerializable();
mMacAlgorithm = source.readString();
final int macParamType = source.readInt();
source.createByteArray(); // byte[] macParamsEncoded
mMacKey = (SecretKey) source.readSerializable();
mMacTag = source.createByteArray();
mAuthenticatedDataStart = source.readLong();
mEncryptedDataStart = source.readLong();
mDataEnd = source.readLong();
switch (encParamType) {
case ENC_PARAMS_IV_PARAMETERS:
mEncryptionSpec = new IvParameterSpec(encParamsEncoded);
break;
default:
throw new InvalidAlgorithmParameterException("Unknown parameter type "
+ encParamType);
}
switch (macParamType) {
case MAC_PARAMS_NONE:
mMacSpec = null;
break;
default:
throw new InvalidAlgorithmParameterException("Unknown parameter type "
+ macParamType);
}
if (mEncryptionKey == null) {
throw new NullPointerException("encryptionKey == null");
}
| public ContainerEncryptionParams(String encryptionAlgorithm, AlgorithmParameterSpec encryptionSpec, SecretKey encryptionKey, String macAlgorithm, AlgorithmParameterSpec macSpec, SecretKey macKey, byte[] macTag, long authenticatedDataStart, long encryptedDataStart, long dataEnd)Creates container encryption specifications for installing from encrypted
containers.
if (TextUtils.isEmpty(encryptionAlgorithm)) {
throw new NullPointerException("algorithm == null");
} else if (encryptionSpec == null) {
throw new NullPointerException("encryptionSpec == null");
} else if (encryptionKey == null) {
throw new NullPointerException("encryptionKey == null");
}
if (!TextUtils.isEmpty(macAlgorithm)) {
if (macKey == null) {
throw new NullPointerException("macKey == null");
}
}
if (!(encryptionSpec instanceof IvParameterSpec)) {
throw new InvalidAlgorithmParameterException(
"Unknown parameter spec class; must be IvParameters");
}
mEncryptionAlgorithm = encryptionAlgorithm;
mEncryptionSpec = (IvParameterSpec) encryptionSpec;
mEncryptionKey = encryptionKey;
mMacAlgorithm = macAlgorithm;
mMacSpec = macSpec;
mMacKey = macKey;
mMacTag = macTag;
mAuthenticatedDataStart = authenticatedDataStart;
mEncryptedDataStart = encryptedDataStart;
mDataEnd = dataEnd;
|
Methods Summary |
---|
public int | describeContents()
return 0;
| public boolean | equals(java.lang.Object o)
if (this == o) {
return true;
}
if (!(o instanceof ContainerEncryptionParams)) {
return false;
}
final ContainerEncryptionParams other = (ContainerEncryptionParams) o;
// Primitive comparison
if ((mAuthenticatedDataStart != other.mAuthenticatedDataStart)
|| (mEncryptedDataStart != other.mEncryptedDataStart)
|| (mDataEnd != other.mDataEnd)) {
return false;
}
// String comparison
if (!mEncryptionAlgorithm.equals(other.mEncryptionAlgorithm)
|| !mMacAlgorithm.equals(other.mMacAlgorithm)) {
return false;
}
// Object comparison
if (!isSecretKeyEqual(mEncryptionKey, other.mEncryptionKey)
|| !isSecretKeyEqual(mMacKey, other.mMacKey)) {
return false;
}
if (!Arrays.equals(mEncryptionSpec.getIV(), other.mEncryptionSpec.getIV())
|| !Arrays.equals(mMacTag, other.mMacTag) || (mMacSpec != other.mMacSpec)) {
return false;
}
return true;
| public long | getAuthenticatedDataStart()
return mAuthenticatedDataStart;
| public long | getDataEnd()
return mDataEnd;
| public long | getEncryptedDataStart()
return mEncryptedDataStart;
| public java.lang.String | getEncryptionAlgorithm()
return mEncryptionAlgorithm;
| public javax.crypto.SecretKey | getEncryptionKey()
return mEncryptionKey;
| public java.security.spec.AlgorithmParameterSpec | getEncryptionSpec()
return mEncryptionSpec;
| public java.lang.String | getMacAlgorithm()
return mMacAlgorithm;
| public javax.crypto.SecretKey | getMacKey()
return mMacKey;
| public java.security.spec.AlgorithmParameterSpec | getMacSpec()
return mMacSpec;
| public byte[] | getMacTag()
return mMacTag;
| public int | hashCode()
int hash = 3;
hash += 5 * mEncryptionAlgorithm.hashCode();
hash += 7 * Arrays.hashCode(mEncryptionSpec.getIV());
hash += 11 * mEncryptionKey.hashCode();
hash += 13 * mMacAlgorithm.hashCode();
hash += 17 * mMacKey.hashCode();
hash += 19 * Arrays.hashCode(mMacTag);
hash += 23 * mAuthenticatedDataStart;
hash += 29 * mEncryptedDataStart;
hash += 31 * mDataEnd;
return hash;
| private static final boolean | isSecretKeyEqual(javax.crypto.SecretKey key1, javax.crypto.SecretKey key2)
final String keyFormat = key1.getFormat();
final String otherKeyFormat = key2.getFormat();
if (keyFormat == null) {
if (keyFormat != otherKeyFormat) {
return false;
}
if (key1.getEncoded() != key2.getEncoded()) {
return false;
}
} else {
if (!keyFormat.equals(key2.getFormat())) {
return false;
}
if (!Arrays.equals(key1.getEncoded(), key2.getEncoded())) {
return false;
}
}
return true;
| public java.lang.String | toString()
final StringBuilder sb = new StringBuilder(TO_STRING_PREFIX);
sb.append("mEncryptionAlgorithm=\"");
sb.append(mEncryptionAlgorithm);
sb.append("\",");
sb.append("mEncryptionSpec=");
sb.append(mEncryptionSpec.toString());
sb.append("mEncryptionKey=");
sb.append(mEncryptionKey.toString());
sb.append("mMacAlgorithm=\"");
sb.append(mMacAlgorithm);
sb.append("\",");
sb.append("mMacSpec=");
sb.append(mMacSpec.toString());
sb.append("mMacKey=");
sb.append(mMacKey.toString());
sb.append(",mAuthenticatedDataStart=");
sb.append(mAuthenticatedDataStart);
sb.append(",mEncryptedDataStart=");
sb.append(mEncryptedDataStart);
sb.append(",mDataEnd=");
sb.append(mDataEnd);
sb.append('}");
return sb.toString();
| public void | writeToParcel(android.os.Parcel dest, int flags)
dest.writeString(mEncryptionAlgorithm);
dest.writeInt(ENC_PARAMS_IV_PARAMETERS);
dest.writeByteArray(mEncryptionSpec.getIV());
dest.writeSerializable(mEncryptionKey);
dest.writeString(mMacAlgorithm);
dest.writeInt(MAC_PARAMS_NONE);
dest.writeByteArray(new byte[0]);
dest.writeSerializable(mMacKey);
dest.writeByteArray(mMacTag);
dest.writeLong(mAuthenticatedDataStart);
dest.writeLong(mEncryptedDataStart);
dest.writeLong(mDataEnd);
|
|