namespace nss {
+ template<size_t DigestSize>
class NSSDigest {
private:
PK11Context *ctx;
- size_t digest_size;
public:
- NSSDigest (SECOidTag _type, size_t _digest_size)
- : digest_size(_digest_size) {
+ static constexpr size_t digest_size = DigestSize;
+ NSSDigest (SECOidTag _type) {
ctx = PK11_CreateDigestContext(_type);
if (! ctx) {
throw DigestException("PK11_CreateDigestContext() failed");
}
};
- class MD5 : public NSSDigest {
+ class MD5 : public NSSDigest<CEPH_CRYPTO_MD5_DIGESTSIZE> {
public:
- MD5 () : NSSDigest(SEC_OID_MD5, CEPH_CRYPTO_MD5_DIGESTSIZE) { }
+ MD5 () : NSSDigest<CEPH_CRYPTO_MD5_DIGESTSIZE>{SEC_OID_MD5} { }
};
- class SHA1 : public NSSDigest {
+ class SHA1 : public NSSDigest<CEPH_CRYPTO_SHA1_DIGESTSIZE> {
public:
- SHA1 () : NSSDigest(SEC_OID_SHA1, CEPH_CRYPTO_SHA1_DIGESTSIZE) { }
+ SHA1 () : NSSDigest<CEPH_CRYPTO_SHA1_DIGESTSIZE>{SEC_OID_SHA1} { }
};
- class SHA256 : public NSSDigest {
+ class SHA256 : public NSSDigest<CEPH_CRYPTO_SHA256_DIGESTSIZE> {
public:
- SHA256 () : NSSDigest(SEC_OID_SHA256, CEPH_CRYPTO_SHA256_DIGESTSIZE) { }
+ SHA256 () : NSSDigest<CEPH_CRYPTO_SHA256_DIGESTSIZE>{SEC_OID_SHA256} { }
};
- class SHA512 : public NSSDigest {
+ class SHA512 : public NSSDigest<CEPH_CRYPTO_SHA256_DIGESTSIZE> {
public:
- SHA512 () : NSSDigest(SEC_OID_SHA512, CEPH_CRYPTO_SHA512_DIGESTSIZE) { }
+ SHA512 () : NSSDigest<CEPH_CRYPTO_SHA256_DIGESTSIZE>{SEC_OID_SHA512} { }
};
}
}
class MD5 : public OpenSSLDigest {
public:
+ static constexpr size_t digest_size = CEPH_CRYPTO_MD5_DIGESTSIZE;
MD5 () : OpenSSLDigest(EVP_md5()) { }
};
class SHA1 : public OpenSSLDigest {
public:
+ static constexpr size_t digest_size = CEPH_CRYPTO_SHA1_DIGESTSIZE;
SHA1 () : OpenSSLDigest(EVP_sha1()) { }
};
class SHA256 : public OpenSSLDigest {
public:
+ static constexpr size_t digest_size = CEPH_CRYPTO_SHA256_DIGESTSIZE;
SHA256 () : OpenSSLDigest(EVP_sha256()) { }
};
class SHA512 : public OpenSSLDigest {
public:
+ static constexpr size_t digest_size = CEPH_CRYPTO_SHA512_DIGESTSIZE;
SHA512 () : OpenSSLDigest(EVP_sha512()) { }
};
}