Initial Commit
This commit is contained in:
59
iTechSharp/srcbc/bcpg/MPInteger.cs
Normal file
59
iTechSharp/srcbc/bcpg/MPInteger.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
using Org.BouncyCastle.Math;
|
||||
|
||||
namespace Org.BouncyCastle.Bcpg
|
||||
{
|
||||
/// <remarks>A multiple precision integer</remarks>
|
||||
public class MPInteger
|
||||
: BcpgObject
|
||||
{
|
||||
private readonly BigInteger val;
|
||||
|
||||
public MPInteger(
|
||||
BcpgInputStream bcpgIn)
|
||||
{
|
||||
if (bcpgIn == null)
|
||||
throw new ArgumentNullException("bcpgIn");
|
||||
|
||||
int length = (bcpgIn.ReadByte() << 8) | bcpgIn.ReadByte();
|
||||
byte[] bytes = new byte[(length + 7) / 8];
|
||||
|
||||
bcpgIn.ReadFully(bytes);
|
||||
|
||||
this.val = new BigInteger(1, bytes);
|
||||
}
|
||||
|
||||
public MPInteger(
|
||||
BigInteger val)
|
||||
{
|
||||
if (val == null)
|
||||
throw new ArgumentNullException("val");
|
||||
if (val.SignValue < 0)
|
||||
throw new ArgumentException("Values must be positive", "val");
|
||||
|
||||
this.val = val;
|
||||
}
|
||||
|
||||
public BigInteger Value
|
||||
{
|
||||
get { return val; }
|
||||
}
|
||||
|
||||
public override void Encode(
|
||||
BcpgOutputStream bcpgOut)
|
||||
{
|
||||
bcpgOut.WriteShort((short) val.BitLength);
|
||||
bcpgOut.Write(val.ToByteArrayUnsigned());
|
||||
}
|
||||
|
||||
internal static void Encode(
|
||||
BcpgOutputStream bcpgOut,
|
||||
BigInteger val)
|
||||
{
|
||||
bcpgOut.WriteShort((short) val.BitLength);
|
||||
bcpgOut.Write(val.ToByteArrayUnsigned());
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user