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.4 KiB
113 lines
2.4 KiB
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) |
|
#pragma warning disable |
|
using System; |
|
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters; |
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities; |
|
|
|
//import javax.crypto.interfaces.PBEKey; |
|
|
|
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cms |
|
{ |
|
public abstract class CmsPbeKey |
|
// TODO Create an equivalent interface somewhere? |
|
// : PBEKey |
|
: ICipherParameters |
|
{ |
|
internal readonly char[] password; |
|
internal readonly byte[] salt; |
|
internal readonly int iterationCount; |
|
|
|
|
|
public CmsPbeKey( |
|
string password, |
|
byte[] salt, |
|
int iterationCount) |
|
: this(password.ToCharArray(), salt, iterationCount) |
|
{ |
|
} |
|
|
|
|
|
public CmsPbeKey( |
|
string password, |
|
AlgorithmIdentifier keyDerivationAlgorithm) |
|
: this(password.ToCharArray(), keyDerivationAlgorithm) |
|
{ |
|
} |
|
|
|
public CmsPbeKey( |
|
char[] password, |
|
byte[] salt, |
|
int iterationCount) |
|
{ |
|
this.password = (char[])password.Clone(); |
|
this.salt = Arrays.Clone(salt); |
|
this.iterationCount = iterationCount; |
|
} |
|
|
|
public CmsPbeKey( |
|
char[] password, |
|
AlgorithmIdentifier keyDerivationAlgorithm) |
|
{ |
|
if (!keyDerivationAlgorithm.Algorithm.Equals(PkcsObjectIdentifiers.IdPbkdf2)) |
|
throw new ArgumentException("Unsupported key derivation algorithm: " |
|
+ keyDerivationAlgorithm.Algorithm); |
|
|
|
Pbkdf2Params kdfParams = Pbkdf2Params.GetInstance( |
|
keyDerivationAlgorithm.Parameters.ToAsn1Object()); |
|
|
|
this.password = (char[])password.Clone(); |
|
this.salt = kdfParams.GetSalt(); |
|
this.iterationCount = kdfParams.IterationCount.IntValue; |
|
} |
|
|
|
~CmsPbeKey() |
|
{ |
|
Array.Clear(this.password, 0, this.password.Length); |
|
} |
|
|
|
|
|
public string Password |
|
{ |
|
get { return new string(password); } |
|
} |
|
|
|
public byte[] Salt |
|
{ |
|
get { return Arrays.Clone(salt); } |
|
} |
|
|
|
|
|
public byte[] GetSalt() |
|
{ |
|
return Salt; |
|
} |
|
|
|
public int IterationCount |
|
{ |
|
get { return iterationCount; } |
|
} |
|
|
|
public string Algorithm |
|
{ |
|
get { return "PKCS5S2"; } |
|
} |
|
|
|
public string Format |
|
{ |
|
get { return "RAW"; } |
|
} |
|
|
|
public byte[] GetEncoded() |
|
{ |
|
return null; |
|
} |
|
|
|
internal abstract KeyParameter GetEncoded(string algorithmOid); |
|
} |
|
} |
|
#pragma warning restore |
|
#endif
|
|
|