68 lines
1.9 KiB
C#
68 lines
1.9 KiB
C#
using System;
|
|
|
|
using Org.BouncyCastle.Crypto;
|
|
|
|
namespace Org.BouncyCastle.Bcpg.OpenPgp
|
|
{
|
|
/// <remarks>
|
|
/// General class to handle JCA key pairs and convert them into OpenPGP ones.
|
|
/// <p>
|
|
/// A word for the unwary, the KeyId for an OpenPGP public key is calculated from
|
|
/// a hash that includes the time of creation, if you pass a different date to the
|
|
/// constructor below with the same public private key pair the KeyIs will not be the
|
|
/// same as for previous generations of the key, so ideally you only want to do
|
|
/// this once.
|
|
/// </p>
|
|
/// </remarks>
|
|
public class PgpKeyPair
|
|
{
|
|
private readonly PgpPublicKey pub;
|
|
private readonly PgpPrivateKey priv;
|
|
|
|
public PgpKeyPair(
|
|
PublicKeyAlgorithmTag algorithm,
|
|
AsymmetricCipherKeyPair keyPair,
|
|
DateTime time)
|
|
: this(algorithm, keyPair.Public, keyPair.Private, time)
|
|
{
|
|
}
|
|
|
|
public PgpKeyPair(
|
|
PublicKeyAlgorithmTag algorithm,
|
|
AsymmetricKeyParameter pubKey,
|
|
AsymmetricKeyParameter privKey,
|
|
DateTime time)
|
|
{
|
|
this.pub = new PgpPublicKey(algorithm, pubKey, time);
|
|
this.priv = new PgpPrivateKey(privKey, pub.KeyId);
|
|
}
|
|
|
|
/// <summary>Create a key pair from a PgpPrivateKey and a PgpPublicKey.</summary>
|
|
/// <param name="pub">The public key.</param>
|
|
/// <param name="priv">The private key.</param>
|
|
public PgpKeyPair(
|
|
PgpPublicKey pub,
|
|
PgpPrivateKey priv)
|
|
{
|
|
this.pub = pub;
|
|
this.priv = priv;
|
|
}
|
|
|
|
/// <summary>The keyId associated with this key pair.</summary>
|
|
public long KeyId
|
|
{
|
|
get { return pub.KeyId; }
|
|
}
|
|
|
|
public PgpPublicKey PublicKey
|
|
{
|
|
get { return pub; }
|
|
}
|
|
|
|
public PgpPrivateKey PrivateKey
|
|
{
|
|
get { return priv; }
|
|
}
|
|
}
|
|
}
|