My Project 2.4.4
C++ Distributed Hash Table
Loading...
Searching...
No Matches
Classes | Typedefs | Enumerations | Functions
dht::crypto Namespace Reference

Classes

struct  Certificate
 
class  CertificateRequest
 
class  CryptoException
 
class  DecryptError
 
class  OcspRequest
 
class  OcspResponse
 
struct  PrivateKey
 
struct  PublicKey
 
class  RevocationList
 
class  secure_vector
 
struct  TrustList
 

Typedefs

using Identity = std::pair< std::shared_ptr< PrivateKey >, std::shared_ptr< Certificate > >
 
using SecureBlob = secure_vector< uint8_t >
 
using random_device = std::random_device
 

Enumerations

enum class  NameType {
  UNKNOWN = 0 , RFC822 , DNS , URI ,
  IP
}
 

Functions

OPENDHT_PUBLIC Identity generateIdentity (const std::string &name, const Identity &ca, unsigned key_length, bool is_ca)
 
OPENDHT_PUBLIC Identity generateIdentity (const std::string &name="dhtnode", const Identity &ca={}, unsigned key_length=4096)
 
OPENDHT_PUBLIC Identity generateEcIdentity (const std::string &name, const Identity &ca, bool is_ca)
 
OPENDHT_PUBLIC Identity generateEcIdentity (const std::string &name="dhtnode", const Identity &ca={})
 
OPENDHT_PUBLIC void saveIdentity (const Identity &id, const std::string &path, const std::string &privkey_password={})
 
OPENDHT_PUBLIC Blob hash (const Blob &data, size_t hash_length=512/8)
 
OPENDHT_PUBLIC void hash (const uint8_t *data, size_t data_length, uint8_t *hash, size_t hash_length)
 
OPENDHT_PUBLIC Blob stretchKey (const std::string &password, Blob &salt, size_t key_length=512/8)
 
OPENDHT_PUBLIC Blob aesEncrypt (const uint8_t *data, size_t data_length, const Blob &key)
 
OPENDHT_PUBLIC Blob aesEncrypt (const Blob &data, const Blob &key)
 
OPENDHT_PUBLIC Blob aesEncrypt (const Blob &data, const std::string &password)
 
OPENDHT_PUBLIC Blob aesDecrypt (const uint8_t *data, size_t data_length, const Blob &key)
 
OPENDHT_PUBLIC Blob aesDecrypt (const Blob &data, const Blob &key)
 
OPENDHT_PUBLIC Blob aesDecrypt (const uint8_t *data, size_t data_length, const std::string &password)
 
OPENDHT_PUBLIC Blob aesDecrypt (const Blob &data, const std::string &password)
 
template<class T = std::mt19937, std::size_t N = T::state_size>
auto getSeededRandomEngine () -> typename std::enable_if<!!N, T >::type
 

Detailed Description

Contains all crypto primitives

Typedef Documentation

◆ Identity

using dht::crypto::Identity = typedef std::pair<std::shared_ptr<PrivateKey>, std::shared_ptr<Certificate> >

Definition at line 70 of file crypto.h.

◆ random_device

using dht::crypto::random_device = typedef std::random_device

Definition at line 106 of file rng.h.

◆ SecureBlob

using dht::crypto::SecureBlob = typedef secure_vector<uint8_t>

Definition at line 734 of file crypto.h.

Enumeration Type Documentation

◆ NameType

enum class dht::crypto::NameType
strong

Definition at line 283 of file crypto.h.

Function Documentation

◆ aesDecrypt() [1/3]

OPENDHT_PUBLIC Blob dht::crypto::aesDecrypt ( const Blob data,
const Blob key 
)
inline

Definition at line 785 of file crypto.h.

◆ aesDecrypt() [2/3]

OPENDHT_PUBLIC Blob dht::crypto::aesDecrypt ( const Blob data,
const std::string &  password 
)
inline

Definition at line 787 of file crypto.h.

◆ aesDecrypt() [3/3]

OPENDHT_PUBLIC Blob dht::crypto::aesDecrypt ( const uint8_t *  data,
size_t  data_length,
const Blob key 
)

AES-GCM decryption.

◆ aesEncrypt() [1/2]

OPENDHT_PUBLIC Blob dht::crypto::aesEncrypt ( const Blob data,
const Blob key 
)
inline

Definition at line 776 of file crypto.h.

◆ aesEncrypt() [2/2]

OPENDHT_PUBLIC Blob dht::crypto::aesEncrypt ( const uint8_t *  data,
size_t  data_length,
const Blob key 
)

AES-GCM encryption. Key must be 128, 192 or 256 bits long (16, 24 or 32 bytes).

◆ generateIdentity()

OPENDHT_PUBLIC Identity dht::crypto::generateIdentity ( const std::string &  name,
const Identity &  ca,
unsigned  key_length,
bool  is_ca 
)

Generate an RSA key pair (4096 bits) and a certificate.

Parameters
namethe name used in the generated certificate
caif set, the certificate authority that will sign the generated certificate. If not set, the generated certificate will be a self-signed CA.
key_lengthstength of the generated private key (bits).

◆ getSeededRandomEngine()

template<class T = std::mt19937, std::size_t N = T::state_size>
auto dht::crypto::getSeededRandomEngine ( ) -> typename std::enable_if<!!N, T>::type

Definition at line 114 of file rng.h.

◆ hash()

OPENDHT_PUBLIC Blob dht::crypto::hash ( const Blob data,
size_t  hash_length = 512/8 
)

Performs SHA512, SHA256 or SHA1, depending on hash_length. Attempts to choose an hash function with output size of at least hash_length bytes, Current implementation will use SHA1 for hash_length up to 20 bytes, will use SHA256 for hash_length up to 32 bytes, will use SHA512 for hash_length of 33 bytes and more.

◆ stretchKey()

OPENDHT_PUBLIC Blob dht::crypto::stretchKey ( const std::string &  password,
Blob salt,
size_t  key_length = 512/8 
)

Generates an encryption key from a text password, making the key longer to bruteforce. The generated key also depends on a unique salt value of any size, that can be transmitted in clear, and will be generated if not provided (32 bytes).