培训考核三期,新版培训,网页版培训登录器
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

113 lines
2.8 KiB

#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
#pragma warning disable
using System;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters;
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto
{
/**
* a wrapper for block ciphers with a single byte block size, so that they
* can be treated like stream ciphers.
*/
public class StreamBlockCipher
: IStreamCipher
{
private readonly IBlockCipher cipher;
private readonly byte[] oneByte = new byte[1];
/**
* basic constructor.
*
* @param cipher the block cipher to be wrapped.
* @exception ArgumentException if the cipher has a block size other than
* one.
*/
public StreamBlockCipher(
IBlockCipher cipher)
{
if (cipher == null)
throw new ArgumentNullException("cipher");
if (cipher.GetBlockSize() != 1)
throw new ArgumentException("block cipher block size != 1.", "cipher");
this.cipher = cipher;
}
/**
* initialise the underlying cipher.
*
* @param forEncryption true if we are setting up for encryption, false otherwise.
* @param param the necessary parameters for the underlying cipher to be initialised.
*/
public void Init(
bool forEncryption,
ICipherParameters parameters)
{
cipher.Init(forEncryption, parameters);
}
/**
* return the name of the algorithm we are wrapping.
*
* @return the name of the algorithm we are wrapping.
*/
public string AlgorithmName
{
get { return cipher.AlgorithmName; }
}
/**
* encrypt/decrypt a single byte returning the result.
*
* @param in the byte to be processed.
* @return the result of processing the input byte.
*/
public byte ReturnByte(
byte input)
{
oneByte[0] = input;
cipher.ProcessBlock(oneByte, 0, oneByte, 0);
return oneByte[0];
}
/**
* process a block of bytes from in putting the result into out.
*
* @param in the input byte array.
* @param inOff the offset into the in array where the data to be processed starts.
* @param len the number of bytes to be processed.
* @param out the output buffer the processed bytes go into.
* @param outOff the offset into the output byte array the processed data stars at.
* @exception DataLengthException if the output buffer is too small.
*/
public void ProcessBytes(
byte[] input,
int inOff,
int length,
byte[] output,
int outOff)
{
if (outOff + length > output.Length)
throw new DataLengthException("output buffer too small in ProcessBytes()");
for (int i = 0; i != length; i++)
{
cipher.ProcessBlock(input, inOff + i, output, outOff + i);
}
}
/**
* reset the underlying cipher. This leaves it in the same state
* it was at after the last init (if there was one).
*/
public void Reset()
{
cipher.Reset();
}
}
}
#pragma warning restore
#endif