# [−][src]Enum sequoia_openpgp::crypto::mpis::PublicKey

```pub enum PublicKey {
RSA {
e: MPI,
n: MPI,
},
DSA {
p: MPI,
q: MPI,
g: MPI,
y: MPI,
},
Elgamal {
p: MPI,
g: MPI,
y: MPI,
},
EdDSA {
curve: Curve,
q: MPI,
},
ECDSA {
curve: Curve,
q: MPI,
},
ECDH {
curve: Curve,
q: MPI,
hash: HashAlgorithm,
sym: SymmetricAlgorithm,
},
Unknown {
mpis: Box<[MPI]>,
rest: Box<[u8]>,
},
}```

Holds a public key.

Provides a typed and structured way of storing multiple MPIs (and the occasional elliptic curve) in packets.

## Variants

`RSA`

RSA public key.

### Fields of RSA

`e: MPI`

Public exponent

`n: MPI`

Public modulo N = pq.

`DSA`

NIST DSA public key.

### Fields of DSA

`p: MPI`

Prime of the ring Zp.

`q: MPI`

Order of `g` in Zp.

`g: MPI`

Public generator of Zp.

`y: MPI`

Public key g^x mod p.

`Elgamal`

Elgamal public key.

### Fields of Elgamal

`p: MPI`

Prime of the ring Zp.

`g: MPI`

Generator of Zp.

`y: MPI`

Public key g^x mod p.

`EdDSA`

DJBs "Twisted" Edwards curve DSA public key.

### Fields of EdDSA

`curve: Curve`

Curve we're using. Must be curve 25519.

`q: MPI`

Public point.

`ECDSA`

NISTs Elliptic curve DSA public key.

### Fields of ECDSA

`curve: Curve`

Curve we're using.

`q: MPI`

Public point.

`ECDH`

Elliptic curve Elgamal public key.

### Fields of ECDH

`curve: Curve`

Curve we're using.

`q: MPI`

Public point.

`hash: HashAlgorithm`

Hash algorithm used for key derivation.

`sym: SymmetricAlgorithm`

Algorithm used w/the derived key.

`Unknown`

Unknown number of MPIs for an unknown algorithm.

### Fields of Unknown

`mpis: Box<[MPI]>`

The successfully parsed MPIs.

`rest: Box<[u8]>`

Any data that failed to parse.

## Methods

### `impl PublicKey`[src]

#### `pub fn keygrip(&self) -> Result<Keygrip>`[src]

Computes the keygrip.

### `impl PublicKey`[src]

#### `pub fn serialized_len(&self) -> usize`[src]

Number of octets all MPIs of this instance occupy when serialized.

#### `pub fn bits(&self) -> usize`[src]

Returns the 'bits' of the public key.

For finite field crypto this returns the size of the field we operate in, for ECC it returns `Curve::bits()`. This information is useless and should not be used to gauge the security of a particular key. This function exists only because some legacy PGP application like HKP need it.

## Trait Implementations

### `impl Hash for PublicKey`[src]

#### `fn hash<H: Hash + Write>(&self, hash: &mut H)`[src]

Update the Hash with a hash of the MPIs.

### `impl SerializeInto for PublicKey`[src]

#### `fn to_vec(&self) -> Result<Vec<u8>>`[src]

Serializes the packet to a vector.

### `impl Clone for PublicKey`[src]

#### `fn clone_from(&mut self, source: &Self)`1.0.0[src]

Performs copy-assignment from `source`. Read more

### `impl Ord for PublicKey`[src]

#### `fn max(self, other: Self) -> Self`1.21.0[src]

Compares and returns the maximum of two values. Read more

#### `fn min(self, other: Self) -> Self`1.21.0[src]

Compares and returns the minimum of two values. Read more

### `impl Hash for PublicKey`[src]

#### `fn hash_slice<H>(data: &[Self], state: &mut H) where    H: Hasher, `1.3.0[src]

Feeds a slice of this type into the given [`Hasher`]. Read more

## Blanket Implementations

### `impl<T, U> TryFrom for T where    U: Into<T>, `[src]

#### `type Error = Infallible`

The type returned in the event of a conversion error.

### `impl<T, U> TryInto for T where    U: TryFrom<T>, `[src]

#### `type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.