86 lines
1.8 KiB
C#
86 lines
1.8 KiB
C#
using System;
|
|
using System.Collections;
|
|
|
|
using Org.BouncyCastle.Asn1;
|
|
using Org.BouncyCastle.Math;
|
|
|
|
namespace Org.BouncyCastle.Asn1.Pkcs
|
|
{
|
|
public class Pbkdf2Params
|
|
: Asn1Encodable
|
|
{
|
|
internal Asn1OctetString octStr;
|
|
internal DerInteger iterationCount;
|
|
internal DerInteger keyLength;
|
|
|
|
public static Pbkdf2Params GetInstance(
|
|
object obj)
|
|
{
|
|
if (obj is Pbkdf2Params || obj == null)
|
|
{
|
|
return (Pbkdf2Params) obj;
|
|
}
|
|
|
|
if (obj is Asn1Sequence)
|
|
{
|
|
return new Pbkdf2Params((Asn1Sequence) obj);
|
|
}
|
|
|
|
throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
|
|
}
|
|
|
|
public Pbkdf2Params(
|
|
Asn1Sequence seq)
|
|
{
|
|
IEnumerator e = seq.GetEnumerator();
|
|
|
|
e.MoveNext();
|
|
octStr = (Asn1OctetString) e.Current;
|
|
|
|
e.MoveNext();
|
|
iterationCount = (DerInteger) e.Current;
|
|
|
|
if (e.MoveNext())
|
|
{
|
|
keyLength = (DerInteger) e.Current;
|
|
}
|
|
}
|
|
|
|
public Pbkdf2Params(
|
|
byte[] salt,
|
|
int iterationCount)
|
|
{
|
|
this.octStr = new DerOctetString(salt);
|
|
this.iterationCount = new DerInteger(iterationCount);
|
|
}
|
|
|
|
public byte[] GetSalt()
|
|
{
|
|
return octStr.GetOctets();
|
|
}
|
|
|
|
public BigInteger IterationCount
|
|
{
|
|
get { return iterationCount.Value; }
|
|
}
|
|
|
|
public BigInteger KeyLength
|
|
{
|
|
get { return keyLength == null ? null : keyLength.Value; }
|
|
}
|
|
|
|
public override Asn1Object ToAsn1Object()
|
|
{
|
|
Asn1EncodableVector v = new Asn1EncodableVector(
|
|
octStr, iterationCount);
|
|
|
|
if (keyLength != null)
|
|
{
|
|
v.Add(keyLength);
|
|
}
|
|
|
|
return new DerSequence(v);
|
|
}
|
|
}
|
|
}
|