diff --git a/crypt_algo.cpp b/crypt_algo.cpp
index baeb606..f33bca4 100644
--- a/crypt_algo.cpp
+++ b/crypt_algo.cpp
@@ -12,12 +12,13 @@
 namespace crypt
 {
 
-Interface::Interface(const buffer& sik, const key& addKey)
+Interface::Interface(const std::vector<uint8_t>& sik, const key& addKey)
 {
     unsigned int mdLen = 0;
 
     // Generated K2 for the confidentiality algorithm with the additional key
     // keyed with SIK.
+    k2.resize(sik.size());
     if (HMAC(EVP_sha1(), sik.data(), sik.size(), addKey.data(),
              addKey.size(), k2.data(), &mdLen) == NULL)
     {
@@ -31,9 +32,10 @@
 constexpr std::array<uint8_t, AlgoAES128::AESCBC128BlockSize - 1>
         AlgoAES128::confPadBytes;
 
-buffer AlgoAES128::decryptPayload(const buffer& packet,
-                                  const size_t sessHeaderLen,
-                                  const size_t payloadLen) const
+std::vector<uint8_t> AlgoAES128::decryptPayload(
+        const std::vector<uint8_t>& packet,
+        const size_t sessHeaderLen,
+        const size_t payloadLen) const
 {
     auto plainPayload = decryptData(
             packet.data() + sessHeaderLen,
@@ -63,7 +65,8 @@
     return plainPayload;
 }
 
-buffer AlgoAES128::encryptPayload(buffer& payload) const
+std::vector<uint8_t> AlgoAES128::encryptPayload(
+        std::vector<uint8_t>& payload) const
 {
     auto payloadLen = payload.size();
 
@@ -100,7 +103,7 @@
     return encryptData(payload.data(), payload.size());
 }
 
-buffer AlgoAES128::decryptData(const uint8_t* iv,
+std::vector<uint8_t> AlgoAES128::decryptData(const uint8_t* iv,
                                const uint8_t* input,
                                const int inputLen) const
 {
@@ -136,7 +139,7 @@
      */
     EVP_CIPHER_CTX_set_padding(ctxPtr.get(), 0);
 
-    buffer output(inputLen + AESCBC128BlockSize);
+    std::vector<uint8_t> output(inputLen + AESCBC128BlockSize);
 
     int outputLen = 0;
 
@@ -159,9 +162,10 @@
     return output;
 }
 
-buffer AlgoAES128::encryptData(const uint8_t* input, const int inputLen) const
+std::vector<uint8_t> AlgoAES128::encryptData(const uint8_t* input,
+        const int inputLen) const
 {
-    buffer output(inputLen + AESCBC128BlockSize);
+    std::vector<uint8_t> output(inputLen + AESCBC128BlockSize);
 
     // Generate the initialization vector
     if (!RAND_bytes(output.data(), AESCBC128ConfHeader))
