//
// DiffieHellman.cs: Defines a base class from which all Diffie-Hellman implementations inherit
//
// Author:
// Pieter Philippaerts (Pieter@mentalis.org)
//
// (C) 2003 The Mentalis.org Team (http://www.mentalis.org/)
//
using System;
using System.Text;
using System.Security;
using System.Security.Cryptography;
using Mono.Math;
namespace Org.Mentalis.Security.Cryptography {
///
/// Defines a base class from which all Diffie-Hellman implementations inherit.
///
internal abstract class DiffieHellman : AsymmetricAlgorithm {
///
/// Creates an instance of the default implementation of the algorithm.
///
/// A new instance of the default implementation of DiffieHellman.
public static new DiffieHellman Create () {
return Create ("Mono.Security.Cryptography.DiffieHellman");
}
///
/// Creates an instance of the specified implementation of .
///
/// The name of the implementation of DiffieHellman to use.
/// A new instance of the specified implementation of DiffieHellman.
public static new DiffieHellman Create (string algName) {
return (DiffieHellman) CryptoConfig.CreateFromName (algName);
}
///
/// Initializes a new instance.
///
public DiffieHellman() {}
///
/// When overridden in a derived class, creates the key exchange data.
///
/// The key exchange data to be sent to the intended recipient.
public abstract byte[] CreateKeyExchange();
///
/// When overridden in a derived class, extracts secret information from the key exchange data.
///
/// The key exchange data within which the secret information is hidden.
/// The secret information derived from the key exchange data.
public abstract byte[] DecryptKeyExchange(byte[] keyEx);
///
/// When overridden in a derived class, exports the .
///
/// true to include private parameters; otherwise, false.
/// The parameters for Diffie-Hellman.
public abstract DHParameters ExportParameters (bool includePrivate);
///
/// When overridden in a derived class, imports the specified .
///
/// The parameters for Diffie-Hellman.
public abstract void ImportParameters (DHParameters parameters);
#if UNUSED
private byte[] GetNamedParam(SecurityElement se, string param) {
SecurityElement sep = se.SearchForChildByTag(param);
if (sep == null)
return null;
return Convert.FromBase64String(sep.Text);
}
#endif
///
/// Reconstructs a object from an XML string.
///
/// The XML string to use to reconstruct the DiffieHellman object.
/// One of the values in the XML string is invalid.
public override void FromXmlString (string xmlString) {
if (xmlString == null)
throw new ArgumentNullException ();
throw new NotImplementedException();
}
///
/// Creates and returns an XML string representation of the current object.
///
/// true to include private parameters; otherwise, false.
/// An XML string encoding of the current DiffieHellman object.
public override string ToXmlString (bool includePrivateParameters) {
throw new NotImplementedException();
}
}
}