memory-private-key-storage.hpp
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
22 #ifndef NDN_MEMORY_PRIVATE_KEY_STORAGE_HPP
23 #define NDN_MEMORY_PRIVATE_KEY_STORAGE_HPP
24 
25 #include <map>
26 #include "private-key-storage.hpp"
27 
28 struct rsa_st;
29 struct ec_key_st;
30 
31 namespace ndn {
32 
38 public:
42  virtual
44 
52  void
54  (const Name& keyName, KeyType keyType, const uint8_t* publicKeyDer,
55  size_t publicKeyDerLength);
56 
61  void
62  DEPRECATED_IN_NDN_CPP setPublicKeyForKeyName
63  (const Name& keyName, const uint8_t* publicKeyDer, size_t publicKeyDerLength)
64  {
65  setPublicKeyForKeyName(keyName, KEY_TYPE_RSA, publicKeyDer, publicKeyDerLength);
66  }
67 
75  void
77  (const Name& keyName, KeyType keyType, const uint8_t* privateKeyDer,
78  size_t privateKeyDerLength);
79 
84  void
85  DEPRECATED_IN_NDN_CPP setPrivateKeyForKeyName
86  (const Name& keyName, const uint8_t* privateKeyDer, size_t privateKeyDerLength)
87  {
88  setPrivateKeyForKeyName(keyName, KEY_TYPE_RSA, privateKeyDer, privateKeyDerLength);
89  }
90 
100  void
102  (const Name& keyName, KeyType keyType, const uint8_t* publicKeyDer,
103  size_t publicKeyDerLength, const uint8_t* privateKeyDer,
104  size_t privateKeyDerLength)
105  {
106  setPublicKeyForKeyName(keyName, keyType, publicKeyDer, publicKeyDerLength);
107  setPrivateKeyForKeyName(keyName, keyType, privateKeyDer, privateKeyDerLength);
108  }
109 
114  void
115  DEPRECATED_IN_NDN_CPP setKeyPairForKeyName
116  (const Name& keyName, const uint8_t* publicKeyDer, size_t publicKeyDerLength,
117  const uint8_t* privateKeyDer, size_t privateKeyDerLength)
118  {
120  (keyName, KEY_TYPE_RSA, publicKeyDer, publicKeyDerLength, privateKeyDer,
121  privateKeyDerLength);
122  }
123 
129  virtual void
130  generateKeyPair(const Name& keyName, const KeyParams& params);
131 
136  virtual void
137  deleteKeyPair(const Name& keyName);
138 
144  virtual ptr_lib::shared_ptr<PublicKey>
145  getPublicKey(const Name& keyName);
146 
155  virtual Blob
156  sign(const uint8_t *data, size_t dataLength, const Name& keyName, DigestAlgorithm digestAlgorithm);
157 
166  virtual Blob
167  decrypt(const Name& keyName, const uint8_t* data, size_t dataLength, bool isSymmetric);
168 
177  virtual Blob
178  encrypt(const Name& keyName, const uint8_t* data, size_t dataLength, bool isSymmetric);
179 
185  virtual void
186  generateKey(const Name& keyName, const KeyParams& params);
187 
194  virtual bool
195  doesKeyExist(const Name& keyName, KeyClass keyClass);
196 
197 private:
201  class PrivateKey {
202  public:
203  PrivateKey(KeyType keyType, const uint8_t* keyDer, size_t keyDerLength);
204 
205  ~PrivateKey();
206 
207  KeyType getKeyType() const { return keyType_; }
208 
209  struct rsa_st* getRsaPrivateKey() const { return rsaPrivateKey_; }
210 
211  struct ec_key_st* getEcPrivateKey() const { return ecPrivateKey_; }
212 
213  private:
214  KeyType keyType_;
215  struct rsa_st* rsaPrivateKey_;
216  struct ec_key_st* ecPrivateKey_;
217  };
218 
219  std::map<std::string, ptr_lib::shared_ptr<PublicKey> > publicKeyStore_;
220  std::map<std::string, ptr_lib::shared_ptr<PrivateKey> > privateKeyStore_;
221 };
222 
223 }
224 
225 #endif
Copyright (C) 2013-2016 Regents of the University of California.
Definition: common.hpp:35
virtual Blob encrypt(const Name &keyName, const uint8_t *data, size_t dataLength, bool isSymmetric)
Encrypt data.
Definition: memory-private-key-storage.cpp:226
virtual void generateKey(const Name &keyName, const KeyParams &params)
Generate a symmetric key.
Definition: memory-private-key-storage.cpp:232
virtual void generateKeyPair(const Name &keyName, const KeyParams &params)
Generate a pair of asymmetric keys.
Definition: memory-private-key-storage.cpp:62
virtual void deleteKeyPair(const Name &keyName)
Delete a pair of asymmetric keys.
Definition: memory-private-key-storage.cpp:166
virtual Blob decrypt(const Name &keyName, const uint8_t *data, size_t dataLength, bool isSymmetric)
Decrypt data.
Definition: memory-private-key-storage.cpp:220
MemoryPrivateKeyStorage extends PrivateKeyStorage to implement a simple in-memory private key store...
Definition: memory-private-key-storage.hpp:37
virtual ptr_lib::shared_ptr< PublicKey > getPublicKey(const Name &keyName)
Get the public key.
Definition: memory-private-key-storage.cpp:175
A Name holds an array of Name::Component and represents an NDN name.
Definition: name.hpp:40
void setPrivateKeyForKeyName(const Name &keyName, KeyType keyType, const uint8_t *privateKeyDer, size_t privateKeyDerLength)
Set the private key for the keyName.
Definition: memory-private-key-storage.cpp:53
A Blob holds a pointer to an immutable byte array implemented as const std::vector.
Definition: blob.hpp:42
void setPublicKeyForKeyName(const Name &keyName, KeyType keyType, const uint8_t *publicKeyDer, size_t publicKeyDerLength)
Set the public key for the keyName.
Definition: memory-private-key-storage.cpp:44
KeyParams is a base class for key parameters.
Definition: key-params.hpp:34
virtual ~MemoryPrivateKeyStorage()
The virtual destructor.
Definition: memory-private-key-storage.cpp:38
virtual Blob sign(const uint8_t *data, size_t dataLength, const Name &keyName, DigestAlgorithm digestAlgorithm)
Fetch the private key for keyName and sign the data, returning a signature Blob.
Definition: memory-private-key-storage.cpp:184
void setKeyPairForKeyName(const Name &keyName, KeyType keyType, const uint8_t *publicKeyDer, size_t publicKeyDerLength, const uint8_t *privateKeyDer, size_t privateKeyDerLength)
Set the public and private key for the keyName.
Definition: memory-private-key-storage.hpp:102
Definition: private-key-storage.hpp:40
virtual bool doesKeyExist(const Name &keyName, KeyClass keyClass)
Check if a particular key exists.
Definition: memory-private-key-storage.cpp:238