OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "../../../include/fdrm/fx_crypt.h" | 7 #include "../../../include/fdrm/fx_crypt.h" |
8 #include "../../../include/fxcrt/fx_basic.h" | 8 #include "../../../include/fxcrt/fx_basic.h" |
9 #include "../../../include/fxcrt/fx_safe_types.h" | 9 #include "../../../include/fxcrt/fx_safe_types.h" |
10 | 10 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 } | 55 } |
56 void CRYPT_ArcFourCryptBlock(FX_LPBYTE pData, FX_DWORD size, FX_LPCBYTE key, FX_
DWORD keylen) | 56 void CRYPT_ArcFourCryptBlock(FX_LPBYTE pData, FX_DWORD size, FX_LPCBYTE key, FX_
DWORD keylen) |
57 { | 57 { |
58 rc4_state s; | 58 rc4_state s; |
59 CRYPT_ArcFourSetup(&s, key, keylen); | 59 CRYPT_ArcFourSetup(&s, key, keylen); |
60 CRYPT_ArcFourCrypt(&s, pData, size); | 60 CRYPT_ArcFourCrypt(&s, pData, size); |
61 } | 61 } |
62 struct md5_context { | 62 struct md5_context { |
63 FX_DWORD total[2]; | 63 FX_DWORD total[2]; |
64 FX_DWORD state[4]; | 64 FX_DWORD state[4]; |
65 FX_BYTE buffer[64]; | 65 uint8_t buffer[64]; |
66 }; | 66 }; |
67 #define GET_FX_DWORD(n,b,i) \ | 67 #define GET_FX_DWORD(n,b,i) \ |
68 { \ | 68 { \ |
69 (n) = (FX_DWORD) ((FX_BYTE *) b)[(i)] \ | 69 (n) = (FX_DWORD) ((uint8_t *) b)[(i)] \ |
70 | (((FX_DWORD) ((FX_BYTE *) b)[(i)+1]) << 8) \ | 70 | (((FX_DWORD) ((uint8_t *) b)[(i)+1]) << 8) \ |
71 | (((FX_DWORD) ((FX_BYTE *) b)[(i)+2]) << 16) \ | 71 | (((FX_DWORD) ((uint8_t *) b)[(i)+2]) << 16) \ |
72 | (((FX_DWORD) ((FX_BYTE *) b)[(i)+3]) << 24); \ | 72 | (((FX_DWORD) ((uint8_t *) b)[(i)+3]) << 24); \ |
73 } | 73 } |
74 #define PUT_FX_DWORD(n,b,i) \ | 74 #define PUT_FX_DWORD(n,b,i) \ |
75 { \ | 75 { \ |
76 (((FX_BYTE *) b)[(i)] ) = (FX_BYTE) (((n) ) & 0xFF); \ | 76 (((uint8_t *) b)[(i)] ) = (uint8_t) (((n) ) & 0xFF); \ |
77 (((FX_BYTE *) b)[(i)+1]) = (FX_BYTE) (((n) >> 8) & 0xFF); \ | 77 (((uint8_t *) b)[(i)+1]) = (uint8_t) (((n) >> 8) & 0xFF); \ |
78 (((FX_BYTE *) b)[(i)+2]) = (FX_BYTE) (((n) >> 16) & 0xFF); \ | 78 (((uint8_t *) b)[(i)+2]) = (uint8_t) (((n) >> 16) & 0xFF); \ |
79 (((FX_BYTE *) b)[(i)+3]) = (FX_BYTE) (((n) >> 24) & 0xFF); \ | 79 (((uint8_t *) b)[(i)+3]) = (uint8_t) (((n) >> 24) & 0xFF); \ |
80 } | 80 } |
81 void md5_process( struct md5_context *ctx, const FX_BYTE data[64] ) | 81 void md5_process( struct md5_context *ctx, const uint8_t data[64] ) |
82 { | 82 { |
83 FX_DWORD A, B, C, D, X[16]; | 83 FX_DWORD A, B, C, D, X[16]; |
84 GET_FX_DWORD( X[0], data, 0 ); | 84 GET_FX_DWORD( X[0], data, 0 ); |
85 GET_FX_DWORD( X[1], data, 4 ); | 85 GET_FX_DWORD( X[1], data, 4 ); |
86 GET_FX_DWORD( X[2], data, 8 ); | 86 GET_FX_DWORD( X[2], data, 8 ); |
87 GET_FX_DWORD( X[3], data, 12 ); | 87 GET_FX_DWORD( X[3], data, 12 ); |
88 GET_FX_DWORD( X[4], data, 16 ); | 88 GET_FX_DWORD( X[4], data, 16 ); |
89 GET_FX_DWORD( X[5], data, 20 ); | 89 GET_FX_DWORD( X[5], data, 20 ); |
90 GET_FX_DWORD( X[6], data, 24 ); | 90 GET_FX_DWORD( X[6], data, 24 ); |
91 GET_FX_DWORD( X[7], data, 28 ); | 91 GET_FX_DWORD( X[7], data, 28 ); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 } | 215 } |
216 while( length >= 64 ) { | 216 while( length >= 64 ) { |
217 md5_process( ctx, input ); | 217 md5_process( ctx, input ); |
218 length -= 64; | 218 length -= 64; |
219 input += 64; | 219 input += 64; |
220 } | 220 } |
221 if( length ) { | 221 if( length ) { |
222 FXSYS_memcpy32( (void *) (ctx->buffer + left), (void *) input, length ); | 222 FXSYS_memcpy32( (void *) (ctx->buffer + left), (void *) input, length ); |
223 } | 223 } |
224 } | 224 } |
225 const FX_BYTE md5_padding[64] = { | 225 const uint8_t md5_padding[64] = { |
226 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 226 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
227 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 227 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
228 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 228 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
229 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | 229 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
230 }; | 230 }; |
231 void CRYPT_MD5Finish(FX_LPVOID pctx, FX_BYTE digest[16] ) | 231 void CRYPT_MD5Finish(FX_LPVOID pctx, uint8_t digest[16] ) |
232 { | 232 { |
233 struct md5_context *ctx = (struct md5_context *)pctx; | 233 struct md5_context *ctx = (struct md5_context *)pctx; |
234 FX_DWORD last, padn; | 234 FX_DWORD last, padn; |
235 FX_BYTE msglen[8]; | 235 uint8_t msglen[8]; |
236 PUT_FX_DWORD( ctx->total[0], msglen, 0 ); | 236 PUT_FX_DWORD( ctx->total[0], msglen, 0 ); |
237 PUT_FX_DWORD( ctx->total[1], msglen, 4 ); | 237 PUT_FX_DWORD( ctx->total[1], msglen, 4 ); |
238 last = ( ctx->total[0] >> 3 ) & 0x3F; | 238 last = ( ctx->total[0] >> 3 ) & 0x3F; |
239 padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); | 239 padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); |
240 CRYPT_MD5Update( ctx, md5_padding, padn ); | 240 CRYPT_MD5Update( ctx, md5_padding, padn ); |
241 CRYPT_MD5Update( ctx, msglen, 8 ); | 241 CRYPT_MD5Update( ctx, msglen, 8 ); |
242 PUT_FX_DWORD( ctx->state[0], digest, 0 ); | 242 PUT_FX_DWORD( ctx->state[0], digest, 0 ); |
243 PUT_FX_DWORD( ctx->state[1], digest, 4 ); | 243 PUT_FX_DWORD( ctx->state[1], digest, 4 ); |
244 PUT_FX_DWORD( ctx->state[2], digest, 8 ); | 244 PUT_FX_DWORD( ctx->state[2], digest, 8 ); |
245 PUT_FX_DWORD( ctx->state[3], digest, 12 ); | 245 PUT_FX_DWORD( ctx->state[3], digest, 12 ); |
246 } | 246 } |
247 void CRYPT_MD5Generate(FX_LPCBYTE input, FX_DWORD length, FX_BYTE digest[16]) | 247 void CRYPT_MD5Generate(FX_LPCBYTE input, FX_DWORD length, uint8_t digest[16]) |
248 { | 248 { |
249 md5_context ctx; | 249 md5_context ctx; |
250 CRYPT_MD5Start(&ctx); | 250 CRYPT_MD5Start(&ctx); |
251 CRYPT_MD5Update(&ctx, input, length); | 251 CRYPT_MD5Update(&ctx, input, length); |
252 CRYPT_MD5Finish(&ctx, digest); | 252 CRYPT_MD5Finish(&ctx, digest); |
253 } | 253 } |
254 static FX_BOOL (*g_PubKeyDecryptor)(FX_LPCBYTE pData, FX_DWORD size, FX_LPBYTE d
ata_buf, FX_DWORD& data_len) = NULL; | 254 static FX_BOOL (*g_PubKeyDecryptor)(FX_LPCBYTE pData, FX_DWORD size, FX_LPBYTE d
ata_buf, FX_DWORD& data_len) = NULL; |
255 void CRYPT_SetPubKeyDecryptor(FX_BOOL (*func)(FX_LPCBYTE pData, FX_DWORD size, F
X_LPBYTE data_buf, FX_DWORD& data_len)) | 255 void CRYPT_SetPubKeyDecryptor(FX_BOOL (*func)(FX_LPCBYTE pData, FX_DWORD size, F
X_LPBYTE data_buf, FX_DWORD& data_len)) |
256 { | 256 { |
257 g_PubKeyDecryptor = func; | 257 g_PubKeyDecryptor = func; |
258 } | 258 } |
259 #ifdef __cplusplus | 259 #ifdef __cplusplus |
260 }; | 260 }; |
261 #endif | 261 #endif |
OLD | NEW |