-static void sha1(std::vector<char> &hash, const void *data, size_t size) {
- hash.resize(LDID_SHA1_DIGEST_LENGTH);
- sha1(reinterpret_cast<uint8_t *>(hash.data()), data, size);
+ void operator ()(std::vector<char> &hash, const void *data, size_t size) const {
+ hash.resize(LDID_SHA1_DIGEST_LENGTH);
+ return operator ()(reinterpret_cast<uint8_t *>(hash.data()), data, size);
+ }
+};
+
+struct AlgorithmSHA256 :
+ Algorithm
+{
+ AlgorithmSHA256() :
+ Algorithm(LDID_SHA256_DIGEST_LENGTH, CS_HASHTYPE_SHA256_256)
+ {
+ }
+
+ virtual const uint8_t *operator [](const ldid::Hash &hash) const {
+ return hash.sha256_;
+ }
+
+ void operator ()(uint8_t *hash, const void *data, size_t size) const {
+ LDID_SHA256(static_cast<const uint8_t *>(data), size, hash);
+ }
+
+ void operator ()(ldid::Hash &hash, const void *data, size_t size) const {
+ return operator()(hash.sha256_, data, size);
+ }
+
+ void operator ()(std::vector<char> &hash, const void *data, size_t size) const {
+ hash.resize(LDID_SHA256_DIGEST_LENGTH);
+ return operator ()(reinterpret_cast<uint8_t *>(hash.data()), data, size);
+ }
+};
+
+static const std::vector<Algorithm *> &GetAlgorithms() {
+ static AlgorithmSHA1 sha1;
+ static AlgorithmSHA256 sha256;
+
+ static Algorithm *array[] = {
+ &sha1,
+ &sha256,
+ };
+
+ static std::vector<Algorithm *> algorithms(array, array + sizeof(array) / sizeof(array[0]));
+ return algorithms;