Adding Encryptor class to encrypt content and place in Data packets.
Change-Id: Ie77fd51b58091bbbb182ab9197a58a55b183654c
Refs: #3014
diff --git a/src/algo/aes.cpp b/src/algo/aes.cpp
index 07cb788..1bcb6b6 100644
--- a/src/algo/aes.cpp
+++ b/src/algo/aes.cpp
@@ -19,6 +19,7 @@
#include <ndn-cxx/encoding/buffer-stream.hpp>
#include "aes.hpp"
+#include "error.hpp"
namespace ndn {
namespace gep {
@@ -26,8 +27,14 @@
using namespace CryptoPP;
-Buffer
-crypt(CipherModeBase* cipher, const Buffer& data);
+static Buffer
+transform(CipherModeBase* cipher, const uint8_t* data, size_t dataLen)
+{
+ OBufferStream obuf;
+ StringSource pipe(data, dataLen, true,
+ new StreamTransformationFilter(*cipher, new FileSink(obuf)));
+ return *(obuf.buf());
+}
DecryptKey<Aes>
Aes::generateKey(RandomNumberGenerator& rng, AesKeyParams& params)
@@ -48,64 +55,51 @@
}
Buffer
-Aes::decrypt(const Buffer& keyBits, const Buffer& encryptedData, const EncryptParams& params)
+Aes::decrypt(const uint8_t* key, size_t keyLen,
+ const uint8_t* payload, size_t payloadLen,
+ const EncryptParams& params)
{
- switch (params.getEncryptMode()) {
- case ENCRYPT_MODE_ECB_AES:
- {
- ECB_Mode<AES>::Decryption ecbDecryption(keyBits.get(), keyBits.size());
- return crypt(&ecbDecryption, encryptedData);
+ switch (params.getAlgorithmType()) {
+ case tlv::AlgorithmAesEcb: {
+ ECB_Mode<AES>::Decryption ecbDecryption(key, keyLen);
+ return transform(&ecbDecryption, payload, payloadLen);
}
-
- case ENCRYPT_MODE_CBC_AES:
- {
- Buffer initVector = params.getIV();
+ case tlv::AlgorithmAesCbc: {
+ const Buffer& initVector = params.getIV();
if (initVector.size() != static_cast<size_t>(AES::BLOCKSIZE))
throw Error("incorrect initial vector size");
- CBC_Mode<AES>::Decryption cbcDecryption(keyBits.get(), keyBits.size(), initVector.get());
- return crypt(&cbcDecryption, encryptedData);
+ CBC_Mode<AES>::Decryption cbcDecryption(key, keyLen, initVector.get());
+ return transform(&cbcDecryption, payload, payloadLen);
}
-
- default:
- throw Error("unsupported encryption mode");
+ default:
+ throw Error("unsupported encryption mode");
}
}
Buffer
-Aes::encrypt(const Buffer& keyBits, const Buffer& plainData, const EncryptParams& params)
+Aes::encrypt(const uint8_t* key, size_t keyLen,
+ const uint8_t* payload, size_t payloadLen,
+ const EncryptParams& params)
{
- switch (params.getEncryptMode()) {
- case ENCRYPT_MODE_ECB_AES:
- {
- ECB_Mode<AES>::Encryption ecbEncryption(keyBits.get(), keyBits.size());
- return crypt(&ecbEncryption, plainData);
+ switch (params.getAlgorithmType()) {
+ case tlv::AlgorithmAesEcb: {
+ ECB_Mode<AES>::Encryption ecbEncryption(key, keyLen);
+ return transform(&ecbEncryption, payload, payloadLen);
}
-
- case ENCRYPT_MODE_CBC_AES:
- {
- Buffer initVector = params.getIV();
+ case tlv::AlgorithmAesCbc: {
+ const Buffer& initVector = params.getIV();
if (initVector.size() != static_cast<size_t>(AES::BLOCKSIZE))
throw Error("incorrect initial vector size");
- CBC_Mode<AES>::Encryption cbcEncryption(keyBits.get(), keyBits.size(), initVector.get());
- return crypt(&cbcEncryption, plainData);
+ CBC_Mode<AES>::Encryption cbcEncryption(key, keyLen, initVector.get());
+ return transform(&cbcEncryption, payload, payloadLen);
}
-
- default:
- throw Error("unsupported encryption mode");
+ default:
+ throw Error("unsupported encryption mode");
}
}
-Buffer
-crypt(CipherModeBase* cipher, const Buffer& data)
-{
- OBufferStream obuf;
- StringSource pipe(data.get(), data.size(), true,
- new StreamTransformationFilter(*cipher, new FileSink(obuf)));
- return *(obuf.buf());
-}
-
} // namespace algo
} // namespace gep
} // namespace ndn