vso*_*tco 8 c++ cryptography move move-semantics c++11
我有一些代码,我想绝对确保移出的代码std::vector不会留下秘密数据(考虑加密密钥管理)。在我的班级的移动构造函数中,我做了类似的事情:
X(X&& rhs): secret_vector{std::move(rhs.secret_vector)}{
rhs.secret_vector.resize(N);
safe_zero(rhs.secret_vector); // zero out all elements
rhs.secret_vector.resize(0);
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我在离开秘密向量后重新使用它。我在看
但我并不完全清楚我可以做到这一点(我不明白“先决条件”到底是什么)。
我的问题是:我可以调整从 std::vector 移出的大小,对其执行一些操作,然后将其大小调整回零吗?
我的问题是:我可以调整从 std::vector 移出的大小,对其执行一些操作,然后将其大小调整回零吗?
移出的对象应处于未指定但有效的状态。
所以你有权调整它的大小(不需要任何先决条件)。safe_zero 它,并清除它。
(我不明白“先决条件”到底是什么)。
有一些状态条件要求对象必须不调用 UB。
例如,operator[](std::size_t i)要求i < size().
resize(),clear()没有要求。