public void Rfc23279TrySignDataUnderMax() { KeyDescription keyDescription = GetKey(); ECDsa key = (ECDsa)keyDescription.Key; const DSASignatureFormat SignatureFormat = DSASignatureFormat.Rfc3279DerSequence; // Make secp521r1 (7/16 chance of being smaller) and mod-8 keys (3/4 chance of being smaller) // have the same 1-in-a-billion chance of failure. int retryCount = keyDescription.FieldSizeInBits % 8 == 1 ? 36 : 15; HashAlgorithmName hashAlgorithm = HashAlgorithmName.SHA1; int expectedSize = GetExpectedSize(keyDescription.FieldSizeInBits); int maxSize = key.GetMaxSignatureSize(DSASignatureFormat.Rfc3279DerSequence); Assert.True(expectedSize < maxSize, "expectedSize < maxSize"); byte[] signature = new byte[expectedSize]; for (int i = 0; i < retryCount; i++) { if (key.TrySignData(Array.Empty <byte>(), signature, hashAlgorithm, SignatureFormat, out int written)) { return; } Assert.Equal(0, written); } Assert.True(false, $"TrySignData eventually succeeds with a {expectedSize}/{maxSize}-byte destination"); }
public void Rfc23279TrySignHashUnderMax() { KeyDescription keyDescription = GetKey(); ECDsa key = (ECDsa)keyDescription.Key; const DSASignatureFormat SignatureFormat = DSASignatureFormat.Rfc3279DerSequence; // Make secp521r1 (7/16 chance of being smaller) and mod-8 keys (3/4 chance of being smaller) // have the same 1-in-a-billion chance of failure. int retryCount = keyDescription.FieldSizeInBits % 8 == 1 ? 36 : 15; byte[] hash = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; int expectedSize = GetExpectedSize(keyDescription.FieldSizeInBits); int maxSize = key.GetMaxSignatureSize(DSASignatureFormat.Rfc3279DerSequence); Assert.True(expectedSize < maxSize, "expectedSize < maxSize"); byte[] signature = new byte[expectedSize]; for (int i = 0; i < retryCount; i++) { if (key.TrySignHash(hash, signature, SignatureFormat, out int written)) { return; } Assert.Equal(0, written); } Assert.True(false, $"TrySignHash eventually succeeds with a {expectedSize}/{maxSize}-byte destination"); }
public void Rfc23279TrySignDataUnderMax() { KeyDescription keyDescription = GetKey(); ECDsa key = (ECDsa)keyDescription.Key; const DSASignatureFormat SignatureFormat = DSASignatureFormat.Rfc3279DerSequence; const int RetryCount = 10; HashAlgorithmName hashAlgorithm = HashAlgorithmName.SHA1; int expectedSize = GetExpectedSize(keyDescription.FieldSizeInBits); int maxSize = key.GetMaxSignatureSize(DSASignatureFormat.Rfc3279DerSequence); Assert.True(expectedSize < maxSize, "expectedSize < maxSize"); byte[] signature = new byte[expectedSize]; for (int i = 0; i < RetryCount; i++) { if (key.TrySignData(Array.Empty <byte>(), signature, hashAlgorithm, SignatureFormat, out int written)) { return; } Assert.Equal(0, written); } Assert.True(false, $"TrySignData eventually succeeds with a {expectedSize}/{maxSize}-byte destination"); }
protected override byte[] SignData( KeyDescription key, byte[] data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat) { ECDsa dsa = (ECDsa)key.Key; byte[] predictedMax = new byte[dsa.GetMaxSignatureSize(signatureFormat)]; Assert.True( dsa.TrySignData(data, predictedMax, hashAlgorithm, signatureFormat, out int written), "TrySignData with a GetMaxSignatureSize buffer"); if (signatureFormat == DSASignatureFormat.IeeeP1363FixedFieldConcatenation) { // GetMaxSignatureSize should be exactly accurate for P1363. Assert.Equal(predictedMax.Length, written); } if (written == predictedMax.Length) { return(predictedMax); } return(predictedMax.AsSpan(0, written).ToArray()); }
public void Rfc23279TrySignHashUnderMax() { KeyDescription keyDescription = GetKey(); ECDsa key = (ECDsa)keyDescription.Key; const DSASignatureFormat SignatureFormat = DSASignatureFormat.Rfc3279DerSequence; const int RetryCount = 10; byte[] hash = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; int expectedSize = GetExpectedSize(keyDescription.FieldSizeInBits); int maxSize = key.GetMaxSignatureSize(DSASignatureFormat.Rfc3279DerSequence); Assert.True(expectedSize < maxSize, "expectedSize < maxSize"); byte[] signature = new byte[expectedSize]; for (int i = 0; i < RetryCount; i++) { if (key.TrySignHash(hash, signature, SignatureFormat, out int written)) { return; } Assert.Equal(0, written); } Assert.True(false, $"TrySignHash eventually succeeds with a {expectedSize}/{maxSize}-byte destination"); }