| Pos | Name | Type | Size | Offset |
| 0 | type | int | 4 | 0 |
| 1 | pkey_type | int | 4 | 4 |
| 2 | md_size | int | 4 | 8 |
| 3 | flags | unsigned long | 8 | 16 |
| 4 | init | int(*)(EVP_MD_CTX*) | 8 | 24 |
| 5 | update | int(*)(EVP_MD_CTX*, void const*, size_t) | 8 | 32 |
| 6 | final | int(*)(EVP_MD_CTX*, unsigned char*) | 8 | 40 |
| 7 | copy | int(*)(EVP_MD_CTX*, EVP_MD_CTX const*) | 8 | 48 |
| 8 | cleanup | int(*)(EVP_MD_CTX*) | 8 | 56 |
| 9 | sign | int(*)(int, unsigned char const*, unsigned int, unsigned char*, unsigned int*, void*) | 8 | 64 |
| 10 | verify | int(*)(int, unsigned char const*, unsigned int, unsigned char const*, unsigned int, void*) | 8 | 72 |
| 11 | required_pkey_type | int[5] | 20 | 80 |
| 12 | block_size | int | 4 | 100 |
| 13 | ctx_size | int | 4 | 104 |
| 14 | md_ctrl | int(*)(EVP_MD_CTX*, int, int, void*) | 8 | 112 |
| Offset | Contents | Type |
| 0 | .type | int |
| 4 | .pkey_type | int |
| 8 | .md_size | int |
| 12 | padding | |
| 16 | .flags | unsigned long |
| 24 | .init | int(*)(EVP_MD_CTX*) |
| 32 | .update | int(*)(EVP_MD_CTX*, void const*, size_t) |
| 40 | .final | int(*)(EVP_MD_CTX*, unsigned char*) |
| 48 | .copy | int(*)(EVP_MD_CTX*, EVP_MD_CTX const*) |
| 56 | .cleanup | int(*)(EVP_MD_CTX*) |
| 64 | .sign | int(*)(int, unsigned char const*, unsigned int, unsigned char*, unsigned int*, void*) |
| 72 | .verify | int(*)(int, unsigned char const*, unsigned int, unsigned char const*, unsigned int, void*) |
| 80 | .required_pkey_type | int[5] |
| 100 | .block_size | int |
| 104 | .ctx_size | int |
| 108 | padding | |
| 112 | .md_ctrl | int(*)(EVP_MD_CTX*, int, int, void*) |