summaryrefslogtreecommitdiffstats
path: root/user_channel/passwd_mgr.hpp
diff options
context:
space:
mode:
authorRichard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>2018-04-19 05:38:37 +0530
committerRichard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>2018-11-13 11:18:24 +0530
commit4654d99fda30800024c56b085ec9dcf2ac26c417 (patch)
tree4fdd7d29ac2d2914a7c5f837ef223881743d177d /user_channel/passwd_mgr.hpp
parent331f5d510b9061820bff0081b161bfea09407b0b (diff)
downloadphosphor-host-ipmid-4654d99fda30800024c56b085ec9dcf2ac26c417.tar.gz
phosphor-host-ipmid-4654d99fda30800024c56b085ec9dcf2ac26c417.zip
Add first user layer support.
Exposes user layer library which will be used by both apphandler and netipmid for RAKP. Password is decrypted from the special file which is used by pam-ipmi. Change-Id: Ia6b99d4359a03843f19cd0e18f7269ad2e3cdb44 Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
Diffstat (limited to 'user_channel/passwd_mgr.hpp')
-rw-r--r--user_channel/passwd_mgr.hpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/user_channel/passwd_mgr.hpp b/user_channel/passwd_mgr.hpp
new file mode 100644
index 0000000..3078e21
--- /dev/null
+++ b/user_channel/passwd_mgr.hpp
@@ -0,0 +1,86 @@
+/*
+// Copyright (c) 2018 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+#pragma once
+#include <openssl/evp.h>
+
+#include <ctime>
+#include <unordered_map>
+
+namespace ipmi
+{
+
+class PasswdMgr
+{
+ public:
+ ~PasswdMgr() = default;
+ PasswdMgr(const PasswdMgr&) = delete;
+ PasswdMgr& operator=(const PasswdMgr&) = delete;
+ PasswdMgr(PasswdMgr&&) = delete;
+ PasswdMgr& operator=(PasswdMgr&&) = delete;
+
+ /** @brief Constructs user password list
+ *
+ */
+ PasswdMgr();
+
+ /** @brief Get password for the user
+ *
+ * @param[in] userName - user name
+ *
+ * @return password string. will return empty string, if unable to locate
+ * the user
+ */
+ std::string getPasswdByUserName(const std::string& userName);
+
+ private:
+ using UserName = std::string;
+ using Password = std::string;
+ std::unordered_map<UserName, Password> passwdMapList;
+ std::time_t fileLastUpdatedTime;
+ /** @brief check timestamp and reload password map if required
+ *
+ */
+ void checkAndReload(void);
+ /** @brief initializes passwdMapList by reading the encrypted file
+ *
+ * Initializes the passwordMapList members after decrypting the
+ * password file. passwordMapList will be used further in IPMI
+ * authentication.
+ */
+ void initPasswordMap(void);
+ /** @brief decrypts the data provided
+ *
+ * @param[in] cipher - cipher to be used
+ * @param[in] key - pointer to the key
+ * @param[in] keyLen - Length of the key to be used
+ * @param[in] iv - pointer to initialization vector
+ * @param[in] ivLen - Length of the iv
+ * @param[in] inBytes - input data to be encrypted / decrypted
+ * @param[in] inBytesLen - input size to be decrypted
+ * @param[in] mac - message authentication code - to figure out corruption
+ * @param[in] macLen - size of MAC
+ * @param[in] outBytes - ptr to store output bytes
+ * @param[in] outBytesLen - outbut data length.
+ *
+ * @return error response
+ */
+ int decrypt(const EVP_CIPHER* cipher, uint8_t* key, size_t keyLen,
+ uint8_t* iv, size_t ivLen, uint8_t* inBytes, size_t inBytesLen,
+ uint8_t* mac, size_t macLen, uint8_t* outBytes,
+ size_t* outBytesLen);
+};
+
+} // namespace ipmi
OpenPOWER on IntegriCloud