]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common/ceph_crypto: add digest_size to digest classes
authorKefu Chai <kchai@redhat.com>
Tue, 11 Jun 2019 06:42:14 +0000 (14:42 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 11 Jun 2019 08:58:43 +0000 (16:58 +0800)
prepare for extracting the digest methods from ceph::buffer::list, so we
can use them in a templated implementation.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/common/ceph_crypto.h

index 810af086381ddf472595e9620e556bfb6f8ec81a..2c064b644775c2807c9f5d8f1fe8616a56966738 100644 (file)
@@ -59,13 +59,13 @@ namespace ceph {
 
     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");
@@ -103,24 +103,24 @@ namespace ceph {
        }
       };
 
-      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} { }
       };
     }
   }
@@ -145,21 +145,25 @@ namespace ceph {
 
       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()) { }
       };
     }