- out->md_data=OPENSSL_malloc(out->digest->ctx_size);
- /* FIXME: we really need a per-MD copy function */
- memcpy(out->md_data,in->md_data,out->digest->ctx_size);
+
+ if(out->digest->ctx_size)
+ {
+ out->md_data=OPENSSL_malloc(out->digest->ctx_size);
+ memcpy(out->md_data,in->md_data,out->digest->ctx_size);
+ }
+
+ if(out->digest->copy)
+ return out->digest->copy(out,in);
+