| /* GENERATED SOURCE. DO NOT MODIFY. */ |
| package com.android.org.bouncycastle.crypto.paddings; |
| |
| import java.security.SecureRandom; |
| |
| import com.android.org.bouncycastle.crypto.InvalidCipherTextException; |
| |
| /** |
| * A padder that adds PKCS7/PKCS5 padding to a block. |
| * @hide This class is not part of the Android public SDK API |
| */ |
| public class PKCS7Padding |
| implements BlockCipherPadding |
| { |
| /** |
| * Initialise the padder. |
| * |
| * @param random - a SecureRandom if available. |
| */ |
| public void init(SecureRandom random) |
| throws IllegalArgumentException |
| { |
| // nothing to do. |
| } |
| |
| /** |
| * Return the name of the algorithm the padder implements. |
| * |
| * @return the name of the algorithm the padder implements. |
| */ |
| public String getPaddingName() |
| { |
| return "PKCS7"; |
| } |
| |
| /** |
| * add the pad bytes to the passed in block, returning the |
| * number of bytes added. |
| */ |
| public int addPadding( |
| byte[] in, |
| int inOff) |
| { |
| byte code = (byte)(in.length - inOff); |
| |
| while (inOff < in.length) |
| { |
| in[inOff] = code; |
| inOff++; |
| } |
| |
| return code; |
| } |
| |
| /** |
| * return the number of pad bytes present in the block. |
| */ |
| public int padCount(byte[] in) |
| throws InvalidCipherTextException |
| { |
| int count = in[in.length - 1] & 0xff; |
| byte countAsbyte = (byte)count; |
| |
| // constant time version |
| boolean failed = (count > in.length | count == 0); |
| |
| for (int i = 0; i < in.length; i++) |
| { |
| failed |= (in.length - i <= count) & (in[i] != countAsbyte); |
| } |
| |
| if (failed) |
| { |
| throw new InvalidCipherTextException("pad block corrupted"); |
| } |
| |
| return count; |
| } |
| } |