# [−][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.

## Implementations

### `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) -> Option<usize>`[src]

Returns the length of the public key in bits.

For finite field crypto this returns the size of the field we operate in, for ECC it returns `Curve::bits()`.

Note: 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.

Returns `None` for unknown keys and curves.

#### `pub fn algo(&self) -> Option<PublicKeyAlgorithm>`[src]

Returns, if known, the public-key algorithm for this public key.

### `impl PublicKey`[src]

#### `pub fn parse<T: AsRef<[u8]>>(algo: PublicKeyAlgorithm, buf: T) -> Result<Self>`[src]

Parses a set of OpenPGP MPIs representing a public key.

See Section 3.2 of RFC 4880 for details.

## Trait Implementations

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

#### `fn hash(&self, hash: &mut Context)`[src]

Update the Hash with a hash of the MPIs.

## Blanket Implementations

### `impl<T> ToOwned for T where    T: Clone, `[src]

#### `type Owned = T`

The resulting type after obtaining ownership.

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

#### `type Error = Infallible`

The type returned in the event of a conversion error.

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

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

The type returned in the event of a conversion error.