/src/clamav/libclamunrar/crypt1.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | extern uint CRCTab[256]; |
2 | | |
3 | | void CryptData::SetKey13(const char *Password) |
4 | 0 | { |
5 | 0 | Key13[0]=Key13[1]=Key13[2]=0; |
6 | 0 | for (size_t I=0;Password[I]!=0;I++) |
7 | 0 | { |
8 | 0 | byte P=Password[I]; |
9 | 0 | Key13[0]+=P; |
10 | 0 | Key13[1]^=P; |
11 | 0 | Key13[2]+=P; |
12 | 0 | Key13[2]=(byte)rotls(Key13[2],1,8); |
13 | 0 | } |
14 | 0 | } |
15 | | |
16 | | |
17 | | void CryptData::SetKey15(const char *Password) |
18 | 0 | { |
19 | 0 | InitCRC32(CRCTab); |
20 | 0 | uint PswCRC=CRC32(0xffffffff,Password,strlen(Password)); |
21 | 0 | Key15[0]=PswCRC&0xffff; |
22 | 0 | Key15[1]=(PswCRC>>16)&0xffff; |
23 | 0 | Key15[2]=Key15[3]=0; |
24 | 0 | for (size_t I=0;Password[I]!=0;I++) |
25 | 0 | { |
26 | 0 | byte P=Password[I]; |
27 | 0 | Key15[2]^=P^CRCTab[P]; |
28 | 0 | Key15[3]+=P+(CRCTab[P]>>16); |
29 | 0 | } |
30 | 0 | } |
31 | | |
32 | | |
33 | | void CryptData::SetAV15Encryption() |
34 | 0 | { |
35 | 0 | InitCRC32(CRCTab); |
36 | 0 | Method=CRYPT_RAR15; |
37 | 0 | Key15[0]=0x4765; |
38 | 0 | Key15[1]=0x9021; |
39 | 0 | Key15[2]=0x7382; |
40 | 0 | Key15[3]=0x5215; |
41 | 0 | } |
42 | | |
43 | | |
44 | | void CryptData::SetCmt13Encryption() |
45 | 6.27k | { |
46 | 6.27k | Method=CRYPT_RAR13; |
47 | 6.27k | Key13[0]=0; |
48 | 6.27k | Key13[1]=7; |
49 | 6.27k | Key13[2]=77; |
50 | 6.27k | } |
51 | | |
52 | | |
53 | | void CryptData::Decrypt13(byte *Data,size_t Count) |
54 | 103k | { |
55 | 24.2M | while (Count--) |
56 | 24.1M | { |
57 | 24.1M | Key13[1]+=Key13[2]; |
58 | 24.1M | Key13[0]+=Key13[1]; |
59 | 24.1M | *Data-=Key13[0]; |
60 | 24.1M | Data++; |
61 | 24.1M | } |
62 | 103k | } |
63 | | |
64 | | |
65 | | void CryptData::Crypt15(byte *Data,size_t Count) |
66 | 0 | { |
67 | 0 | while (Count--) |
68 | 0 | { |
69 | 0 | Key15[0]+=0x1234; |
70 | 0 | Key15[1]^=CRCTab[(Key15[0] & 0x1fe)>>1]; |
71 | 0 | Key15[2]-=CRCTab[(Key15[0] & 0x1fe)>>1]>>16; |
72 | 0 | Key15[0]^=Key15[2]; |
73 | 0 | Key15[3]=rotrs(Key15[3]&0xffff,1,16)^Key15[1]; |
74 | 0 | Key15[3]=rotrs(Key15[3]&0xffff,1,16); |
75 | 0 | Key15[0]^=Key15[3]; |
76 | 0 | *Data^=(byte)(Key15[0]>>8); |
77 | 0 | Data++; |
78 | 0 | } |
79 | 0 | } |