Adding Encryptor class to encrypt content and place in Data packets.
Change-Id: Ie77fd51b58091bbbb182ab9197a58a55b183654c
Refs: #3014
diff --git a/src/algo/rsa.cpp b/src/algo/rsa.cpp
index 66361fb..f5fe848 100644
--- a/src/algo/rsa.cpp
+++ b/src/algo/rsa.cpp
@@ -19,6 +19,7 @@
#include <ndn-cxx/encoding/buffer-stream.hpp>
#include "rsa.hpp"
+#include "error.hpp"
namespace ndn {
namespace gep {
@@ -26,8 +27,15 @@
using namespace CryptoPP;
-Buffer
-crypt(SimpleProxyFilter* filter, const Buffer& data);
+static Buffer
+transform(SimpleProxyFilter* filter, const uint8_t* data, size_t dataLen)
+{
+ OBufferStream obuf;
+ filter->Attach(new FileSink(obuf));
+
+ StringSource pipe(data, dataLen, true, filter);
+ return *(obuf.buf());
+}
DecryptKey<Rsa>
Rsa::generateKey(RandomNumberGenerator& rng, RsaKeyParams& params)
@@ -61,75 +69,61 @@
}
Buffer
-Rsa::decrypt(const Buffer& keyBits, const Buffer& encryptedData, const EncryptParams& params)
+Rsa::decrypt(const uint8_t* key, size_t keyLen,
+ const uint8_t* payload, size_t payloadLen,
+ const EncryptParams& params)
{
AutoSeededRandomPool rng;
RSA::PrivateKey privateKey;
ByteQueue keyQueue;
- keyQueue.LazyPut(keyBits.data(), keyBits.size());
+ keyQueue.LazyPut(key, keyLen);
privateKey.Load(keyQueue);
- switch (params.getPaddingScheme()) {
- case PADDING_SCHEME_PKCS1v15:
- {
+ switch (params.getAlgorithmType()) {
+ case tlv::AlgorithmRsaPkcs: {
RSAES_PKCS1v15_Decryptor decryptor_pkcs1v15(privateKey);
PK_DecryptorFilter* filter_pkcs1v15 = new PK_DecryptorFilter(rng, decryptor_pkcs1v15);
- return crypt(filter_pkcs1v15, encryptedData);
+ return transform(filter_pkcs1v15, payload, payloadLen);
}
-
- case PADDING_SCHEME_OAEP_SHA:
- {
+ case tlv::AlgorithmRsaOaep: {
RSAES_OAEP_SHA_Decryptor decryptor_oaep_sha(privateKey);
PK_DecryptorFilter* filter_oaep_sha = new PK_DecryptorFilter(rng, decryptor_oaep_sha);
- return crypt(filter_oaep_sha, encryptedData);
+ return transform(filter_oaep_sha, payload, payloadLen);
}
-
- default:
- throw Error("unsupported padding scheme");
+ default:
+ throw Error("unsupported padding scheme");
}
}
Buffer
-Rsa::encrypt(const Buffer& keyBits, const Buffer& plainData, const EncryptParams& params)
+Rsa::encrypt(const uint8_t* key, size_t keyLen,
+ const uint8_t* payload, size_t payloadLen,
+ const EncryptParams& params)
{
AutoSeededRandomPool rng;
RSA::PublicKey publicKey;
ByteQueue keyQueue;
- keyQueue.LazyPut(keyBits.data(), keyBits.size());
+ keyQueue.LazyPut(key, keyLen);
publicKey.Load(keyQueue);
- switch (params.getPaddingScheme()) {
- case PADDING_SCHEME_PKCS1v15:
- {
+ switch (params.getAlgorithmType()) {
+ case tlv::AlgorithmRsaPkcs: {
RSAES_PKCS1v15_Encryptor encryptor_pkcs1v15(publicKey);
PK_EncryptorFilter* filter_pkcs1v15 = new PK_EncryptorFilter(rng, encryptor_pkcs1v15);
- return crypt(filter_pkcs1v15, plainData);
+ return transform(filter_pkcs1v15, payload, payloadLen);
}
-
- case PADDING_SCHEME_OAEP_SHA:
- {
+ case tlv::AlgorithmRsaOaep: {
RSAES_OAEP_SHA_Encryptor encryptor_oaep_sha(publicKey);
PK_EncryptorFilter* filter_oaep_sha = new PK_EncryptorFilter(rng, encryptor_oaep_sha);
- return crypt(filter_oaep_sha, plainData);
+ return transform(filter_oaep_sha, payload, payloadLen);
}
-
- default:
- throw Error("unsupported padding scheme");
+ default:
+ throw Error("unsupported padding scheme");
}
}
-Buffer
-crypt(SimpleProxyFilter* filter, const Buffer& data)
-{
- OBufferStream obuf;
- filter->Attach(new FileSink(obuf));
-
- StringSource pipe(data.get(), data.size(), true, filter);
- return *(obuf.buf());
-}
-
} // namespace algo
} // namespace gep
} // namespace ndn