Skip to content
This repository was archived by the owner on Mar 19, 2021. It is now read-only.

Commit 4dac225

Browse files
committed
PS4 Firmware 8.0 Compatibility (Fix #328)
1 parent f1071f3 commit 4dac225

File tree

20 files changed

+1271
-134
lines changed

20 files changed

+1271
-134
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ secret.tar
2424
keystore-env.sh
2525
compile_commands.json
2626
.ccls-cache
27+
.gdb_history

android/app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ android {
3131
arguments "-DCHIAKI_ENABLE_TESTS=OFF",
3232
"-DCHIAKI_ENABLE_CLI=OFF",
3333
"-DCHIAKI_ENABLE_GUI=OFF",
34+
"-DCHIAKI_ENABLE_SETSU=OFF",
3435
"-DCHIAKI_ENABLE_ANDROID=ON",
3536
"-DCHIAKI_LIB_ENABLE_OPUS=OFF",
3637
"-DCHIAKI_LIB_OPENSSL_EXTERNAL_PROJECT=ON"

android/app/src/main/cpp/chiaki-jni.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,13 +702,19 @@ JNIEXPORT void JNICALL JNI_FCN(registStart)(JNIEnv *env, jobject obj, jobject re
702702
")V");
703703

704704
jclass regist_info_class = E->GetObjectClass(env, regist_info_obj);
705+
706+
jobject target_obj = E->GetObjectField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "target", "L"BASE_PACKAGE"/Target;"));
707+
jclass target_class = E->GetObjectClass(env, target_obj);
708+
jint target_value = E->GetIntField(env, target_obj, E->GetFieldID(env, target_class, "value", "I"));
709+
705710
jstring host_string = E->GetObjectField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "host", "Ljava/lang/String;"));
706711
jboolean broadcast = E->GetBooleanField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "broadcast", "Z"));
707712
jstring psn_online_id_string = E->GetObjectField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "psnOnlineId", "Ljava/lang/String;"));
708713
jbyteArray psn_account_id_array = E->GetObjectField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "psnAccountId", "[B"));
709714
jint pin = E->GetIntField(env, regist_info_obj, E->GetFieldID(env, regist_info_class, "pin", "I"));
710715

711716
ChiakiRegistInfo regist_info = { 0 };
717+
regist_info.target = (ChiakiTarget)target_value;
712718
regist_info.host = E->GetStringUTFChars(env, host_string, NULL);
713719
regist_info.broadcast = broadcast;
714720
if(psn_online_id_string)

android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,19 @@ package com.metallic.chiaki.lib
33
import android.os.Parcelable
44
import android.util.Log
55
import android.view.Surface
6+
import kotlinx.android.parcel.IgnoredOnParcel
67
import kotlinx.android.parcel.Parcelize
78
import java.lang.Exception
89
import java.net.InetSocketAddress
910
import kotlin.math.abs
1011

