1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.crypto.paddings; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.SecureRandom; 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.crypto.InvalidCipherTextException; 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A padder that adds NULL byte padding to a block. 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class ZeroBytePadding 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements BlockCipherPadding 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Initialise the padder. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param random - a SecureRandom if available. 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void init(SecureRandom random) 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IllegalArgumentException 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // nothing to do. 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the name of the algorithm the padder implements. 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the name of the algorithm the padder implements. 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getPaddingName() 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return "ZeroByte"; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * add the pad bytes to the passed in block, returning the 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * number of bytes added. 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int addPadding( 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] in, 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int inOff) 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int added = (in.length - inOff); 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (inOff < in.length) 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project in[inOff] = (byte) 0; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project inOff++; 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return added; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the number of pad bytes present in the block. 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int padCount(byte[] in) 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws InvalidCipherTextException 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int count = in.length; 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (count > 0) 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (in[count - 1] != 0) 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project count--; 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return in.length - count; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 74