Virgil Security Crypto library  2.2.2
VirgilOperationCipher.h
1 
37 #ifndef VIRGIL_CRYPTO_VIRGIL_SYMMETRIC_CIPHER_H
38 #define VIRGIL_CRYPTO_VIRGIL_SYMMETRIC_CIPHER_H
39 
40 #include <virgil/crypto/VirgilByteArray.h>
41 
42 #include <memory>
43 
44 namespace virgil { namespace crypto { inline namespace primitive {
45 
52 private:
53  template<class Impl>
54  struct Model;
55 public:
61  template<class Impl>
62  VirgilOperationCipher(Impl impl) : self_(std::make_shared<Model<Impl>>(std::move(impl))) {}
63 
68  size_t getKeySize() const {
69  return self_->doGetKeySize();
70  }
71 
76  size_t getNonceSize() const {
77  return self_->doGetNonceSize();
78  }
79 
90  const VirgilByteArray& plainText, const VirgilByteArray& key, const VirgilByteArray& nonce,
91  const VirgilByteArray& authData = VirgilByteArray()) const {
92 
93  return self_->doEncrypt(plainText, key, nonce, authData);
94  }
95 
106  const VirgilByteArray& cipherText, const VirgilByteArray& key, const VirgilByteArray& nonce,
107  const VirgilByteArray& authData = VirgilByteArray()) const {
108 
109  return self_->doDecrypt(cipherText, key, nonce, authData);
110  }
111 
116 
117 private:
118  struct Concept {
119  virtual size_t doGetKeySize() const = 0;
120 
121  virtual size_t doGetNonceSize() const = 0;
122 
123  virtual VirgilByteArray doEncrypt(
124  const VirgilByteArray& plainText, const VirgilByteArray& key, const VirgilByteArray& nonce,
125  const VirgilByteArray& authData) const = 0;
126 
127  virtual VirgilByteArray doDecrypt(
128  const VirgilByteArray& plainText, const VirgilByteArray& key, const VirgilByteArray& nonce,
129  const VirgilByteArray& authData) const = 0;
130  };
131 
132  template<class Impl>
133  struct Model : Concept {
134 
135  explicit Model(Impl impl) : impl_(std::move(impl)) {}
136 
137  size_t doGetKeySize() const override {
138  return impl_.getKeySize();
139  }
140 
141  size_t doGetNonceSize() const override {
142  return impl_.getNonceSize();
143  }
144 
145  VirgilByteArray doEncrypt(
146  const VirgilByteArray& plainText, const VirgilByteArray& key, const VirgilByteArray& nonce,
147  const VirgilByteArray& authData) const override {
148  return impl_.encrypt(plainText, key, nonce, authData);
149  }
150 
151  VirgilByteArray doDecrypt(
152  const VirgilByteArray& plainText, const VirgilByteArray& key, const VirgilByteArray& nonce,
153  const VirgilByteArray& authData) const override {
154  return impl_.decrypt(plainText, key, nonce, authData);
155  }
156 
157  private:
158  Impl impl_;
159  };
160 
161 private:
162  std::shared_ptr<const Concept> self_;
163 };
164 
165 }}}
166 
167 #endif //VIRGIL_CRYPTO_VIRGIL_SYMMETRIC_CIPHER_H
static VirgilOperationCipher getDefault()
Return default implementation.
Define proxy interface for the Symmetric Cipher functionality.
Definition: VirgilOperationCipher.h:51
Definition: VirgilHash.h:265
VirgilByteArray decrypt(const VirgilByteArray &cipherText, const VirgilByteArray &key, const VirgilByteArray &nonce, const VirgilByteArray &authData=VirgilByteArray()) const
Decrypt given cipher text.
Definition: VirgilOperationCipher.h:105
VirgilByteArray encrypt(const VirgilByteArray &plainText, const VirgilByteArray &key, const VirgilByteArray &nonce, const VirgilByteArray &authData=VirgilByteArray()) const
Encrypt given plain text.
Definition: VirgilOperationCipher.h:89
Root namespace for all Virgil Security libraries.
Definition: VirgilAsn1Compatible.h:46
size_t getNonceSize() const
Return size of the nonce.
Definition: VirgilOperationCipher.h:76
std::vector< unsigned char > VirgilByteArray
This type represents a sequence of bytes.
Definition: VirgilByteArray.h:54
size_t getKeySize() const
Return size of the encryption/decryption key.
Definition: VirgilOperationCipher.h:68
VirgilOperationCipher(Impl impl)
Captures implementation object.
Definition: VirgilOperationCipher.h:62