未验证 提交 af88ee90 编写于 作者: K Kevin Jones 提交者: GitHub

Cache KeySizes array for EC types

Individual KeySizes instances themselves are immutable, so we can re-use instances there.
Arrays are mutable, so continue to return a copy of the array each time.
上级 331dc3a0
......@@ -35,11 +35,7 @@ internal ECDiffieHellmanAndroid(SafeEcKeyHandle ecKeyHandle)
KeySizeValue = _key.KeySize;
}
public override KeySizes[] LegalKeySizes =>
new[] {
new KeySizes(minSize: 256, maxSize: 384, skipSize: 128),
new KeySizes(minSize: 521, maxSize: 521, skipSize: 0)
};
public override KeySizes[] LegalKeySizes => s_defaultKeySizes.CloneKeySizesArray();
protected override void Dispose(bool disposing)
{
......
......@@ -66,17 +66,8 @@ private void ForceSetKeySize(int newKeySize)
KeySizeValue = newKeySize;
}
public override KeySizes[] LegalKeySizes
{
get
{
// Return the three sizes that can be explicitly set (for backwards compatibility)
return new[] {
new KeySizes(minSize: 256, maxSize: 384, skipSize: 128),
new KeySizes(minSize: 521, maxSize: 521, skipSize: 0),
};
}
}
// Return the three sizes that can be explicitly set (for backwards compatibility)
public override KeySizes[] LegalKeySizes => s_defaultKeySizes.CloneKeySizesArray();
public override byte[] DeriveKeyFromHash(
ECDiffieHellmanPublicKey otherPartyPublicKey,
......
......@@ -45,11 +45,7 @@ public ECDiffieHellmanOpenSsl(int keySize)
_key = new ECOpenSsl(this);
}
public override KeySizes[] LegalKeySizes =>
new[] {
new KeySizes(minSize: 256, maxSize: 384, skipSize: 128),
new KeySizes(minSize: 521, maxSize: 521, skipSize: 0)
};
public override KeySizes[] LegalKeySizes => s_defaultKeySizes.CloneKeySizesArray();
protected override void Dispose(bool disposing)
{
......
......@@ -27,18 +27,8 @@ internal ECDiffieHellmanSecurityTransforms(SafeSecKeyRefHandle publicKey, SafeSe
KeySizeValue = _ecc.SetKeyAndGetSize(SecKeyPair.PublicPrivatePair(publicKey, privateKey));
}
public override KeySizes[] LegalKeySizes
{
get
{
// Return the three sizes that can be explicitly set (for backwards compatibility)
return new[]
{
new KeySizes(minSize: 256, maxSize: 384, skipSize: 128),
new KeySizes(minSize: 521, maxSize: 521, skipSize: 0),
};
}
}
// Return the three sizes that can be explicitly set (for backwards compatibility)
public override KeySizes[] LegalKeySizes => s_defaultKeySizes.CloneKeySizesArray();
public override int KeySize
{
......
......@@ -68,17 +68,8 @@ private void ForceSetKeySize(int newKeySize)
KeySizeValue = newKeySize;
}
public override KeySizes[] LegalKeySizes
{
get
{
// Return the three sizes that can be explicitly set (for backwards compatibility)
return new[] {
new KeySizes(minSize: 256, maxSize: 384, skipSize: 128),
new KeySizes(minSize: 521, maxSize: 521, skipSize: 0),
};
}
}
// Return the three sizes that can be explicitly set (for backwards compatibility)
public override KeySizes[] LegalKeySizes => s_defaultKeySizes.CloneKeySizesArray();
public override byte[] SignHash(byte[] hash)
{
......
......@@ -83,16 +83,7 @@ private void ForceSetKeySize(int newKeySize)
KeySizeValue = newKeySize;
}
public override KeySizes[] LegalKeySizes
{
get
{
// Return the three sizes that can be explicitly set (for backwards compatibility)
return new[] {
new KeySizes(minSize: 256, maxSize: 384, skipSize: 128),
new KeySizes(minSize: 521, maxSize: 521, skipSize: 0),
};
}
}
// Return the three sizes that can be explicitly set (for backwards compatibility)
public override KeySizes[] LegalKeySizes => s_defaultKeySizes.CloneKeySizesArray();
}
}
......@@ -78,17 +78,8 @@ private void ForceSetKeySize(int newKeySize)
KeySizeValue = newKeySize;
}
public override KeySizes[] LegalKeySizes
{
get
{
// Return the three sizes that can be explicitly set (for backwards compatibility)
return new[] {
new KeySizes(minSize: 256, maxSize: 384, skipSize: 128),
new KeySizes(minSize: 521, maxSize: 521, skipSize: 0),
};
}
}
// Return the three sizes that can be explicitly set (for backwards compatibility)
public override KeySizes[] LegalKeySizes => s_defaultKeySizes.CloneKeySizesArray();
public override byte[] SignHash(byte[] hash)
{
......
......@@ -28,17 +28,8 @@ internal ECDsaSecurityTransforms(SafeSecKeyRefHandle publicKey, SafeSecKeyRefHan
KeySizeValue = _ecc.SetKeyAndGetSize(SecKeyPair.PublicPrivatePair(publicKey, privateKey));
}
public override KeySizes[] LegalKeySizes
{
get
{
// Return the three sizes that can be explicitly set (for backwards compatibility)
return new[] {
new KeySizes(minSize: 256, maxSize: 384, skipSize: 128),
new KeySizes(minSize: 521, maxSize: 521, skipSize: 0),
};
}
}
// Return the three sizes that can be explicitly set (for backwards compatibility)
public override KeySizes[] LegalKeySizes => s_defaultKeySizes.CloneKeySizesArray();
public override int KeySize
{
......
......@@ -19,6 +19,12 @@ public abstract class ECAlgorithm : AsymmetricAlgorithm
// ECDH and ECMQV are not valid in this context.
};
private protected static readonly KeySizes[] s_defaultKeySizes =
{
new KeySizes(minSize: 256, maxSize: 384, skipSize: 128),
new KeySizes(minSize: 521, maxSize: 521, skipSize: 0),
};
/// <summary>
/// When overridden in a derived class, exports the named or explicit <see cref="ECParameters" /> for an ECCurve.
/// If the curve has a name, the Curve property will contain named curve parameters otherwise it will contain explicit parameters.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册