HPDF_GetInfoAttr (HPDF_Doc pdf, HPDF_InfoType type) { const char *ret = NULL; HPDF_Dict info = GetInfo (pdf); HPDF_PTRACE((" HPDF_GetInfoAttr\n")); if (info) ret = HPDF_Info_GetInfoAttr (info, type); else HPDF_CheckError (&pdf->error); return ret; }
void HPDF_EncryptDict_CreateID (HPDF_EncryptDict dict, HPDF_Dict info, HPDF_Xref xref) { HPDF_MD5_CTX ctx; HPDF_Encrypt attr = (HPDF_Encrypt)dict->attr; /* use the result of 'time' function to get random value. * when debugging, 'time' value is ignored. */ #ifndef HPDF_DEBUG time_t t = HPDF_TIME (NULL); #endif /* HPDF_DEBUG */ HPDF_MD5Init (&ctx); #ifndef HPDF_DEBUG HPDF_MD5Update(&ctx, (HPDF_BYTE *)&t, sizeof(t)); /* create File Identifier from elements of Into dictionary. */ if (info) { const char *s; HPDF_UINT len; /* Author */ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_AUTHOR); if ((len = HPDF_StrLen (s, -1)) > 0) HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len); /* Creator */ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_CREATOR); if ((len = HPDF_StrLen (s, -1)) > 0) HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len); /* Producer */ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_PRODUCER); if ((len = HPDF_StrLen (s, -1)) > 0) HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len); /* Title */ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_TITLE); if ((len = HPDF_StrLen (s, -1)) > 0) HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len); /* Subject */ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_SUBJECT); if ((len = HPDF_StrLen (s, -1)) > 0) HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len); /* Keywords */ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_KEYWORDS); if ((len = HPDF_StrLen (s, -1)) > 0) HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len); HPDF_MD5Update(&ctx, (const HPDF_BYTE *)&(xref->entries->count), sizeof(HPDF_UINT32)); } #endif HPDF_MD5Final(attr->encrypt_id, &ctx); }