上海虹口龙之梦项目
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.
 
 
 
 

123 lines
3.5 KiB

#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
#pragma warning disable
using System;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Macs;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters
{
/**
* Parameter class for the HkdfBytesGenerator class.
*/
public class HkdfParameters
: IDerivationParameters
{
private readonly byte[] ikm;
private readonly bool skipExpand;
private readonly byte[] salt;
private readonly byte[] info;
private HkdfParameters(byte[] ikm, bool skip, byte[] salt, byte[] info)
{
if (ikm == null)
throw new ArgumentNullException("ikm");
this.ikm = Arrays.Clone(ikm);
this.skipExpand = skip;
if (salt == null || salt.Length == 0)
{
this.salt = null;
}
else
{
this.salt = Arrays.Clone(salt);
}
if (info == null)
{
this.info = new byte[0];
}
else
{
this.info = Arrays.Clone(info);
}
}
/**
* Generates parameters for HKDF, specifying both the optional salt and
* optional info. Step 1: Extract won't be skipped.
*
* @param ikm the input keying material or seed
* @param salt the salt to use, may be null for a salt for hashLen zeros
* @param info the info to use, may be null for an info field of zero bytes
*/
public HkdfParameters(byte[] ikm, byte[] salt, byte[] info)
: this(ikm, false, salt, info)
{
}
/**
* Factory method that makes the HKDF skip the extract part of the key
* derivation function.
*
* @param ikm the input keying material or seed, directly used for step 2:
* Expand
* @param info the info to use, may be null for an info field of zero bytes
* @return HKDFParameters that makes the implementation skip step 1
*/
public static HkdfParameters SkipExtractParameters(byte[] ikm, byte[] info)
{
return new HkdfParameters(ikm, true, null, info);
}
public static HkdfParameters DefaultParameters(byte[] ikm)
{
return new HkdfParameters(ikm, false, null, null);
}
/**
* Returns the input keying material or seed.
*
* @return the keying material
*/
public virtual byte[] GetIkm()
{
return Arrays.Clone(ikm);
}
/**
* Returns if step 1: extract has to be skipped or not
*
* @return true for skipping, false for no skipping of step 1
*/
public virtual bool SkipExtract
{
get { return skipExpand; }
}
/**
* Returns the salt, or null if the salt should be generated as a byte array
* of HashLen zeros.
*
* @return the salt, or null
*/
public virtual byte[] GetSalt()
{
return Arrays.Clone(salt);
}
/**
* Returns the info field, which may be empty (null is converted to empty).
*
* @return the info field, never null
*/
public virtual byte[] GetInfo()
{
return Arrays.Clone(info);
}
}
}
#pragma warning restore
#endif