use of com.facebook.crypto.streams.NativeGCMCipherInputStream in project conceal by facebook.
the class CryptoAlgoGcm method wrap.
@Override
public InputStream wrap(InputStream is, Entity entity) throws IOException, CryptoInitializationException, KeyChainException {
byte cryptoVersion = (byte) is.read();
byte cipherID = (byte) is.read();
Assertions.checkArgumentForIO(cryptoVersion == VersionCodes.CIPHER_SERIALIZATION_VERSION, "Unexpected crypto version " + cryptoVersion);
Assertions.checkArgumentForIO(cipherID == mConfig.cipherId, "Unexpected cipher ID " + cipherID);
byte[] iv = new byte[mConfig.ivLength];
// if iv is not fully read EOFException will be thrown
new DataInputStream(is).readFully(iv);
NativeGCMCipher gcmCipher = new NativeGCMCipher(mNativeLibrary);
gcmCipher.decryptInit(mKeyChain.getCipherKey(), iv);
byte[] entityBytes = entity.getBytes();
computeCipherAad(gcmCipher, cryptoVersion, cipherID, entityBytes);
return new NativeGCMCipherInputStream(is, gcmCipher, mConfig.tagLength);
}
use of com.facebook.crypto.streams.NativeGCMCipherInputStream in project conceal by facebook.
the class NativeGCMCipherHelper method getInputStream.
public InputStream getInputStream(InputStream cipherStream) throws IOException, CryptoInitializationException {
byte[] iv = new byte[CryptoConfig.KEY_128.ivLength];
cipherStream.read(iv);
NativeGCMCipher gcmCipher = new NativeGCMCipher(mNativeCryptoLibrary);
gcmCipher.decryptInit(mKey, iv);
return new NativeGCMCipherInputStream(cipherStream, gcmCipher, mTagLength);
}
Aggregations