diff options
Diffstat (limited to 'libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/paddings/ZeroBytePadding.java')
-rw-r--r-- | libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/paddings/ZeroBytePadding.java | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/paddings/ZeroBytePadding.java b/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/paddings/ZeroBytePadding.java new file mode 100644 index 000000000..53c805999 --- /dev/null +++ b/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/paddings/ZeroBytePadding.java @@ -0,0 +1,73 @@ +package org.spongycastle.crypto.paddings; + +import java.security.SecureRandom; + +import org.spongycastle.crypto.InvalidCipherTextException; + +/** + * A padder that adds NULL byte padding to a block. + */ +public class ZeroBytePadding + 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 "ZeroByte"; + } + + /** + * add the pad bytes to the passed in block, returning the + * number of bytes added. + */ + public int addPadding( + byte[] in, + int inOff) + { + int added = (in.length - inOff); + + while (inOff < in.length) + { + in[inOff] = (byte) 0; + inOff++; + } + + return added; + } + + /** + * return the number of pad bytes present in the block. + */ + public int padCount(byte[] in) + throws InvalidCipherTextException + { + int count = in.length; + + while (count > 0) + { + if (in[count - 1] != 0) + { + break; + } + + count--; + } + + return in.length - count; + } +} |