@Override
    protected synchronized void engineReset() {
        // Reset to the same state as at the end of the <init>(long evp_md, int size). We can avoid
        // allocating a new EVP_MD_CTX by invoking EVP_MD_CTX_cleanup on the existing one.
        // EVP_MD_CTX_cleanup cleans up and reinitializes the EVP_MD_CTX.
        final NativeRef.EVP_MD_CTX ctxLocal = ctx;
        NativeCrypto.EVP_MD_CTX_cleanup(ctxLocal);
        digestInitializedInContext = false;
    }
Creates a new OpenSSLMessageDigest instance for the given algorithm name.
common/src/main/java/org/conscrypt/OpenSSLMessageDigestJDK.java