internal ECParameters ExportParameters(bool includePrivateParameters, int keySizeInBIts) { SecKeyPair keys = GetOrGenerateKeys(keySizeInBIts); SafeSecKeyRefHandle keyHandle = includePrivateParameters ? keys.PrivateKey : keys.PublicKey; if (keyHandle == null) { throw new CryptographicException(SR.Cryptography_OpenInvalidHandle); } DerSequenceReader keyReader = Interop.AppleCrypto.SecKeyExport(keyHandle, includePrivateParameters); ECParameters parameters = new ECParameters(); if (includePrivateParameters) { keyReader.ReadPkcs8Blob(ref parameters); } else { keyReader.ReadSubjectPublicKeyInfo(ref parameters); } int size = AsymmetricAlgorithmHelpers.BitsToBytes(keySizeInBIts); KeyBlobHelpers.PadOrTrim(ref parameters.Q.X, size); KeyBlobHelpers.PadOrTrim(ref parameters.Q.Y, size); if (includePrivateParameters) { KeyBlobHelpers.PadOrTrim(ref parameters.D, size); } return(parameters); }
public override RSAParameters ExportParameters(bool includePrivateParameters) { SecKeyPair keys = GetKeys(); SafeSecKeyRefHandle keyHandle = includePrivateParameters ? keys.PrivateKey : keys.PublicKey; if (keyHandle == null) { throw new CryptographicException(SR.Cryptography_OpenInvalidHandle); } DerSequenceReader keyReader = Interop.AppleCrypto.SecKeyExport(keyHandle, includePrivateParameters); RSAParameters parameters = new RSAParameters(); if (includePrivateParameters) { keyReader.ReadPkcs8Blob(ref parameters); } else { // When exporting a key handle opened from a certificate, it seems to // export as a PKCS#1 blob instead of an X509 SubjectPublicKeyInfo blob. // So, check for that. if (keyReader.PeekTag() == (byte)DerSequenceReader.DerTag.Integer) { keyReader.ReadPkcs1PublicBlob(ref parameters); } else { keyReader.ReadSubjectPublicKeyInfo(ref parameters); } } return(parameters); }
public override DSAParameters ExportParameters(bool includePrivateParameters) { SecKeyPair keys = GetKeys(); if (keys.PublicKey == null || (includePrivateParameters && keys.PrivateKey == null)) { throw new CryptographicException(SR.Cryptography_OpenInvalidHandle); } DSAParameters parameters = new DSAParameters(); DerSequenceReader publicKeyReader = Interop.AppleCrypto.SecKeyExport(keys.PublicKey, exportPrivate: false); publicKeyReader.ReadSubjectPublicKeyInfo(ref parameters); if (includePrivateParameters) { DerSequenceReader privateKeyReader = Interop.AppleCrypto.SecKeyExport(keys.PrivateKey, exportPrivate: true); privateKeyReader.ReadPkcs8Blob(ref parameters); } KeyBlobHelpers.TrimPaddingByte(ref parameters.P); KeyBlobHelpers.TrimPaddingByte(ref parameters.Q); KeyBlobHelpers.PadOrTrim(ref parameters.G, parameters.P.Length); KeyBlobHelpers.PadOrTrim(ref parameters.Y, parameters.P.Length); if (includePrivateParameters) { KeyBlobHelpers.PadOrTrim(ref parameters.X, parameters.Q.Length); } return(parameters); }