Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Security / Cryptography / rsa.cs / 1 / rsa.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // RSA.cs // namespace System.Security.Cryptography { using System.Text; using System.Runtime.Serialization; using System.Security.Util; using System.Globalization; // We allow only the public components of an RSAParameters object, the Modulus and Exponent // to be serializable. [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public struct RSAParameters { public byte[] Exponent; public byte[] Modulus; [NonSerialized] public byte[] P; [NonSerialized] public byte[] Q; [NonSerialized] public byte[] DP; [NonSerialized] public byte[] DQ; [NonSerialized] public byte[] InverseQ; [NonSerialized] public byte[] D; } [System.Runtime.InteropServices.ComVisible(true)] public abstract class RSA : AsymmetricAlgorithm { // // Extending this class allows us to know that you are really implementing // an RSA key. This is required for anybody providing a new RSA key value // implemention. // // The class provides no methods, fields or anything else. Its only purpose is // as a heirarchy member for identification of algorithm. // protected RSA() { } // // public methods // new static public RSA Create() { return Create("System.Security.Cryptography.RSA"); } new static public RSA Create(String algName) { return (RSA) CryptoConfig.CreateFromName(algName); } // Apply the private key to the data. This function represents a // raw RSA operation -- no implicit depadding of the imput value abstract public byte[] DecryptValue(byte[] rgb); // Apply the public key to the data. Again, this is a raw operation, no // automatic padding. abstract public byte[] EncryptValue(byte[] rgb); // Import/export functions // We can provide a default implementation of FromXmlString because we require // every RSA implementation to implement ImportParameters // All we have to do here is parse the XML. public override void FromXmlString(String xmlString) { if (xmlString == null) throw new ArgumentNullException("xmlString"); RSAParameters rsaParams = new RSAParameters(); Parser p = new Parser(xmlString); SecurityElement topElement = p.GetTopElement(); // Modulus is always present String modulusString = topElement.SearchForTextOfLocalName("Modulus"); if (modulusString == null) { throw new CryptographicException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Cryptography_InvalidFromXmlString"),"RSA","Modulus")); } rsaParams.Modulus = Convert.FromBase64String(Utils.DiscardWhiteSpaces(modulusString)); // Exponent is always present String exponentString = topElement.SearchForTextOfLocalName("Exponent"); if (exponentString == null) { throw new CryptographicException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Cryptography_InvalidFromXmlString"),"RSA","Exponent")); } rsaParams.Exponent = Convert.FromBase64String(Utils.DiscardWhiteSpaces(exponentString)); // P is optional String pString = topElement.SearchForTextOfLocalName("P"); if (pString != null) rsaParams.P = Convert.FromBase64String(Utils.DiscardWhiteSpaces(pString)); // Q is optional String qString = topElement.SearchForTextOfLocalName("Q"); if (qString != null) rsaParams.Q = Convert.FromBase64String(Utils.DiscardWhiteSpaces(qString)); // DP is optional String dpString = topElement.SearchForTextOfLocalName("DP"); if (dpString != null) rsaParams.DP = Convert.FromBase64String(Utils.DiscardWhiteSpaces(dpString)); // DQ is optional String dqString = topElement.SearchForTextOfLocalName("DQ"); if (dqString != null) rsaParams.DQ = Convert.FromBase64String(Utils.DiscardWhiteSpaces(dqString)); // InverseQ is optional String inverseQString = topElement.SearchForTextOfLocalName("InverseQ"); if (inverseQString != null) rsaParams.InverseQ = Convert.FromBase64String(Utils.DiscardWhiteSpaces(inverseQString)); // D is optional String dString = topElement.SearchForTextOfLocalName("D"); if (dString != null) rsaParams.D = Convert.FromBase64String(Utils.DiscardWhiteSpaces(dString)); ImportParameters(rsaParams); } // We can provide a default implementation of ToXmlString because we require // every RSA implementation to implement ImportParameters // If includePrivateParameters is false, this is just an XMLDSIG RSAKeyValue // clause. If includePrivateParameters is true, then we extend RSAKeyValue with // the other (private) elements. public override String ToXmlString(bool includePrivateParameters) { // From the XMLDSIG spec, RFC 3075, Section 6.4.2, an RSAKeyValue looks like this: /**/ // we extend appropriately for private components RSAParameters rsaParams = this.ExportParameters(includePrivateParameters); StringBuilder sb = new StringBuilder(); sb.Append(" "); // Add the modulus sb.Append(" "); return(sb.ToString()); } abstract public RSAParameters ExportParameters(bool includePrivateParameters); abstract public void ImportParameters(RSAParameters parameters); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // RSA.cs // namespace System.Security.Cryptography { using System.Text; using System.Runtime.Serialization; using System.Security.Util; using System.Globalization; // We allow only the public components of an RSAParameters object, the Modulus and Exponent // to be serializable. [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public struct RSAParameters { public byte[] Exponent; public byte[] Modulus; [NonSerialized] public byte[] P; [NonSerialized] public byte[] Q; [NonSerialized] public byte[] DP; [NonSerialized] public byte[] DQ; [NonSerialized] public byte[] InverseQ; [NonSerialized] public byte[] D; } [System.Runtime.InteropServices.ComVisible(true)] public abstract class RSA : AsymmetricAlgorithm { // // Extending this class allows us to know that you are really implementing // an RSA key. This is required for anybody providing a new RSA key value // implemention. // // The class provides no methods, fields or anything else. Its only purpose is // as a heirarchy member for identification of algorithm. // protected RSA() { } // // public methods // new static public RSA Create() { return Create("System.Security.Cryptography.RSA"); } new static public RSA Create(String algName) { return (RSA) CryptoConfig.CreateFromName(algName); } // Apply the private key to the data. This function represents a // raw RSA operation -- no implicit depadding of the imput value abstract public byte[] DecryptValue(byte[] rgb); // Apply the public key to the data. Again, this is a raw operation, no // automatic padding. abstract public byte[] EncryptValue(byte[] rgb); // Import/export functions // We can provide a default implementation of FromXmlString because we require // every RSA implementation to implement ImportParameters // All we have to do here is parse the XML. public override void FromXmlString(String xmlString) { if (xmlString == null) throw new ArgumentNullException("xmlString"); RSAParameters rsaParams = new RSAParameters(); Parser p = new Parser(xmlString); SecurityElement topElement = p.GetTopElement(); // Modulus is always present String modulusString = topElement.SearchForTextOfLocalName("Modulus"); if (modulusString == null) { throw new CryptographicException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Cryptography_InvalidFromXmlString"),"RSA","Modulus")); } rsaParams.Modulus = Convert.FromBase64String(Utils.DiscardWhiteSpaces(modulusString)); // Exponent is always present String exponentString = topElement.SearchForTextOfLocalName("Exponent"); if (exponentString == null) { throw new CryptographicException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Cryptography_InvalidFromXmlString"),"RSA","Exponent")); } rsaParams.Exponent = Convert.FromBase64String(Utils.DiscardWhiteSpaces(exponentString)); // P is optional String pString = topElement.SearchForTextOfLocalName("P"); if (pString != null) rsaParams.P = Convert.FromBase64String(Utils.DiscardWhiteSpaces(pString)); // Q is optional String qString = topElement.SearchForTextOfLocalName("Q"); if (qString != null) rsaParams.Q = Convert.FromBase64String(Utils.DiscardWhiteSpaces(qString)); // DP is optional String dpString = topElement.SearchForTextOfLocalName("DP"); if (dpString != null) rsaParams.DP = Convert.FromBase64String(Utils.DiscardWhiteSpaces(dpString)); // DQ is optional String dqString = topElement.SearchForTextOfLocalName("DQ"); if (dqString != null) rsaParams.DQ = Convert.FromBase64String(Utils.DiscardWhiteSpaces(dqString)); // InverseQ is optional String inverseQString = topElement.SearchForTextOfLocalName("InverseQ"); if (inverseQString != null) rsaParams.InverseQ = Convert.FromBase64String(Utils.DiscardWhiteSpaces(inverseQString)); // D is optional String dString = topElement.SearchForTextOfLocalName("D"); if (dString != null) rsaParams.D = Convert.FromBase64String(Utils.DiscardWhiteSpaces(dString)); ImportParameters(rsaParams); } // We can provide a default implementation of ToXmlString because we require // every RSA implementation to implement ImportParameters // If includePrivateParameters is false, this is just an XMLDSIG RSAKeyValue // clause. If includePrivateParameters is true, then we extend RSAKeyValue with // the other (private) elements. public override String ToXmlString(bool includePrivateParameters) { // From the XMLDSIG spec, RFC 3075, Section 6.4.2, an RSAKeyValue looks like this: /*"+Convert.ToBase64String(rsaParams.Modulus)+" "); // Add the exponent sb.Append(""+Convert.ToBase64String(rsaParams.Exponent)+" "); if (includePrivateParameters) { // Add the private components sb.Append(""+Convert.ToBase64String(rsaParams.P)+"
"); sb.Append(""+Convert.ToBase64String(rsaParams.Q)+""); sb.Append(""+Convert.ToBase64String(rsaParams.DP)+" "); sb.Append(""+Convert.ToBase64String(rsaParams.DQ)+" "); sb.Append(""+Convert.ToBase64String(rsaParams.InverseQ)+" "); sb.Append(""+Convert.ToBase64String(rsaParams.D)+" "); } sb.Append("*/ // we extend appropriately for private components RSAParameters rsaParams = this.ExportParameters(includePrivateParameters); StringBuilder sb = new StringBuilder(); sb.Append(" "); // Add the modulus sb.Append(" "); return(sb.ToString()); } abstract public RSAParameters ExportParameters(bool includePrivateParameters); abstract public void ImportParameters(RSAParameters parameters); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007."+Convert.ToBase64String(rsaParams.Modulus)+" "); // Add the exponent sb.Append(""+Convert.ToBase64String(rsaParams.Exponent)+" "); if (includePrivateParameters) { // Add the private components sb.Append(""+Convert.ToBase64String(rsaParams.P)+"
"); sb.Append(""+Convert.ToBase64String(rsaParams.Q)+""); sb.Append(""+Convert.ToBase64String(rsaParams.DP)+" "); sb.Append(""+Convert.ToBase64String(rsaParams.DQ)+" "); sb.Append(""+Convert.ToBase64String(rsaParams.InverseQ)+" "); sb.Append(""+Convert.ToBase64String(rsaParams.D)+" "); } sb.Append("
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AuthenticationModuleElementCollection.cs
- Rect.cs
- TextDecorationUnitValidation.cs
- Point3D.cs
- ContractSearchPattern.cs
- CodeDesigner.cs
- UmAlQuraCalendar.cs
- XamlTreeBuilderBamlRecordWriter.cs
- ActivityDesignerLayoutSerializers.cs
- HttpModulesSection.cs
- ToolStripButton.cs
- securestring.cs
- CompositeFontFamily.cs
- InputBinding.cs
- DataProviderNameConverter.cs
- SafeRightsManagementQueryHandle.cs
- ActivityTypeResolver.xaml.cs
- AdornerDecorator.cs
- CompositeScriptReferenceEventArgs.cs
- FillBehavior.cs
- WebPartMinimizeVerb.cs
- AmbiguousMatchException.cs
- SubMenuStyleCollection.cs
- SecurityDocument.cs
- Context.cs
- SamlAuthorizationDecisionClaimResource.cs
- MultiPropertyDescriptorGridEntry.cs
- Emitter.cs
- SqlRowUpdatingEvent.cs
- SystemThemeKey.cs
- UpdateCompiler.cs
- ClrPerspective.cs
- TrackingStringDictionary.cs
- SoapAttributeOverrides.cs
- GridViewPageEventArgs.cs
- SetterBase.cs
- DynamicMethod.cs
- TaskResultSetter.cs
- DotNetATv1WindowsLogEntrySerializer.cs
- XmlException.cs
- Matrix.cs
- RemotingService.cs
- RadioButtonList.cs
- ExecutionContext.cs
- AdornerPresentationContext.cs
- RadialGradientBrush.cs
- ZipIOExtraFieldZip64Element.cs
- ModelItemCollection.cs
- WebHostScriptMappingsInstallComponent.cs
- MaskInputRejectedEventArgs.cs
- ZoneButton.cs
- ControlBindingsCollection.cs
- CodeCastExpression.cs
- FontUnitConverter.cs
- ExpressionBuilderContext.cs
- HyperlinkAutomationPeer.cs
- ScalarConstant.cs
- TraceData.cs
- PostBackTrigger.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- FormsAuthenticationCredentials.cs
- ValueTypePropertyReference.cs
- UpdateTracker.cs
- PropertyRecord.cs
- CaseInsensitiveOrdinalStringComparer.cs
- TextRangeEditTables.cs
- MetadataSerializer.cs
- IssuedTokenServiceCredential.cs
- EventLogHandle.cs
- CommandDesigner.cs
- TraceSection.cs
- Form.cs
- DataServices.cs
- DateTime.cs
- SchemaNamespaceManager.cs
- TogglePatternIdentifiers.cs
- MDIClient.cs
- DefaultSerializationProviderAttribute.cs
- DateTimeOffsetAdapter.cs
- ControlIdConverter.cs
- RuleSettings.cs
- PreviewPageInfo.cs
- XmlSchemaSimpleTypeUnion.cs
- ListViewInsertedEventArgs.cs
- PackagingUtilities.cs
- MenuCommands.cs
- ProjectionCamera.cs
- OdbcConnectionString.cs
- XmlDataSource.cs
- CommandEventArgs.cs
- HostingEnvironmentException.cs
- ReferencedCollectionType.cs
- ResourceReferenceExpressionConverter.cs
- odbcmetadatafactory.cs
- DependencyObject.cs
- ConfigXmlAttribute.cs
- DataSourceViewSchemaConverter.cs
- GifBitmapDecoder.cs
- XMLUtil.cs
- StringResourceManager.cs