/// <summary> /// Gets the largest size, in bytes, for a signature produced by this key in the indicated format. /// </summary> /// <param name="signatureFormat">The encoding format for a signature.</param> /// <returns> /// The largest size, in bytes, for a signature produced by this key in the indicated format. /// </returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> public int GetMaxSignatureSize(DSASignatureFormat signatureFormat) { int fieldSizeBits = KeySize; if (fieldSizeBits == 0) { // Coerce the key/key-size into existence ExportParameters(false); fieldSizeBits = KeySize; // This implementation of ECDsa doesn't set KeySize, we can't if (fieldSizeBits == 0) { throw new NotSupportedException(SR.Cryptography_InvalidKeySize); } } switch (signatureFormat) { case DSASignatureFormat.IeeeP1363FixedFieldConcatenation: return(AsymmetricAlgorithmHelpers.BitsToBytes(fieldSizeBits) * 2); case DSASignatureFormat.Rfc3279DerSequence: return(AsymmetricAlgorithmHelpers.GetMaxDerSignatureSize(fieldSizeBits)); default: throw new ArgumentOutOfRangeException(nameof(signatureFormat)); } }
/// <summary> /// Gets the largest size, in bytes, for a signature produced by this key in the indicated format. /// </summary> /// <param name="signatureFormat">The encoding format for a signature.</param> /// <returns> /// The largest size, in bytes, for a signature produced by this key in the indicated format. /// </returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> public int GetMaxSignatureSize(DSASignatureFormat signatureFormat) { DSAParameters dsaParameters = ExportParameters(false); int qLength = dsaParameters.Q !.Length; switch (signatureFormat) { case DSASignatureFormat.IeeeP1363FixedFieldConcatenation: return(qLength * 2); case DSASignatureFormat.Rfc3279DerSequence: return(AsymmetricAlgorithmHelpers.GetMaxDerSignatureSize(fieldSizeBits: qLength * 8)); default: throw new ArgumentOutOfRangeException(nameof(signatureFormat)); } }