12+
enum class Target(val value: Int)
13+
{
14+
PS4_8(800),
15+
PS4_9(900),
16+
PS4_10(1000)
17+
}
18+
1119
enum class VideoResolutionPreset(val value: Int)
1220
{
1321
RES_360P(1),
@@ -316,6 +324,7 @@ class DiscoveryService(
316324

317325
@Parcelize
318326
data class RegistInfo(
327+
val target: Target,
319328
val host: String,
320329
val broadcast: Boolean,
321330
val psnOnlineId: String?,

android/app/src/main/java/com/metallic/chiaki/regist/RegistActivity.kt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import androidx.lifecycle.ViewModelProvider
2828
import com.metallic.chiaki.R
2929
import com.metallic.chiaki.common.ext.RevealActivity
3030
import com.metallic.chiaki.lib.RegistInfo
31+
import com.metallic.chiaki.lib.Target
3132
import kotlinx.android.synthetic.main.activity_regist.*
3233
import java.lang.IllegalArgumentException
3334

@@ -63,26 +64,28 @@ class RegistActivity: AppCompatActivity(), RevealActivity
6364

6465
registButton.setOnClickListener { doRegist() }
6566

66-
ps4VersionRadioGroup.check(when(viewModel.ps4Version.value ?: RegistViewModel.PS4Version.GE_7) {
67+
ps4VersionRadioGroup.check(when(viewModel.ps4Version.value ?: RegistViewModel.PS4Version.GE_8) {
68+
RegistViewModel.PS4Version.GE_8 -> R.id.ps4VersionGE8RadioButton
6769
RegistViewModel.PS4Version.GE_7 -> R.id.ps4VersionGE7RadioButton
6870
RegistViewModel.PS4Version.LT_7 -> R.id.ps4VersionLT7RadioButton
6971
})
7072

7173
ps4VersionRadioGroup.setOnCheckedChangeListener { _, checkedId ->
7274
viewModel.ps4Version.value = when(checkedId)
7375
{
76+
R.id.ps4VersionGE8RadioButton -> RegistViewModel.PS4Version.GE_8
7477
R.id.ps4VersionGE7RadioButton -> RegistViewModel.PS4Version.GE_7
7578
R.id.ps4VersionLT7RadioButton -> RegistViewModel.PS4Version.LT_7
7679
else -> RegistViewModel.PS4Version.GE_7
7780
}
7881
}
7982

8083
viewModel.ps4Version.observe(this, Observer {
81-
psnAccountIdHelpGroup.visibility = if(it == RegistViewModel.PS4Version.GE_7) View.VISIBLE else View.GONE
84+
psnAccountIdHelpGroup.visibility = if(it == RegistViewModel.PS4Version.LT_7) View.GONE else View.VISIBLE
8285
psnIdTextInputLayout.hint = getString(when(it!!)
8386
{
84-
RegistViewModel.PS4Version.GE_7 -> R.string.hint_regist_psn_account_id
8587
RegistViewModel.PS4Version.LT_7 -> R.string.hint_regist_psn_online_id
88+
else -> R.string.hint_regist_psn_account_id
8689
})
8790
})
8891
}
@@ -98,14 +101,14 @@ class RegistActivity: AppCompatActivity(), RevealActivity
98101
val psnId = psnIdEditText.text.toString().trim()
99102
val psnOnlineId: String? = if(ps4Version == RegistViewModel.PS4Version.LT_7) psnId else null
100103
val psnAccountId: ByteArray? =
101-
if(ps4Version == RegistViewModel.PS4Version.GE_7)
104+
if(ps4Version != RegistViewModel.PS4Version.LT_7)
102105
try { Base64.decode(psnId, Base64.DEFAULT) } catch(e: IllegalArgumentException) { null }
103106
else
104107
null
105108
val psnIdValid = when(ps4Version)
106109
{
107-
RegistViewModel.PS4Version.GE_7 -> psnAccountId != null && psnAccountId.size == RegistInfo.ACCOUNT_ID_SIZE
108110
RegistViewModel.PS4Version.LT_7 -> psnOnlineId?.isNotEmpty() ?: false
111+
else -> psnAccountId != null && psnAccountId.size == RegistInfo.ACCOUNT_ID_SIZE
109112
}
110113

111114

@@ -117,8 +120,8 @@ class RegistActivity: AppCompatActivity(), RevealActivity
117120
if(!psnIdValid)
118121
getString(when(ps4Version)
119122
{
120-
RegistViewModel.PS4Version.GE_7 -> R.string.regist_psn_account_id_invalid
121123
RegistViewModel.PS4Version.LT_7 -> R.string.regist_psn_online_id_invalid
124+
else -> R.string.regist_psn_account_id_invalid
122125
})
123126
else
124127
null
@@ -127,7 +130,14 @@ class RegistActivity: AppCompatActivity(), RevealActivity
127130
if(!hostValid || !psnIdValid || !pinValid)
128131
return
129132

130-
val registInfo = RegistInfo(host, broadcast, psnOnlineId, psnAccountId, pin.toInt())
133+
val target = when(ps4Version)
134+
{
135+
RegistViewModel.PS4Version.GE_8 -> Target.PS4_10
136+
RegistViewModel.PS4Version.GE_7 -> Target.PS4_9
137+
RegistViewModel.PS4Version.LT_7 -> Target.PS4_8
138+
}
139+
140+
val registInfo = RegistInfo(target, host, broadcast, psnOnlineId, psnAccountId, pin.toInt())
131141

132142
Intent(this, RegistExecuteActivity::class.java).also {
133143
it.putExtra(RegistExecuteActivity.EXTRA_REGIST_INFO, registInfo)

android/app/src/main/java/com/metallic/chiaki/regist/RegistViewModel.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ import androidx.lifecycle.ViewModel
2323
class RegistViewModel: ViewModel()
2424
{
2525
enum class PS4Version {
26+
GE_8,
2627
GE_7,
2728
LT_7
2829
}
2930

30-
val ps4Version = MutableLiveData<PS4Version>(PS4Version.GE_7)
31+
val ps4Version = MutableLiveData<PS4Version>(PS4Version.GE_8)
3132
}

android/app/src/main/res/layout/activity_regist.xml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,21 @@
7070
app:layout_constraintTop_toBottomOf="@id/broadcastCheckBox">
7171

7272
<com.google.android.material.radiobutton.MaterialRadioButton
73-
android:id="@+id/ps4VersionGE7RadioButton"
73+
android:id="@+id/ps4VersionGE8RadioButton"
7474
android:layout_width="wrap_content"
7575
android:layout_height="wrap_content"
76-
android:text="@string/regist_option_ps4_ge_7"
76+
android:text="@string/regist_option_ps4_ge_8"
7777
android:layout_weight="1"
7878
android:checked="true"/>
79+
80+
<com.google.android.material.radiobutton.MaterialRadioButton
81+
android:id="@+id/ps4VersionGE7RadioButton"
82+
android:layout_width="wrap_content"
83+
android:layout_height="wrap_content"
84+
android:layout_weight="1"
85+
android:checked="false"
86+
android:text="@string/regist_option_ps4_ge_7" />
87+
7988
<com.google.android.material.radiobutton.MaterialRadioButton
8089
android:id="@+id/ps4VersionLT7RadioButton"
8190
android:layout_width="wrap_content"

android/app/src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
<string name="hint_regist_host">Host</string>
2929
<string name="regist_broadcast">Broadcast</string>
3030
<string name="regist_option_ps4_lt_7">PS4 &lt; 7.0</string>
31-
<string name="regist_option_ps4_ge_7">PS4 ≥ 7.0</string>
31+
<string name="regist_option_ps4_ge_7">PS4 ≥ 7.0, &lt; 8</string>
32+
<string name="regist_option_ps4_ge_8">PS4 ≥ 8.0</string>
3233
<string name="regist_psn_account_id_help">About obtaining your Account ID, see</string>
3334
<string name="regist_psn_account_id_help_url">https://github.com/thestr4ng3r/chiaki/blob/master/README.md#obtaining-your-psn-accountid</string>
3435
<string name="hint_regist_psn_online_id">PSN Online ID (username, case-sensitive)</string>

gui/include/registdialog.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,19 @@ class RegistDialog : public QDialog
4141

4242
QLineEdit *host_edit;
4343
QCheckBox *broadcast_check_box;
44-
QRadioButton *psn_online_id_radio_button;
44+
QRadioButton *ps4_pre9_radio_button;
45+
QRadioButton *ps4_pre10_radio_button;
46+
QRadioButton *ps4_10_radio_button;
4547
QLineEdit *psn_online_id_edit;
46-
QRadioButton *psn_account_id_radio_button;
4748
QLineEdit *psn_account_id_edit;
4849
QLineEdit *pin_edit;
4950
QDialogButtonBox *button_box;
5051
QPushButton *register_button;
5152

5253
RegisteredHost registered_host;
5354

55+
bool NeedAccountId();
56+
5457
private slots:
5558
void ValidateInput();
5659

gui/src/registdialog.cpp

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,20 +59,29 @@ RegistDialog::RegistDialog(Settings *settings, const QString &host, QWidget *par
5959
broadcast_check_box->setChecked(host.isEmpty());
6060

6161
auto UpdatePSNIDEdits = [this]() {
62-
psn_online_id_edit->setEnabled(psn_online_id_radio_button->isChecked());
63-
psn_account_id_edit->setEnabled(psn_account_id_radio_button->isChecked());
62+
bool need_account_id = NeedAccountId();
63+
psn_online_id_edit->setEnabled(!need_account_id);
64+
psn_account_id_edit->setEnabled(need_account_id);
6465
};
6566

66-
psn_online_id_radio_button = new QRadioButton(tr("PSN Online-ID (username, case-sensitive) for PS4 < 7.0:"), this);
67-
psn_online_id_edit = new QLineEdit(this);
68-
form_layout->addRow(psn_online_id_radio_button, psn_online_id_edit);
69-
connect(psn_online_id_radio_button, &QRadioButton::toggled, this, UpdatePSNIDEdits);
67+
auto version_layout = new QVBoxLayout(nullptr);
68+
ps4_pre9_radio_button = new QRadioButton(tr("< 7.0"), this);
69+
version_layout->addWidget(ps4_pre9_radio_button);
70+
connect(ps4_pre9_radio_button, &QRadioButton::toggled, this, UpdatePSNIDEdits);
71+
ps4_pre10_radio_button = new QRadioButton(tr(">= 7.0, < 8.0"), this);
72+
version_layout->addWidget(ps4_pre10_radio_button);
73+
connect(ps4_pre10_radio_button, &QRadioButton::toggled, this, UpdatePSNIDEdits);
74+
ps4_10_radio_button = new QRadioButton(tr(">= 8.0"), this);
75+
version_layout->addWidget(ps4_10_radio_button);
76+
connect(ps4_10_radio_button, &QRadioButton::toggled, this, UpdatePSNIDEdits);
77+
form_layout->addRow(tr("PS4 Firmware:"), version_layout);
7078

71-
psn_account_id_radio_button = new QRadioButton(tr("PSN Account-ID (base64) for PS4 >= 7.0:"), this);
79+
psn_online_id_edit = new QLineEdit(this);
80+
form_layout->addRow(tr("PSN Online-ID (username, case-sensitive):"), psn_online_id_edit);
7281
psn_account_id_edit = new QLineEdit(this);
73-
form_layout->addRow(psn_account_id_radio_button, psn_account_id_edit);
74-
psn_account_id_radio_button->setChecked(true);
75-
connect(psn_account_id_radio_button, &QRadioButton::toggled, this, UpdatePSNIDEdits);
82+
form_layout->addRow(tr("PSN Account-ID (base64):"), psn_account_id_edit);
83+
84+
ps4_10_radio_button->setChecked(true);
7685

7786
UpdatePSNIDEdits();
7887

@@ -96,11 +105,17 @@ RegistDialog::~RegistDialog()
96105
{
97106
}
98107

108+
bool RegistDialog::NeedAccountId()
109+
{
110+
return !ps4_pre9_radio_button->isChecked();
111+
}
112+
99113
void RegistDialog::ValidateInput()
100114
{
115+
bool need_account_id = NeedAccountId();
101116
bool valid = !host_edit->text().trimmed().isEmpty()
102-
&& (!psn_online_id_radio_button->isChecked() || !psn_online_id_edit->text().trimmed().isEmpty())
103-
&& (!psn_account_id_radio_button->isChecked() || !psn_account_id_radio_button->text().trimmed().isEmpty())
117+
&& !(!need_account_id && psn_online_id_edit->text().trimmed().isEmpty())
118+
&& !(need_account_id && psn_account_id_edit->text().trimmed().isEmpty())
104119
&& pin_edit->text().length() == PIN_LENGTH;
105120
register_button->setEnabled(valid);
106121
}
@@ -111,8 +126,16 @@ void RegistDialog::accept()
111126
QByteArray host = host_edit->text().trimmed().toUtf8();
112127
info.host = host.constData();
113128

129+
if(ps4_pre9_radio_button->isChecked())
130+
info.target = CHIAKI_TARGET_PS4_8;
131+
else if(ps4_pre10_radio_button->isChecked())
132+
info.target = CHIAKI_TARGET_PS4_9;
133+
else
134+
info.target = CHIAKI_TARGET_PS4_10;
135+
136+
bool need_account_id = NeedAccountId();
114137
QByteArray psn_id; // keep this out of the if scope
115-
if(psn_online_id_radio_button->isChecked())
138+
if(!need_account_id)
116139
{
117140
psn_id = psn_online_id_edit->text().trimmed().toUtf8();
118141
info.psn_online_id = psn_id.constData();

lib/include/chiaki/common.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@ CHIAKI_EXPORT const char *chiaki_error_string(ChiakiErrorCode code);
7272
CHIAKI_EXPORT void *chiaki_aligned_alloc(size_t alignment, size_t size);
7373
CHIAKI_EXPORT void chiaki_aligned_free(void *ptr);
7474

75+
typedef enum
76+
{
77+
// values must not change
78+
CHIAKI_TARGET_PS4_UNKNOWN = 0,
79+
CHIAKI_TARGET_PS4_8 = 800,
80+
CHIAKI_TARGET_PS4_9 = 900,
81+
CHIAKI_TARGET_PS4_10 = 1000
82+
} ChiakiTarget;
83+
7584
/**
7685
* Perform initialization of global state needed for using the Chiaki lib
7786
*/

lib/include/chiaki/regist.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ extern "C" {
3333

3434
typedef struct chiaki_regist_info_t
3535
{
36+
ChiakiTarget target;
3637
const char *host;
3738
bool broadcast;
3839

@@ -94,7 +95,7 @@ CHIAKI_EXPORT void chiaki_regist_stop(ChiakiRegist *regist);
9495
/**
9596
* @param psn_account_id must be exactly of size CHIAKI_PSN_ACCOUNT_ID_SIZE
9697
*/
97-
CHIAKI_EXPORT ChiakiErrorCode chiaki_regist_request_payload_format(uint8_t *buf, size_t *buf_size, ChiakiRPCrypt *crypt, const char *psn_online_id, const uint8_t *psn_account_id);
98+
CHIAKI_EXPORT ChiakiErrorCode chiaki_regist_request_payload_format(ChiakiTarget target, const uint8_t *ambassador, uint8_t *buf, size_t *buf_size, ChiakiRPCrypt *crypt, const char *psn_online_id, const uint8_t *psn_account_id, uint32_t pin);
9899

99100
#ifdef __cplusplus
100101
}

lib/include/chiaki/rpcrypt.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,18 @@ extern "C" {
3131

3232
typedef struct chiaki_rpcrypt_t
3333
{
34+
ChiakiTarget target;
3435
uint8_t bright[CHIAKI_RPCRYPT_KEY_SIZE];
3536
uint8_t ambassador[CHIAKI_RPCRYPT_KEY_SIZE];
3637
} ChiakiRPCrypt;
3738

38-
CHIAKI_EXPORT void chiaki_rpcrypt_bright_ambassador(uint8_t *bright, uint8_t *ambassador, const uint8_t *nonce, const uint8_t *morning);
39-
CHIAKI_EXPORT void chiaki_rpcrypt_aeropause(uint8_t *aeropause, const uint8_t *ambassador);
39+
CHIAKI_EXPORT void chiaki_rpcrypt_bright_ambassador(ChiakiTarget target, uint8_t *bright, uint8_t *ambassador, const uint8_t *nonce, const uint8_t *morning);
40+
CHIAKI_EXPORT void chiaki_rpcrypt_aeropause_ps4_pre10(uint8_t *aeropause, const uint8_t *ambassador);
41+
CHIAKI_EXPORT void chiaki_rpcrypt_aeropause(size_t key_1_off, uint8_t *aeropause, const uint8_t *ambassador);
4042

41-
CHIAKI_EXPORT void chiaki_rpcrypt_init_auth(ChiakiRPCrypt *rpcrypt, const uint8_t *nonce, const uint8_t *morning);
42-
CHIAKI_EXPORT void chiaki_rpcrypt_init_regist(ChiakiRPCrypt *rpcrypt, const uint8_t *ambassador, uint32_t pin);
43+
CHIAKI_EXPORT void chiaki_rpcrypt_init_auth(ChiakiRPCrypt *rpcrypt, ChiakiTarget target, const uint8_t *nonce, const uint8_t *morning);
44+
CHIAKI_EXPORT void chiaki_rpcrypt_init_regist_ps4_pre10(ChiakiRPCrypt *rpcrypt, const uint8_t *ambassador, uint32_t pin);
45+
CHIAKI_EXPORT ChiakiErrorCode chiaki_rpcrypt_init_regist(ChiakiRPCrypt *rpcrypt, const uint8_t *ambassador, size_t key_0_off, uint32_t pin);
4346
CHIAKI_EXPORT ChiakiErrorCode chiaki_rpcrypt_generate_iv(ChiakiRPCrypt *rpcrypt, uint8_t *iv, uint64_t counter);
4447
CHIAKI_EXPORT ChiakiErrorCode chiaki_rpcrypt_encrypt(ChiakiRPCrypt *rpcrypt, uint64_t counter, const uint8_t *in, uint8_t *out, size_t sz);
4548
CHIAKI_EXPORT ChiakiErrorCode chiaki_rpcrypt_decrypt(ChiakiRPCrypt *rpcrypt, uint64_t counter, const uint8_t *in, uint8_t *out, size_t sz);

lib/include/chiaki/session.h

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,16 @@ extern "C" {
4343
#define CHIAKI_RP_APPLICATION_REASON_IN_USE 0x80108b10
4444
#define CHIAKI_RP_APPLICATION_REASON_CRASH 0x80108b15
4545
#define CHIAKI_RP_APPLICATION_REASON_RP_VERSION 0x80108b11
46-
// unknown: 0x80108bff
46+
#define CHIAKI_RP_APPLICATION_REASON_UNKNOWN 0x80108bff
4747

4848
CHIAKI_EXPORT const char *chiaki_rp_application_reason_string(uint32_t reason);
4949

50-
typedef enum {
51-
CHIAKI_RP_VERSION_UNKNOWN = 0,
52-
CHIAKI_RP_VERSION_8_0 = 800,
53-
CHIAKI_RP_VERSION_9_0 = 900
54-
} ChiakiRpVersion;
55-
5650
/**
5751
* @return RP-Version string or NULL
5852
*/
59-
CHIAKI_EXPORT const char *chiaki_rp_version_string(ChiakiRpVersion version);
53+
CHIAKI_EXPORT const char *chiaki_rp_version_string(ChiakiTarget target);
6054

61-
CHIAKI_EXPORT ChiakiRpVersion chiaki_rp_version_parse(const char *rp_version_str);
55+
CHIAKI_EXPORT ChiakiTarget chiaki_rp_version_parse(const char *rp_version_str);
6256

6357

6458
#define CHIAKI_RP_DID_SIZE 32
@@ -171,7 +165,7 @@ typedef struct chiaki_session_t
171165
ChiakiConnectVideoProfile video_profile;
172166
} connect_info;
173167

174-
ChiakiRpVersion rp_version;
168+
ChiakiTarget target;
175169

176170
uint8_t nonce[CHIAKI_RPCRYPT_KEY_SIZE];
177171
ChiakiRPCrypt rpcrypt;

0 commit comments

Comments
 (0)