/
*
*
*
*
id
__cdecl
-
[DCCertificateGenerator _encryptData:error:](DCCertificateGenerator
*
self
, SEL a2,
id
a3,
id
*
a4)
*
{
*
id
v5;
/
/
x21
*
void
*
v6;
/
/
x0
*
NSObject
*
v7;
/
/
x19
*
NSString
*
v8;
/
/
x0
*
NSString
*
v9;
/
/
x19
*
NSData
*
v10;
/
/
x0
*
NSData
*
v11;
/
/
x20
*
unsigned
int
clientAppId_length;
/
/
w28
*
NSDate
*
alloc_data;
/
/
x0
*
NSDate
*
v14;
/
/
x24
*
unsigned
int
input_data_length_v15;
/
/
w20
*
id
v16;
/
/
x21
*
id
input_data_bytes;
/
/
x19
*
_DWORD
*
v18;
/
/
x0
*
_DWORD
*
v19_output_buf;
/
/
x22
*
void
*
v20;
/
/
x21
*
id
v21_publickey_bytes;
/
/
x23
*
id
v22_public_keylen;
/
/
x0
*
char
*
v23;
/
/
x21
*
__int64 v24;
/
/
d0
*
id
v25;
/
/
x0
*
__int64 v26;
/
/
x0
*
NSDate
*
v27;
/
/
x28
*
__int64 v28;
/
/
x19
*
void
*
v29;
/
/
x0
*
NSObject
*
v30;
/
/
x23
*
void
*
v31;
/
/
x0
*
_OWORD
*
public_key_1;
/
/
x0
*
__int128 v33;
/
/
q0
*
__int128 v34;
/
/
q1
*
__int128 v35;
/
/
q2
*
__int64 i;
/
/
x20
*
void
*
*
v37;
/
/
x19
*
id
v38;
/
/
x20
*
id
v39;
/
/
x0
*
__int64 v40;
/
/
x0
*
__int64 v41;
/
/
x19
*
void
*
v42;
/
/
x0
*
void
*
v43;
/
/
x0
*
NSData
*
v44;
/
/
x24
*
__int64 v46;
/
/
x19
*
__int64 v47;
/
/
x20
*
unsigned __int8
*
v48;
/
/
x23
*
unsigned
int
v49;
/
/
t1
*
__int64 v50;
/
/
x0
*
__int64 v51;
/
/
x19
*
void
*
v52;
/
/
x0
*
__int64 j;
/
/
x23
*
__int64 k;
/
/
x20
*
__int64 v55;
/
/
x0
*
__int64 v56;
/
/
x19
*
void
*
v57;
/
/
x0
*
__int64 m;
/
/
x20
*
NSData
*
v59;
/
/
x0
*
void
*
v60;
/
/
x0
*
id
v61;
/
/
x19
*
id
v62;
/
/
x0
*
id
v63;
/
/
x20
*
id
v64;
/
/
x0
*
id
v65;
/
/
x19
*
id
v66;
/
/
x0
*
__int64 v67_output_len;
/
/
[xsp
+
20h
] [xbp
-
E0h]
*
__int64 v68;
/
/
[xsp
+
28h
] [xbp
-
D8h]
*
id
clientappid_bytes__src;
/
/
[xsp
+
30h
] [xbp
-
D0h]
*
NSData
*
v70;
/
/
[xsp
+
38h
] [xbp
-
C8h]
*
size_t __n;
/
/
[xsp
+
40h
] [xbp
-
C0h] BYREF
*
__int64 v72;
/
/
[xsp
+
48h
] [xbp
-
B8h]
*
__int64 v73;
/
/
[xsp
+
50h
] [xbp
-
B0h]
*
void
*
*
v74;
/
/
[xsp
+
58h
] [xbp
-
A8h] BYREF
*
uint8_t v75[
4
];
/
/
[xsp
+
60h
] [xbp
-
A0h] BYREF
*
id
v76;
/
/
[xsp
+
64h
] [xbp
-
9Ch
]
*
uint8_t buf[
2
];
/
/
[xsp
+
70h
] [xbp
-
90h
] BYREF
*
_BYTE v78[
16
];
/
/
[xsp
+
90h
] [xbp
-
70h
] BYREF
*
*
v5
=
j__objc_retain_765(a3);
*
v6
=
(void
*
)_DCLogSystem(v5);
*
v7
=
j__objc_retainAutoreleasedReturnValue_706(v6);
*
if
( j__os_log_type_enabled_718(v7, OS_LOG_TYPE_DEFAULT) )
*
{
*
*
(_WORD
*
)buf
=
0
;
*
j___os_log_impl_652(&dword_1ACFED000, v7, OS_LOG_TYPE_DEFAULT,
"Encrypting data..."
, buf,
2u
);
*
}
*
j__objc_release_785(v7);
*
v8
=
-
[DCContext clientAppID](
self
-
>_context,
"clientAppID"
);
*
v9
=
j__objc_retainAutoreleasedReturnValue_706(v8);
*
v10
=
-
[NSString dataUsingEncoding:](v9,
"dataUsingEncoding:"
,
4LL
);
*
v11
=
j__objc_retainAutoreleasedReturnValue_706(v10);
*
j__objc_release_785(v9);
*
clientAppId_length
=
(unsigned
int
)j__objc_msgSend_796(v11,
"length"
);
*
v70
=
j__objc_retainAutorelease_520(v11);
*
clientappid_bytes__src
=
j__objc_msgSend_796(v70,
"bytes"
);
*
alloc_data
=
+
[NSDate date](&OBJC_CLASS___NSDate,
"date"
);
*
v14
=
j__objc_retainAutoreleasedReturnValue_706(alloc_data);
*
input_data_length_v15
=
(unsigned
int
)j__objc_msgSend_796(v5,
"length"
);
*
v16
=
j__objc_retainAutorelease_520(v5);
*
input_data_bytes
=
j__objc_msgSend_796(v16,
"bytes"
);
*
j__objc_release_785(v16);
*
v73
=
0LL
;
*
v74
=
0LL
;
*
v72
=
0LL
;
*
v68
=
j__ccaes_gcm_encrypt_mode_10();
*
v18
=
j__calloc_348(
1uLL
, input_data_length_v15
+
clientAppId_length
+
235LL
);
*
if
( !v18 )
*
{
*
v27
=
v14;
*
v31
=
(void
*
)_DCLogSystem(
0LL
);
*
v30
=
j__objc_retainAutoreleasedReturnValue_706(v31);
*
if
( j__os_log_type_enabled_718(v30, OS_LOG_TYPE_ERROR) )
*
-
[DCCertificateGenerator _encryptData:error:].cold.
1
(v30);
*
v19_output_buf
=
0LL
;
*
v23
=
0LL
;
*
goto LABEL_18;
*
}
*
v19_output_buf
=
v18;
*
v67_output_len
=
input_data_length_v15
+
clientAppId_length
+
235LL
;
*
*
(_DWORD
*
)((char
*
)v18
+
150
)
=
input_data_length_v15
+
clientAppId_length
+
81
;
*
*
v18
=
2
;
*
v20
=
v18
+
5
;
*
v21_publickey_bytes
=
j__objc_msgSend_796(
self
-
>_publicKey,
"bytes"
);
*
v22_public_keylen
=
j__objc_msgSend_796(
self
-
>_publicKey,
"length"
);
*
j__memcpy_479(v20, v21_publickey_bytes, (size_t)v22_public_keylen);
*
v23
=
(char
*
)j__calloc_348(
1uLL
,
*
(unsigned
int
*
)((char
*
)v19_output_buf
+
150
));
*
*
(_DWORD
*
)(v23
+
73
)
=
input_data_length_v15;
*
j__memcpy_479(v23
+
81
, input_data_bytes, input_data_length_v15);
*
*
(_DWORD
*
)(v23
+
77
)
=
clientAppId_length;
*
j__memcpy_479(&v23[
*
(unsigned
int
*
)(v23
+
73
)
+
81
], clientappid_bytes__src, clientAppId_length);
*
-
[NSDate timeIntervalSince1970](v14,
"timeIntervalSince1970"
);
*
*
(_QWORD
*
)(v23
+
65
)
=
v24;
*
v25
=
-
[DCCertificateGenerator keybagHandle](
self
,
"keybagHandle"
);
*
v26
=
aks_ref_key_create_1((__int64)v25,
11
,
4u
,
0LL
,
0LL
, &v74);
*
v27
=
v14;
*
if
( (_DWORD)v26 )
*
{
*
v28
=
v26;
*
v29
=
(void
*
)_DCLogSystem(v26);
*
v30
=
j__objc_retainAutoreleasedReturnValue_706(v29);
*
if
( j__os_log_type_enabled_718(v30, OS_LOG_TYPE_ERROR) )
*
-
[DCCertificateGenerator _encryptData:error:].cold.
6
(v28, v30);
*
LABEL_18:
*
v44
=
0LL
;
*
goto LABEL_19;
*
}
*
public_key_1
=
(_OWORD
*
)aks_ref_key_get_public_key_1(v74, (__int64
*
)&__n);
*
if
( __n !
=
65
)
*
{
/
/
日志输出不用关心
*
v43
=
(void
*
)_DCLogSystem(public_key_1);
*
v30
=
j__objc_retainAutoreleasedReturnValue_706(v43);
*
if
( j__os_log_type_enabled_718(v30, OS_LOG_TYPE_ERROR) )
*
-
[DCCertificateGenerator _encryptData:error:].cold.
5
(&__n, v30);
*
goto LABEL_18;
*
}
*
*
(_OWORD
*
)((char
*
)v19_output_buf
+
85
)
=
*
public_key_1;
*
v33
=
public_key_1[
1
];
*
v34
=
public_key_1[
2
];
*
v35
=
public_key_1[
3
];
*
*
((_BYTE
*
)v19_output_buf
+
149
)
=
*
((_BYTE
*
)public_key_1
+
64
);
*
*
(_OWORD
*
)((char
*
)v19_output_buf
+
133
)
=
v35;
*
*
(_OWORD
*
)((char
*
)v19_output_buf
+
117
)
=
v34;
*
*
(_OWORD
*
)((char
*
)v19_output_buf
+
101
)
=
v33;
*
j__memcpy_479(v23, public_key_1, __n);
*
j__printf_133(
"%-25.25s = "
,
"random_pubkey"
);
*
for
( i
=
85LL
; i !
=
150
;
+
+
i )
*
j__printf_133(
"%02x"
,
*
((unsigned __int8
*
)v19_output_buf
+
i));
*
j__putchar_35(
10
);
*
v37
=
v74;
*
v38
=
j__objc_msgSend_796(
self
-
>_publicKey,
"bytes"
);
*
v39
=
j__objc_msgSend_796(
self
-
>_publicKey,
"length"
);
*
v40
=
aks_ref_key_compute_key_0(v37,
0LL
,
0LL
, (__int64)v38, (__int64)v39);
*
if
( (_DWORD)v40 )
*
{
*
v41
=
v40;
*
v42
=
(void
*
)_DCLogSystem(v40);
*
v30
=
j__objc_retainAutoreleasedReturnValue_706(v42);
*
if
( j__os_log_type_enabled_718(v30, OS_LOG_TYPE_ERROR) )
*
-
[DCCertificateGenerator _encryptData:error:].cold.
4
(v41, v30);
*
goto LABEL_18;
*
}
*
v46
=
v73;
*
v47
=
v72
-
2
;
*
j__printf_133(
"%-25.25s = "
,
"ECDH shared key"
);
*
if
( v47 )
*
{
*
v48
=
(unsigned __int8
*
)(v46
+
2
);
*
do
*
{
*
v49
=
*
v48
+
+
;
*
j__printf_133(
"%02x"
, v49);
*
-
-
v47;
*
}
*
while
( v47 );
*
}
*
j__putchar_35(
10
);
*
v50
=
j__cchkdf_6(ccsha256_ltc_di, v72
-
2
, v73
+
2
,
0LL
,
0LL
,
0LL
,
0LL
,
0x2CuLL
, (char
*
)buf);
*
if
( (_DWORD)v50 )
*
{
*
v51
=
v50;
*
v52
=
(void
*
)_DCLogSystem(v50);
*
v30
=
j__objc_retainAutoreleasedReturnValue_706(v52);
*
if
( j__os_log_type_enabled_718(v30, OS_LOG_TYPE_ERROR) )
*
-
[DCCertificateGenerator _encryptData:error:].cold.
3
(v51, v30);
*
goto LABEL_18;
*
}
*
j__printf_133(
"%-25.25s = "
,
"HKDF derived key"
);
*
for
( j
=
0LL
; j !
=
32
;
+
+
j )
*
j__printf_133(
"%02x"
, buf[j]);
*
j__putchar_35(
10
);
*
j__printf_133(
"%-25.25s = "
,
"HKDF derived iv"
);
*
for
( k
=
0LL
; k !
=
12
;
+
+
k )
*
j__printf_133(
"%02x"
, (unsigned __int8)v78[k]);
*
j__putchar_35(
10
);
*
v55
=
j__ccgcm_one_shot_1(
*
v68,
*
32LL
,
*
(__int64)buf,
*
12LL
,
*
(__int64)v78,
*
0LL
,
*
0LL
,
*
*
(unsigned
int
*
)((char
*
)v19_output_buf
+
150
),
*
(__int64)v23,
*
(__int64)v19_output_buf
+
154
,
*
16LL
,
*
(__int64)(v19_output_buf
+
1
));
*
if
( (_DWORD)v55 )
*
{
*
v56
=
v55;
*
v57
=
(void
*
)_DCLogSystem(v55);
*
v30
=
j__objc_retainAutoreleasedReturnValue_706(v57);
*
if
( j__os_log_type_enabled_718(v30, OS_LOG_TYPE_ERROR) )
*
-
[DCCertificateGenerator _encryptData:error:].cold.
2
(v56, v30);
*
goto LABEL_18;
*
}
*
j__printf_133(
"%-25.25s = "
,
"tag"
);
*
for
( m
=
4LL
; m !
=
20
;
+
+
m )
*
j__printf_133(
"%02x"
,
*
((unsigned __int8
*
)v19_output_buf
+
m));
*
j__putchar_35(
10
);
*
j__fprintf_202((
FILE
*
)__stderrp_0,
"encrypted_data_len: %d\n"
,
*
(unsigned
int
*
)((char
*
)v19_output_buf
+
150
));
*
v59
=
j__objc_msgSend_796(&OBJC_CLASS___NSData,
"dataWithBytes:length:"
, v19_output_buf, v67_output_len);
*
v44
=
j__objc_retainAutoreleasedReturnValue_706(v59);
*
v60
=
(void
*
)_DCLogSystem(v44);
*
v30
=
j__objc_retainAutoreleasedReturnValue_706(v60);
*
if
( j__os_log_type_enabled_718(v30, OS_LOG_TYPE_DEFAULT) )
*
{
*
v61
=
j__objc_alloc_700((Class)&OBJC_CLASS___NSString);
*
v62
=
j__objc_msgSend_796(v44,
"base64EncodedDataWithOptions:"
,
1LL
);
*
v63
=
j__objc_retainAutoreleasedReturnValue_706(v62);
*
v64
=
j__objc_msgSend_796(v61,
"initWithData:encoding:"
, v63,
4LL
);
*
v65
=
j__objc_retainAutorelease_520(v64);
*
v66
=
j__objc_msgSend_796(v65,
"UTF8String"
);
*
*
(_DWORD
*
)v75
=
136315138
;
*
v76
=
v66;
*
j___os_log_impl_652(&dword_1ACFED000, v30, OS_LOG_TYPE_DEFAULT,
"\nPayload (base64):\n%s\n\n"
, v75,
0xCu
);
*
j__objc_release_785(v65);
*
j__objc_release_785(v63);
*
}
*
v19_output_buf
=
0LL
;
*
LABEL_19:
*
j__objc_release_785(v30);
*
j__free_627(v19_output_buf);
*
j__free_627(v23);
*
j__objc_release_785(v27);
*
j__objc_release_785(v70);
*
return
j__objc_autoreleaseReturnValue_646(v44);
*
}
*
*
*
/