# [−][src]Crate openpgp_dr

An implementation of Signal's Double-Ratchet protocol for use in OpenPGP.

This algorithm has been popularized by Signal. It uses a series of Cryptographic Ratchets to derive session keys. See the Double Ratchet Algorithm Spec for a full description.

This implementation is geared towards use in OpenPGP. It does not encrypt messages, it merely derives the session keys.

# Examples

This example demonstrates how to generate a pre-key and initialize two Double Ratchets.

use openpgp_dr::cv25519::{PreKeyPair, RatchetHalfOpen, Ratchet}; // Generate a pre-key for Bob. let bob_prekey_pair = PreKeyPair::new()?; // The public half of that pair is communicated to Alice. let bob_prekey = bob_prekey_pair.pre_key(); // Now, Alice can start initializing her Ratchets. let mut alice = RatchetHalfOpen::new(bob_prekey)?; // And she can immediately start encrypting messages. let (header, mk) = alice.encrypt()?; // Now, Bob can initialize his Ratchets, and in the process // decrypt the first message. let (mut bob, mk_) = Ratchet::new(bob_prekey_pair, header)?; assert_eq!(mk, mk_); // Bob replies. let (header, mk) = bob.encrypt()?; // And Alice decrypts, finalizing her initialization in the process. let (alice, mk_) = alice.decrypt(header)?; assert_eq!(mk, mk_); // All ratchets are fully initialized at this point.

## Modules

cv25519 | Double Ratchet using Diffie-Hellman over Cv25519, HKDF with SHA256, and HMAC with SHA256. |

## Structs

Header | Communicates new Diffie-Hellman parameter and sequence numbers. |

PreKey | The part of the pre-key pair to be communicated to the peer. |

PreKeyPair | Diffie-Hellman parameters and shared secret. |

Ratchet | A fully-initialized Double Ratchet. |

RatchetHalfOpen | A half-initialized Double Ratchet. |

## Traits

DH | Abstraction for the Diffie-Hellman key exchange. |

KdfCK | Abstraction for the key derivation function used in the symmetric-key ratchets. |

KdfRK | Abstraction for the key derivation function used in the Diffie-Hellman ratchet. |

## Type Definitions

Key | Message key. |