FileDocCategorySizeDatePackage
MacAuthenticatedInputStream.javaAPI DocAndroid 5.1 API2266Thu Mar 12 22:22:10 GMT 2015android.content.pm

MacAuthenticatedInputStream

public class MacAuthenticatedInputStream extends FilterInputStream
An input stream filter that applies a MAC to the data passing through it. At the end of the data that should be authenticated, the tag can be calculated. After that, the stream should not be used.
hide

Fields Summary
private final Mac
mMac
Constructors Summary
public MacAuthenticatedInputStream(InputStream in, Mac mac)

        super(in);

        mMac = mac;
    
Methods Summary
public booleanisTagEqual(byte[] tag)

        final byte[] actualTag = mMac.doFinal();

        if (tag == null || actualTag == null || tag.length != actualTag.length) {
            return false;
        }

        /*
         * Attempt to prevent timing attacks by doing the same amount of work
         * whether the first byte matches or not. Do not change this to a loop
         * that exits early when a byte does not match.
         */
        int value = 0;
        for (int i = 0; i < tag.length; i++) {
            value |= tag[i] ^ actualTag[i];
        }

        return value == 0;
    
public intread()

        final int b = super.read();
        if (b >= 0) {
            mMac.update((byte) b);
        }
        return b;
    
public intread(byte[] buffer, int offset, int count)

        int numRead = super.read(buffer, offset, count);
        if (numRead > 0) {
            mMac.update(buffer, offset, numRead);
        }
        return numRead;