A tool for deriving PKG packet encryption keys for ps4 written in c++
| 1 | // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project |
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | |
| 4 | #include "common/native_clock.h" |
| 5 | #include "common/rdtsc.h" |
| 6 | #include "common/uint128.h" |
| 7 | |
| 8 | namespace Common { |
| 9 | |
| 10 | NativeClock::NativeClock() |
| 11 | : rdtsc_frequency{EstimateRDTSCFrequency()}, |
| 12 | ns_rdtsc_factor{GetFixedPoint64Factor(std::nano::den, rdtsc_frequency)}, |
| 13 | us_rdtsc_factor{GetFixedPoint64Factor(std::micro::den, rdtsc_frequency)}, |
| 14 | ms_rdtsc_factor{GetFixedPoint64Factor(std::milli::den, rdtsc_frequency)} {} |
| 15 | |
| 16 | u64 NativeClock::GetTimeNS(u64 base_ptc /*= 0*/) const { |
| 17 | return MultiplyHigh(GetUptime() - base_ptc, ns_rdtsc_factor); |
| 18 | } |
| 19 | |
| 20 | u64 NativeClock::GetTimeUS(u64 base_ptc /*= 0*/) const { |
| 21 | return MultiplyHigh(GetUptime() - base_ptc, us_rdtsc_factor); |
| 22 | } |
| 23 | |
| 24 | u64 NativeClock::GetTimeMS(u64 base_ptc /*= 0*/) const { |
| 25 | return MultiplyHigh(GetUptime() - base_ptc, ms_rdtsc_factor); |
| 26 | } |
| 27 | |
| 28 | u64 NativeClock::GetUptime() const { |
| 29 | return FencedRDTSC(); |
| 30 | } |
| 31 | |
| 32 | } // namespace Common |
| 33 |