mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-03 00:39:14 +00:00
makerom v0.5
This commit is contained in:
@@ -1,89 +0,0 @@
|
||||
# Default value for application
|
||||
BasicInfo:
|
||||
Title : "Homebrew"
|
||||
CompanyCode : "00"
|
||||
MediaSize : 128MB # 128MB / 256MB / 512MB / 1GB / 2GB
|
||||
MediaFootPadding: false
|
||||
ProductCode : "CTR-P-HAXX"
|
||||
ContentType : Application # Application / SystemUpdate / Manual / Child / Trial
|
||||
Logo : Licensed # Nintendo / Licensed / Distributed
|
||||
BackupMemoryType: None # None / 128KB / 512KB
|
||||
|
||||
Rom:
|
||||
# Specifies the root path of the file system to include in the ROM.
|
||||
#HostRoot: "$(ROMFS_ROOT)"
|
||||
SaveDataSize: 512KB
|
||||
DefaultReject:
|
||||
- .*
|
||||
File:
|
||||
- "*"
|
||||
|
||||
|
||||
TitleInfo:
|
||||
UniqueId: 0xff3ff
|
||||
#TargetCategory: Contents
|
||||
Category: Application
|
||||
#DemoIndex: 1
|
||||
Version: 0
|
||||
|
||||
CardInfo:
|
||||
#WritableAddress: 0x200
|
||||
#CardType : S2 # S1 / S2
|
||||
#CryptoType : 3 # 0 - 3
|
||||
CardDevice : NorFlash # NorFlash(0), None(1), BT(2)
|
||||
#MediaType : CARD1 # Card1 / Card2
|
||||
BackupWriteWaitTime: 0
|
||||
|
||||
Option:
|
||||
UseOnSD: true # true if App is to be installed to SD
|
||||
EnableCompress: true
|
||||
FreeProductCode: true
|
||||
EnableCrypt : false
|
||||
|
||||
ExeFs:
|
||||
ReadOnly:
|
||||
- .rodata
|
||||
- RO
|
||||
ReadWrite:
|
||||
- .data
|
||||
- RO
|
||||
Text:
|
||||
- .text
|
||||
- STUP_ENTRY
|
||||
|
||||
PlainRegion:
|
||||
- .module_id
|
||||
|
||||
AccessControlInfo:
|
||||
#UseOtherVariationSaveData : true
|
||||
#UseExtSaveData : true
|
||||
#ExtSaveDataId: 0xffffffff
|
||||
SystemSaveDataId1: 0x220
|
||||
SystemSaveDataId2: 0x00040010
|
||||
#OtherUserSaveDataId1: 0x220
|
||||
#OtherUserSaveDataId2: 0x330
|
||||
#OtherUserSaveDataId3: 0x440
|
||||
UseExtendedSaveDataAccessControl: true
|
||||
AccessibleSaveDataIds: [0x101, 0x202, 0x303, 0x404, 0x505, 0x606]
|
||||
FileSystemAccess:
|
||||
#- CategorySystemApplication #0x1
|
||||
#- CategoryHardwareCheck #0x2
|
||||
#- CategoryFileSystemTool #0x4
|
||||
- Debug #0x8
|
||||
#- TwlCardBackup #0x10
|
||||
#- TwlNandData #0x20
|
||||
#- Boss #0x40
|
||||
- DirectSdmc #0x80
|
||||
#- Core #0x100
|
||||
#- CtrNandRo #0x200
|
||||
#- CtrNandRw #0x400
|
||||
#- CtrNandRoWrite #0x800
|
||||
#- CategorySystemSettings #0x1000
|
||||
#- CardBoard #0x2000
|
||||
#- ExportImportIvs #0x4000
|
||||
- DirectSdmcWrite #0x8000
|
||||
|
||||
SystemControlInfo:
|
||||
RemasterVersion: 5
|
||||
StackSize: 0x40000
|
||||
#JumpId: 0
|
||||
@@ -1,297 +0,0 @@
|
||||
# Default value for application
|
||||
BasicInfo:
|
||||
Title : "Homebrew"
|
||||
CompanyCode : "00"
|
||||
MediaSize : 128MB # 128MB / 256MB / 512MB / 1GB / 2GB
|
||||
MediaFootPadding: false
|
||||
ProductCode : "CTR-P-HAXX"
|
||||
ContentType : Application # Application / SystemUpdate / Manual / Child / Trial
|
||||
Logo : Licensed # Nintendo / Licensed / Distributed
|
||||
BackupMemoryType: None # None / 128KB / 512KB
|
||||
|
||||
Rom:
|
||||
# Specifies the root path of the file system to include in the ROM.
|
||||
#HostRoot: "$(ROMFS_ROOT)"
|
||||
SaveDataSize: 512KB
|
||||
DefaultReject:
|
||||
- .*
|
||||
File:
|
||||
- "*"
|
||||
|
||||
|
||||
TitleInfo:
|
||||
UniqueId: 0xff3ff
|
||||
#TargetCategory: Contents
|
||||
Category: Application
|
||||
#DemoIndex: 1
|
||||
Version: 0
|
||||
|
||||
CardInfo:
|
||||
#WritableAddress: 0x200
|
||||
#CardType : S2 # S1 / S2
|
||||
#CryptoType : 3 # 0 - 3
|
||||
CardDevice : NorFlash # NorFlash(0), None(1), BT(2)
|
||||
#MediaType : CARD1 # Card1 / Card2
|
||||
BackupWriteWaitTime: 0
|
||||
|
||||
Option:
|
||||
UseOnSD: true # true if App is to be installed to SD
|
||||
EnableCompress: true
|
||||
FreeProductCode: true
|
||||
EnableCrypt : false
|
||||
|
||||
ExeFs:
|
||||
ReadOnly:
|
||||
- .rodata
|
||||
- RO
|
||||
ReadWrite:
|
||||
- .data
|
||||
- RO
|
||||
Text:
|
||||
- .text
|
||||
- STUP_ENTRY
|
||||
|
||||
PlainRegion:
|
||||
- .module_id
|
||||
|
||||
AccessControlInfo:
|
||||
MaxCpu: 0x0 # 0x9E
|
||||
DisableDebug : true
|
||||
EnableForceDebug : true
|
||||
CanWriteSharedPage : true
|
||||
CanUsePrivilegedPriority : true
|
||||
CanUseNonAlphabetAndNumber : true
|
||||
PermitMainFunctionArgument : true
|
||||
CanShareDeviceMemory : true
|
||||
#UseOtherVariationSaveData : true
|
||||
#UseExtSaveData : true
|
||||
RunnableOnSleep : true
|
||||
SpecialMemoryArrange : true
|
||||
#ExtSaveDataId: 0xffffffff
|
||||
SystemSaveDataId1: 0x220
|
||||
SystemSaveDataId2: 0x00040010
|
||||
#OtherUserSaveDataId1: 0x220
|
||||
#OtherUserSaveDataId2: 0x330
|
||||
#OtherUserSaveDataId3: 0x440
|
||||
UseExtendedSaveDataAccessControl: true
|
||||
AccessibleSaveDataIds: [0x101, 0x202, 0x303, 0x404, 0x505, 0x606]
|
||||
IoAccessControl:
|
||||
- FsMountNand # 0x1
|
||||
- FsMountNandRoWrite #0x2
|
||||
- FsMountTwln #0x4
|
||||
- FsMountWnand # 0x8
|
||||
- FsMountCardSpi #0x10
|
||||
- UseSdif3 # 0x20
|
||||
- CreateSeed # 0x40
|
||||
- UseCardSpi # 0x80
|
||||
FileSystemAccess:
|
||||
- CategorySystemApplication #0x1
|
||||
- CategoryHardwareCheck #0x2
|
||||
- CategoryFileSystemTool #0x4
|
||||
- Debug #0x8
|
||||
- TwlCardBackup #0x10
|
||||
- TwlNandData #0x20
|
||||
- Boss #0x40
|
||||
- DirectSdmc #0x80
|
||||
- Core #0x100
|
||||
- CtrNandRo #0x200
|
||||
- CtrNandRw #0x400
|
||||
- CtrNandRoWrite #0x800
|
||||
- CategorySystemSettings #0x1000
|
||||
- CardBoard #0x2000
|
||||
- ExportImportIvs #0x4000
|
||||
- DirectSdmcWrite #0x8000
|
||||
InterruptNumbers:
|
||||
- 0x1
|
||||
AffinityMask: 1
|
||||
DescVersion: 2
|
||||
DisableDebug: false
|
||||
SystemCallAccess:
|
||||
ArbitrateAddress: 34
|
||||
Break: 60
|
||||
CancelTimer: 28
|
||||
ClearEvent: 25
|
||||
ClearTimer: 29
|
||||
CloseHandle: 35
|
||||
ConnectToPort: 45
|
||||
ControlMemory: 1
|
||||
CreateAddressArbiter: 33
|
||||
CreateEvent: 23
|
||||
CreateMemoryBlock: 30
|
||||
CreateMutex: 19
|
||||
CreateSemaphore: 21
|
||||
CreateThread: 8
|
||||
CreateTimer: 26
|
||||
DuplicateHandle: 39
|
||||
ExitProcess: 3
|
||||
ExitThread: 9
|
||||
GetCurrentProcessorNumber: 17
|
||||
GetHandleInfo: 41
|
||||
GetProcessId: 53
|
||||
GetProcessIdOfThread: 54
|
||||
GetProcessIdealProcessor: 6
|
||||
GetProcessInfo: 43
|
||||
GetResourceLimit: 56
|
||||
GetResourceLimitCurrentValues: 58
|
||||
GetResourceLimitLimitValues: 57
|
||||
GetSystemInfo: 42
|
||||
GetSystemTick: 40
|
||||
GetThreadContext: 59
|
||||
GetThreadId: 55
|
||||
GetThreadIdealProcessor: 15
|
||||
GetThreadInfo: 44
|
||||
GetThreadPriority: 11
|
||||
MapMemoryBlock: 31
|
||||
OutputDebugString: 61
|
||||
QueryMemory: 2
|
||||
ReleaseMutex: 20
|
||||
ReleaseSemaphore: 22
|
||||
SendSyncRequest1: 46
|
||||
SendSyncRequest2: 47
|
||||
SendSyncRequest3: 48
|
||||
SendSyncRequest4: 49
|
||||
SendSyncRequest: 50
|
||||
SetThreadPriority: 12
|
||||
SetTimer: 27
|
||||
SignalEvent: 24
|
||||
SleepThread: 10
|
||||
UnmapMemoryBlock: 32
|
||||
WaitSynchronization1: 36
|
||||
WaitSynchronizationN: 37
|
||||
HandleTableSize: 512
|
||||
IORegisterMapping:
|
||||
- 1ff50000-1ff57fff
|
||||
- 1ff70000-1ff77fff
|
||||
IdealProcessor: 0
|
||||
MemoryMapping:
|
||||
- 1f000000-1f5fffff:r
|
||||
MemoryType: Application
|
||||
Priority: 16
|
||||
ProgramId: 0x00040000ffffff00L
|
||||
ReleaseKernelMajor: "02"
|
||||
ReleaseKernelMinor: "33"
|
||||
ServiceAccessControl:
|
||||
- APT:U
|
||||
- $hioFIO
|
||||
- $hostio0
|
||||
- $hostio1
|
||||
- ac:u
|
||||
- boss:U
|
||||
- cam:u
|
||||
- cecd:u
|
||||
- cfg:u
|
||||
- dlp:FKCL
|
||||
- dlp:SRVR
|
||||
- dsp::DSP
|
||||
- frd:u
|
||||
- fs:USER
|
||||
- gsp::Gpu
|
||||
- hid:USER
|
||||
- http:C
|
||||
- mic:u
|
||||
- ndm:u
|
||||
- news:u
|
||||
- nwm::UDS
|
||||
- ptm:u
|
||||
- pxi:dev
|
||||
- soc:U
|
||||
- ssl:C
|
||||
- y2r:u
|
||||
- ldr:ro
|
||||
- ir:USER
|
||||
CoreVersion: 2
|
||||
StorageId:
|
||||
- 0
|
||||
|
||||
SystemControlInfo:
|
||||
RemasterVersion: 5
|
||||
Dependency:
|
||||
ac: 0x0004013000002402L
|
||||
am: 0x0004013000001502L
|
||||
boss: 0x0004013000003402L
|
||||
camera: 0x0004013000001602L
|
||||
cecd: 0x0004013000002602L
|
||||
cfg: 0x0004013000001702L
|
||||
codec: 0x0004013000001802L
|
||||
csnd: 0x0004013000002702L
|
||||
dlp: 0x0004013000002802L
|
||||
dsp: 0x0004013000001a02L
|
||||
friends: 0x0004013000003202L
|
||||
gpio: 0x0004013000001b02L
|
||||
gsp: 0x0004013000001c02L
|
||||
hid: 0x0004013000001d02L
|
||||
http: 0x0004013000002902L
|
||||
i2c: 0x0004013000001e02L
|
||||
ir: 0x0004013000003302L
|
||||
mcu: 0x0004013000001f02L
|
||||
mic: 0x0004013000002002L
|
||||
ndm: 0x0004013000002b02L
|
||||
news: 0x0004013000003502L
|
||||
nim: 0x0004013000002c02L
|
||||
nwm: 0x0004013000002d02L
|
||||
pdn: 0x0004013000002102L
|
||||
ps: 0x0004013000003102L
|
||||
ptm: 0x0004013000002202L
|
||||
ro: 0x0004013000003702L
|
||||
socket: 0x0004013000002e02L
|
||||
spi: 0x0004013000002302L
|
||||
ssl: 0x0004013000002f02L
|
||||
StackSize: 0x40000
|
||||
|
||||
CommonHeaderKey:
|
||||
D: |
|
||||
jL2yO86eUQnYbXIrzgFVMm7FVze0LglZ2f5g+c42hWoEdnb5BOotaMQPBfqt
|
||||
aUyAEmzQPaoi/4l4V+hTJRXQfthVRqIEx27B84l8LA6Tl5Fy9PaQaQ+4yRfP
|
||||
g6ylH2l0EikrIVjy2uMlFgl0QJCrG+QGKHftxhaGCifdAwFNmiZuyJ/TmktZ
|
||||
0RCb66lYcr2h/p2G7SnpKUliS9h9KnpmG+UEgVYQUK+4SCfByUa9PxYGpT0E
|
||||
nw1UcRz0gsBmdOqcgzwnAd9vVqgb42hVn6uQZyAl+j1RKiMWywZarazIR/k5
|
||||
Lmr4+groimSEa+3ajyoIho9WaWTDmFU3mkhA2tUDIQ==
|
||||
DP: |
|
||||
pD8c9uymjXDj6oyhx7EmQcrEDizxsj6hTjJ0x3G/PYNv/v2/DA9gp3X30h35
|
||||
uRZ1O+SgonWCGVnOJ7Wfjr4w2cOcSzxpzT3PQsS6Gs9z0RvcDsUHRL5f2EiT
|
||||
6A1ZPj6xyzmo9Ts6w9yfxCwaHci0f2hP9bq9FimfFKigCoNcFBE=
|
||||
DQ: |
|
||||
y+6Pado7N+SIZJgQ7zEGyQ7/SxGHHEy5uW04HHde9IqHD5HFGG2GegF655mM
|
||||
iI9ja1eTCh/AFs8xjAg0drQEvB5q80TjPNKtwVUT8ghOlN3xTzpdaLwX0d+c
|
||||
Twy74VY4KPawcdDeLaGFtXknhFOdGmIbx+BInibz7NZ9eLqGwaE=
|
||||
Exponent: |
|
||||
AQAB
|
||||
InverseQ: |
|
||||
tc9/lcF837g8AdfyeuCyuLyd36Zm1ZmJ1VSSuH8y3/1ZhBYZkOFXxU7EhMvJ
|
||||
FyAu4qyCA9otzCXM+cqKxE3ZCkSconsXOu8szZTwuINSkwHlt22FtiTfPt+V
|
||||
/g5kjtkjoZVOGfSvvfel9Smwy1yrFvKfi/yJsjATeNFjiEquV/w=
|
||||
Modulus: |
|
||||
z+yySANtuAnjXGxiLKlJ4fT0DGzD5S+dUKArWgDGcgALowRdlEbnABtIhbVh
|
||||
LMl0yitDE8F4l1wzLwfHhfDa22CWUA98S3rXF53k5cOrb12leDKtBN2Wbtx1
|
||||
/8Iv+qLuRonNrmmSpEi8RkfEjIlj4QpNHNxGL1twinzpIpwJC6iXQMoqfYSh
|
||||
BEou29fQZEOc0HgRQYgz3TFikC0X8sapK5xwq9zTq13a7j1sDoH/9mdaRPms
|
||||
Bz0jlHVlkyAMxXYdD2UGPSGi8JaAtwpJUzijXcB0PKTZQDaFH4zRLRX57ySp
|
||||
fp2yHvigcoEXd3OxVn+tBaLSMFr1068PEEpS2AlHlw==
|
||||
P: |
|
||||
6SdD3AiAybNamgUgGJduyFWO1/LeakmoJm+23IEJADyU4nz+reGjxQnMrR+x
|
||||
syuB8VPGuf1z0SInfRIu9PEjIfW9/H/fZ59GwckQuJbneODjW7KU1jM3cTVX
|
||||
+AWvaxWDwlCUmVSYD2OySUJlo3szGmBYh/o/tKAq7kElaaOt+cc=
|
||||
Q: |
|
||||
5EyO8bCyfqgLTfipAG/nNLObQbqMyARdQfudxh4eQqHmzblEM3jareuA8eUZ
|
||||
K8pIaP+U9UfxwWTeFsOulrpsm04j4gS71WGNx3YwOIRPXXOn7zBkxA3AO9qq
|
||||
K8lMeV3gNsdt4Fz8Zh2F68HSP4avB+ThO2S18SXMyIkcM7Sbw7E=
|
||||
Signature: |
|
||||
3xyLmORvojVswxgXmPPOVH4ULn8e2G3PvClO/jIuwRGtRprGcOruKFUi4TYF
|
||||
HASKzg8Mg4/I1t4RjurPrZvPgQ3rcROz066DAkwOEFBZPO5gBvuMf8IgJAFi
|
||||
VYdgD636cy72ZWLS5RBFaXA5A9E57FDB1CU5spARTpXLGevKD7X6x7Di1+Bx
|
||||
w+VVM55c3E07URENMXiWytcYWO4A6SjyaHbUV/5lsUtJP/amWErH/MS7YbxY
|
||||
jVVl5gp5OUG4gGH3BcP+1osJgsJfplb57h0OBj6fP/GTmk+i1ZGHiv7Pw/yK
|
||||
scR46dEa97HTIMuDvgPVyqVeF6aRENS+I9ZLTwOprg==
|
||||
Descriptor: |
|
||||
AP///wAABAACAAAAAAAFGJ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiIAAAAAAAABBUFQ6VQAAACRo
|
||||
aW9GSU8AJGhvc3RpbzAkaG9zdGlvMWFjOnUAAAAAYm9zczpVAABjYW06dQAA
|
||||
AGNlY2Q6dQAAY2ZnOnUAAABkbHA6RktDTGRscDpTUlZSZHNwOjpEU1BmcmQ6
|
||||
dQAAAGZzOlVTRVIAZ3NwOjpHcHVoaWQ6VVNFUmh0dHA6QwAAbWljOnUAAABu
|
||||
ZG06dQAAAG5ld3M6dQAAbndtOjpVRFNwdG06dQAAAHB4aTpkZXYAc29jOlUA
|
||||
AABzc2w6QwAAAHkycjp1AAAAbGRyOnJvAABpcjpVU0VSAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAABOn/rw/7//8ec/APIA8JH/APaR/1D/gf9Y/4H/cP+B/3j/gf8B
|
||||
AQD/AAIA/iECAPz/////////////////////////////////////////////
|
||||
////////////////////////////////////////AAAAAAAAAAAAAAAAAAAA
|
||||
AAADAAAAAAAAAAAAAAAAAAI=
|
||||
@@ -19,9 +19,9 @@ CFLAGS = --std=c99 -Wall -I. -DMAKEROM_VER_MAJOR=$(VER_MAJOR) -DMAKEROM_VER_MINO
|
||||
CC = gcc
|
||||
|
||||
# MAKEROM Build Settings
|
||||
MAKEROM_BUILD_FLAGS = #-DDEBUG #-DELF_DEBUG
|
||||
MAKEROM_BUILD_FLAGS = #-DDEBUG #-DPUBLIC_BUILD
|
||||
VER_MAJOR = 0
|
||||
VER_MINOR = 3
|
||||
VER_MINOR = 5
|
||||
OUTPUT = makerom
|
||||
|
||||
main: build
|
||||
|
||||
@@ -1,320 +0,0 @@
|
||||
#ifndef _ACCESSDESC_SIG_H_
|
||||
#define _ACCESSDESC_SIG_H_
|
||||
|
||||
/* CTR_SDK 1 (1.2.0) */
|
||||
// DependencyList
|
||||
static const unsigned char sdk1_dep_list[0x180] =
|
||||
{
|
||||
0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// APP
|
||||
static const unsigned char App_sdk1_HdrPubK[0x100] =
|
||||
{
|
||||
0x9B, 0x82, 0x9C, 0x19, 0x01, 0x73, 0x23, 0x50, 0x89, 0xE3, 0x0B, 0xC8, 0x8F, 0xFB, 0xA5, 0xE4, 0xFD, 0x44, 0xAE, 0x49, 0x32, 0xC7, 0xEF, 0x0A, 0x7E, 0x93, 0x95, 0xBA, 0xA2, 0x48, 0x4D, 0x8E, 0x18, 0x82, 0x34, 0x66, 0xFE, 0xDA, 0x7A, 0x45, 0x4A, 0x7D, 0xD5, 0x3C, 0xC6, 0x5C, 0xE0, 0x71, 0xFC, 0xD0, 0x82, 0xCC, 0xB2, 0xCF, 0x77, 0x0E, 0xAD, 0xCD, 0xD2, 0xAC, 0x1D, 0x66, 0x1B, 0xC1, 0xEA, 0xAC, 0x39, 0x96, 0x2C, 0x52, 0xDE, 0xFF, 0xF2, 0x74, 0xF6, 0xC5, 0xCA, 0x99, 0x31, 0x95, 0x13, 0xBB, 0x3F, 0xED, 0x30, 0xAE, 0x0A, 0xD3, 0x86, 0x0D, 0x0B, 0xF5, 0x56, 0x7D, 0x33, 0xBA, 0xA1, 0x39, 0xA2, 0xF5, 0xB6, 0x47, 0x78, 0x1F, 0xFD, 0x04, 0xA3, 0x49, 0xA9, 0x10, 0xD3, 0x41, 0x2E, 0x92, 0x7D, 0xE1, 0xA4, 0xA8, 0x02, 0x18, 0x01, 0x2C, 0xC2, 0x61, 0xB1, 0xAC, 0xCB, 0xB3, 0x7A, 0x64, 0xB1, 0xC3, 0xE6, 0x3B, 0x50, 0xAD, 0xDD, 0x55, 0xAB, 0x28, 0xDA, 0x59, 0xE7, 0x57, 0x6A, 0x76, 0x4F, 0x6B, 0x08, 0xD1, 0x61, 0x7D, 0x28, 0xD5, 0x88, 0x7B, 0x8E, 0x80, 0x78, 0xF3, 0xFF, 0x50, 0x00, 0xBD, 0x73, 0xFB, 0x62, 0xB3, 0xCA, 0xA8, 0x05, 0x48, 0xE6, 0xE6, 0x71, 0xB5, 0xAC, 0xDA, 0xE9, 0xC6, 0x1F, 0x9B, 0x72, 0x98, 0x2E, 0xFF, 0xB2, 0x9C, 0x36, 0x9F, 0x7E, 0x7D, 0x25, 0x65, 0x6F, 0xB0, 0x60, 0xB1, 0xB5, 0x5F, 0xCF, 0x74, 0x29, 0x91, 0x9D, 0xAB, 0x84, 0x97, 0x1A, 0x27, 0x5D, 0x69, 0x49, 0x16, 0xF8, 0x77, 0x31, 0x26, 0x3E, 0x6F, 0x97, 0x41, 0x4A, 0x26, 0xFD, 0x5B, 0xAB, 0x65, 0x77, 0x45, 0x1C, 0x76, 0x15, 0xDC, 0x1A, 0x63, 0x0F, 0x51, 0x2D, 0xA0, 0x07, 0x6E, 0xE5, 0x29, 0xD3, 0x37, 0x4B, 0xE5, 0x7F, 0xBB, 0x23, 0xD0, 0x2B, 0xB9, 0x76, 0x1F
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk1_HdrPrivK[0x100] =
|
||||
{
|
||||
0x66, 0x9F, 0xB5, 0xC5, 0xA6, 0xB8, 0x45, 0xD8, 0xD3, 0x75, 0xFB, 0x03, 0xBB, 0x48, 0xF5, 0x7C, 0x7D, 0x4B, 0x02, 0xBD, 0x19, 0x7E, 0xE9, 0x98, 0x02, 0x5A, 0x00, 0xD8, 0x6E, 0x59, 0xCA, 0x9C, 0x78, 0x3E, 0x0C, 0xB8, 0xDF, 0x7C, 0x6C, 0x6E, 0x27, 0xAF, 0x8C, 0xB6, 0x13, 0xAD, 0x9D, 0x0C, 0x7C, 0x2B, 0x59, 0xF6, 0x1E, 0x16, 0x5D, 0x5A, 0x59, 0x86, 0x57, 0x7D, 0xEF, 0xD4, 0xBF, 0x82, 0xA4, 0x0C, 0x4D, 0xE0, 0x75, 0x95, 0xA6, 0xC6, 0x3F, 0x49, 0xC2, 0xC4, 0x5A, 0x63, 0xE8, 0x5D, 0x99, 0xEC, 0xDB, 0x4D, 0xFA, 0xEF, 0x10, 0x03, 0xF1, 0x15, 0xD1, 0x0B, 0x71, 0xAD, 0x24, 0x23, 0x08, 0x5C, 0x91, 0xD7, 0x17, 0x18, 0x69, 0x04, 0xAB, 0x23, 0x91, 0x62, 0x7D, 0xE8, 0xB5, 0x90, 0xF1, 0x5C, 0x09, 0x28, 0x8C, 0x51, 0xB7, 0x38, 0x02, 0x26, 0x78, 0x8C, 0xA2, 0x05, 0x07, 0x53, 0x7D, 0x99, 0x46, 0xFD, 0x12, 0x77, 0x32, 0x0E, 0xA8, 0x54, 0xE3, 0x32, 0x0E, 0x93, 0x05, 0x10, 0xFA, 0x59, 0x7A, 0x5D, 0x2E, 0xDE, 0x32, 0xE8, 0xE9, 0xF0, 0x27, 0x4E, 0x08, 0x83, 0x08, 0xD4, 0x92, 0x58, 0x4D, 0x6D, 0x34, 0x9F, 0xD9, 0xAF, 0xA9, 0x01, 0x62, 0xB5, 0x1A, 0x1D, 0x7E, 0x8D, 0xBB, 0x8A, 0x58, 0xBA, 0xFF, 0xB4, 0xD3, 0x75, 0xF3, 0x44, 0xE7, 0x13, 0x05, 0xC6, 0xC5, 0xA4, 0xD2, 0x6B, 0x18, 0x31, 0x9F, 0xBE, 0x42, 0x45, 0x82, 0x2E, 0x47, 0x9B, 0x26, 0x73, 0x28, 0xD7, 0x9A, 0x64, 0xA6, 0x3D, 0x38, 0x9C, 0x11, 0x36, 0x01, 0x5B, 0x82, 0x2F, 0x7E, 0xA8, 0xC4, 0x82, 0x15, 0x6C, 0x0B, 0xBA, 0x1C, 0x58, 0xF5, 0x81, 0xF9, 0x45, 0xA9, 0xC6, 0x05, 0x6A, 0x2C, 0xA6, 0xCF, 0xF5, 0xDF, 0xEB, 0xBB, 0xC0, 0x92, 0xE3, 0xA6, 0x9D, 0x23, 0x09, 0x09, 0x0E, 0x98, 0x39
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk1_AcexData[0x200] =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk1_AcexSig[0x100] =
|
||||
{
|
||||
0x05, 0x90, 0xAF, 0x65, 0x16, 0x9F, 0x18, 0x2C, 0x17, 0x78, 0x9F, 0xDF, 0xB6, 0x37, 0xCF, 0x26, 0x9B, 0x1B, 0x75, 0x51, 0xB8, 0x57, 0xA3, 0x8F, 0xD7, 0x93, 0x19, 0x61, 0x81, 0x0D, 0x3D, 0xBC, 0x36, 0x50, 0x53, 0xDA, 0x7D, 0xA9, 0x7F, 0xAA, 0x3E, 0x51, 0x2C, 0x75, 0xA1, 0xB9, 0xB1, 0x56, 0xEB, 0x2A, 0x46, 0x21, 0xEC, 0x4F, 0xA7, 0x0C, 0xA1, 0xA8, 0xFD, 0xEE, 0xA3, 0x4A, 0xFD, 0x54, 0xB0, 0x3A, 0x49, 0x5C, 0x8F, 0x8D, 0xB2, 0xBC, 0x32, 0x50, 0x7E, 0x2C, 0x50, 0xD2, 0x1A, 0x6B, 0x61, 0xCB, 0x2A, 0xC9, 0x7E, 0x6E, 0x6A, 0xC8, 0xD6, 0x9B, 0x21, 0xE7, 0x3B, 0xB8, 0x39, 0x1C, 0xD7, 0xEB, 0x69, 0x35, 0xF5, 0xBC, 0xB5, 0x23, 0x54, 0x81, 0x4F, 0x73, 0xAB, 0x9C, 0x55, 0xF0, 0x04, 0x0B, 0x4A, 0xEA, 0x54, 0x08, 0xBF, 0x36, 0x28, 0x12, 0x5E, 0x44, 0x41, 0xF5, 0x3D, 0xFE, 0xA7, 0x6B, 0x35, 0xF2, 0x9A, 0xF2, 0x88, 0xCD, 0xD6, 0x2E, 0x7B, 0xF3, 0xF5, 0x0D, 0x06, 0x2E, 0x13, 0x4F, 0x78, 0xEE, 0x27, 0xAB, 0x31, 0x06, 0x62, 0xE9, 0xB2, 0x3E, 0xC6, 0x99, 0xD7, 0xA9, 0xCC, 0x21, 0x70, 0xD7, 0xCD, 0x9F, 0x03, 0x66, 0x91, 0x7E, 0xBD, 0x3E, 0x83, 0xC4, 0xFF, 0xC9, 0xAA, 0x7E, 0x27, 0xAE, 0x5C, 0x37, 0x7D, 0x93, 0x57, 0x60, 0xB9, 0x0B, 0x71, 0x43, 0x8A, 0x2F, 0x43, 0x50, 0x94, 0xF8, 0x0D, 0x40, 0xCC, 0x64, 0x16, 0x09, 0x70, 0xCD, 0x03, 0xCA, 0x95, 0x30, 0x20, 0xE2, 0x85, 0x2F, 0x2A, 0xCF, 0x65, 0xAA, 0xE9, 0xCF, 0x1F, 0x57, 0xC1, 0x8F, 0xD5, 0x46, 0x51, 0x5A, 0x99, 0x60, 0x65, 0x93, 0xA9, 0xBB, 0xEA, 0x5F, 0xA0, 0x47, 0xD7, 0x11, 0x04, 0xC7, 0xB4, 0x82, 0x66, 0x24, 0x17, 0x17, 0x5E, 0x9D, 0xC8, 0x50, 0x80, 0x63, 0x28, 0xB3, 0xF8, 0xE3
|
||||
};
|
||||
|
||||
// DLP
|
||||
static const unsigned char Dlp_sdk1_HdrPubK[0x100] =
|
||||
{
|
||||
0xD9, 0xF0, 0xC9, 0x35, 0x1E, 0x55, 0xD8, 0x7E, 0x96, 0x53, 0x33, 0x34, 0xBB, 0x8A, 0xAE, 0x03, 0x92, 0x35, 0xE2, 0x05, 0x58, 0x7C, 0xCC, 0x08, 0xB2, 0xDF, 0x43, 0x41, 0xB7, 0x7A, 0xB5, 0x29, 0xEE, 0x4E, 0xF3, 0xC7, 0x35, 0x3B, 0x7E, 0xC5, 0xEE, 0x74, 0xF0, 0xAA, 0x7E, 0x60, 0xF1, 0x28, 0x35, 0x17, 0xD6, 0xC9, 0x9A, 0xF2, 0x84, 0xFE, 0xC8, 0x93, 0x86, 0xF7, 0xA7, 0x36, 0xA6, 0xB0, 0x28, 0xDC, 0xE8, 0x38, 0x0B, 0x54, 0x42, 0x8D, 0x4E, 0x4B, 0x55, 0x0F, 0x4A, 0x0D, 0x72, 0xA0, 0x23, 0xC9, 0x68, 0x22, 0x37, 0x31, 0x88, 0x2C, 0x05, 0x49, 0x86, 0x80, 0x9A, 0xFC, 0x1D, 0x02, 0xE3, 0x20, 0x15, 0x0C, 0x7E, 0x28, 0x40, 0x57, 0xEF, 0xA7, 0xBC, 0xAA, 0xC5, 0xD6, 0xD7, 0x6F, 0xF9, 0x26, 0x9A, 0x32, 0xB2, 0x9E, 0x10, 0x5F, 0x93, 0xE6, 0xB2, 0xC6, 0xB2, 0x62, 0x34, 0x6A, 0xB0, 0xD9, 0x71, 0x3B, 0x0F, 0x34, 0x6C, 0xB1, 0xFE, 0x3A, 0x39, 0xDE, 0x3D, 0x6A, 0xCB, 0x32, 0x95, 0xFA, 0x18, 0x4F, 0xF4, 0xEB, 0x5F, 0x20, 0xE4, 0xEF, 0x64, 0xC5, 0x06, 0x27, 0xC3, 0x44, 0x2A, 0x39, 0x35, 0xD8, 0x00, 0xDF, 0x00, 0xAD, 0xC4, 0x98, 0x06, 0x52, 0xD8, 0x4A, 0xC5, 0x2A, 0x7F, 0x77, 0x50, 0x62, 0x7E, 0x05, 0x3E, 0x8C, 0x28, 0x0A, 0x26, 0xD2, 0x6C, 0x9B, 0x27, 0x65, 0xE9, 0x77, 0x68, 0xE9, 0xE6, 0xAA, 0xBA, 0xF5, 0x85, 0xFC, 0x75, 0x07, 0x84, 0xB2, 0xCA, 0x35, 0x85, 0x52, 0x10, 0x08, 0xEF, 0x85, 0xD3, 0x70, 0x17, 0x31, 0xE1, 0x44, 0xF6, 0x34, 0xDF, 0x7C, 0x42, 0xF7, 0x74, 0xAA, 0xFC, 0xC3, 0xE4, 0x84, 0x2D, 0xBF, 0x15, 0x1E, 0x84, 0x00, 0xE3, 0x80, 0xD7, 0x89, 0x56, 0xEE, 0x60, 0x09, 0x1F, 0xD3, 0xBF, 0xBF, 0x50, 0x8F, 0xA3, 0x0C, 0x72, 0x3F
|
||||
};
|
||||
|
||||
static const unsigned char Dlp_sdk1_HdrPrivK[0x100] =
|
||||
{
|
||||
0x10, 0x19, 0x3A, 0x33, 0xA3, 0x47, 0x02, 0x13, 0xEF, 0xB4, 0xBB, 0x9E, 0x94, 0x8F, 0xDC, 0xE4, 0xC4, 0xA3, 0x18, 0x4B, 0xFE, 0xCA, 0x51, 0x23, 0xFF, 0x5A, 0x80, 0x94, 0x55, 0x22, 0x4A, 0x49, 0x8B, 0xA1, 0xE7, 0x5D, 0xFA, 0xAF, 0xA7, 0x60, 0xA5, 0x89, 0x9B, 0xD1, 0x6C, 0x3E, 0x6A, 0xF1, 0xE6, 0x62, 0x19, 0x6A, 0x90, 0xF8, 0x83, 0x1C, 0x72, 0xE2, 0x7A, 0xE0, 0xC6, 0x48, 0x42, 0x2D, 0xD7, 0x06, 0xE2, 0x5C, 0x69, 0x71, 0xD2, 0xEC, 0xAF, 0x30, 0xDF, 0x5A, 0x9E, 0xC4, 0xB9, 0x87, 0xDC, 0xBC, 0xDE, 0xE5, 0x50, 0x20, 0x67, 0x87, 0xA0, 0xE8, 0x5A, 0x78, 0x1B, 0x7A, 0xAE, 0x05, 0xED, 0x93, 0x0C, 0x1A, 0xFD, 0x22, 0xAA, 0x06, 0x14, 0xDC, 0xD6, 0x11, 0xE3, 0x45, 0x48, 0x6A, 0xAC, 0x03, 0xCE, 0xF6, 0x19, 0xBD, 0x95, 0x46, 0x0A, 0x1D, 0xCB, 0x6C, 0xE3, 0xF6, 0x5F, 0x1A, 0xB3, 0x81, 0xC7, 0xE2, 0xAB, 0xFE, 0xEF, 0xFB, 0xEC, 0xFE, 0x88, 0x36, 0x26, 0x60, 0x47, 0x43, 0x78, 0x36, 0xA7, 0xC8, 0xC9, 0x40, 0x98, 0x2E, 0xF2, 0x7E, 0xE4, 0x0D, 0x6C, 0x45, 0x88, 0x2A, 0x32, 0x9B, 0xA2, 0x7C, 0x39, 0x20, 0xAA, 0x6B, 0x64, 0x35, 0xC6, 0xA9, 0x20, 0x71, 0x4A, 0x78, 0x6E, 0x55, 0x3C, 0x9B, 0xEA, 0x10, 0x73, 0xBB, 0xA7, 0xD8, 0xFE, 0x69, 0x42, 0xB8, 0xE7, 0xA1, 0xE5, 0xDF, 0x8A, 0xDE, 0x4C, 0x2B, 0x3A, 0x92, 0xB8, 0x3E, 0x5E, 0x2C, 0x29, 0x0D, 0xC1, 0x3D, 0x10, 0x65, 0x1E, 0xF1, 0x95, 0xE5, 0xF6, 0x45, 0x15, 0xBF, 0xE2, 0x30, 0xA6, 0x70, 0x19, 0xA4, 0x11, 0x57, 0x12, 0x1C, 0x81, 0x4B, 0x54, 0x04, 0xBE, 0x67, 0xF5, 0x00, 0x22, 0x06, 0xDA, 0x6B, 0xCE, 0x23, 0x3F, 0x86, 0xE4, 0x70, 0x6A, 0xD1, 0x3E, 0xE5, 0x74, 0x44, 0x86, 0xDA, 0xBE, 0x79
|
||||
};
|
||||
|
||||
static const unsigned char Dlp_sdk1_AcexData[0x200] =
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
static const unsigned char Dlp_sdk1_AcexSig[0x100] =
|
||||
{
|
||||
0x13, 0xB2, 0xF4, 0x89, 0xBB, 0xB4, 0xFF, 0x55, 0x7E, 0x3E, 0x9B, 0x90, 0x44, 0x45, 0xC6, 0x8A, 0x17, 0x32, 0x91, 0x77, 0x7D, 0xCB, 0x4A, 0x26, 0x3D, 0xCA, 0xD8, 0x6E, 0x72, 0x27, 0x93, 0x9C, 0xE4, 0x27, 0xFE, 0x54, 0xDC, 0xE7, 0xDC, 0x02, 0x17, 0x9C, 0x82, 0xA8, 0xB0, 0xE8, 0x69, 0x07, 0xE3, 0x34, 0x0E, 0xBF, 0x17, 0x05, 0x58, 0x23, 0x5F, 0x6D, 0xDA, 0xE8, 0xC6, 0xEE, 0x49, 0x29, 0xEF, 0xD7, 0x48, 0x48, 0x41, 0xE2, 0x2A, 0x57, 0x2B, 0x21, 0x13, 0x64, 0xD4, 0x79, 0x5A, 0xE3, 0x84, 0xDA, 0x63, 0x9A, 0x07, 0x39, 0xE2, 0x7E, 0xA7, 0x56, 0x34, 0x1C, 0xE2, 0xAF, 0xCD, 0x65, 0xD1, 0xC0, 0x1B, 0x72, 0xB1, 0x1D, 0xFC, 0xE2, 0x6E, 0x0F, 0xC7, 0xB0, 0xF5, 0x84, 0x0F, 0xA5, 0x2B, 0xDF, 0x3A, 0xCF, 0x43, 0xE8, 0xE4, 0x07, 0x29, 0xC6, 0x41, 0x0E, 0x7B, 0xEE, 0x35, 0xF9, 0xFC, 0xE7, 0x15, 0xF3, 0x8C, 0x3A, 0xB4, 0x77, 0xBD, 0x88, 0x70, 0x83, 0x4A, 0x03, 0x9E, 0x01, 0x9B, 0xBB, 0xD2, 0xE4, 0xA5, 0xBE, 0xF7, 0x80, 0x92, 0x5A, 0x9F, 0x14, 0x9B, 0x49, 0x5D, 0x3D, 0xDC, 0x32, 0x34, 0x7E, 0xC0, 0xD4, 0xAC, 0xDA, 0x8C, 0xF7, 0xA1, 0xE1, 0xCA, 0x29, 0xF5, 0x58, 0x5E, 0xEB, 0x02, 0xB6, 0x67, 0x42, 0x89, 0x46, 0x4C, 0xA6, 0xA8, 0xBD, 0xEB, 0xEB, 0xDD, 0x8F, 0x2E, 0x72, 0x26, 0x49, 0x70, 0x01, 0x7D, 0x5B, 0x03, 0x06, 0x2C, 0x92, 0x1E, 0x55, 0xB2, 0xDA, 0xD7, 0x0D, 0x70, 0x74, 0x42, 0xD5, 0x62, 0x42, 0x3C, 0xC1, 0x70, 0x8E, 0x67, 0xB1, 0xD9, 0xF3, 0x7E, 0xB2, 0xBA, 0x6D, 0x0F, 0x42, 0x65, 0x24, 0x79, 0xE8, 0x8F, 0xB4, 0x4B, 0x32, 0x35, 0xCA, 0x39, 0x70, 0xFE, 0x8E, 0x81, 0x49, 0x73, 0x8D, 0x3C, 0xCD, 0x60, 0xAF, 0xA3, 0x52, 0x45, 0xEE
|
||||
};
|
||||
|
||||
/* CTR_SDK 2 (2.3.4) */
|
||||
static const unsigned char sdk2_dep_list[0x180] =
|
||||
{
|
||||
0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// APP
|
||||
static const unsigned char App_sdk2_HdrPubK[0x100] =
|
||||
{
|
||||
0xE9, 0x45, 0xF0, 0xC6, 0x96, 0xD5, 0x6F, 0x7E, 0xAE, 0x03, 0x92, 0x2E, 0xEA, 0xCB, 0xFD, 0xEA, 0xA4, 0x7A, 0x9F, 0x12, 0xDA, 0x4C, 0x10, 0x0A, 0xBE, 0x08, 0x9D, 0x87, 0xE0, 0x14, 0xAC, 0x7F, 0x39, 0xD2, 0xFE, 0x9D, 0x88, 0xB2, 0x81, 0xF6, 0x1A, 0x9E, 0x15, 0x57, 0xD4, 0xE2, 0x31, 0x08, 0x07, 0xEC, 0x4F, 0x10, 0x00, 0xDE, 0xEF, 0x8B, 0x6F, 0xCF, 0x84, 0xE7, 0x3B, 0x41, 0x08, 0x64, 0x3B, 0x1C, 0x00, 0x7C, 0x73, 0xBB, 0x59, 0x4D, 0xD8, 0xD6, 0xE7, 0x7B, 0xBE, 0xDD, 0x50, 0x98, 0xA1, 0x1A, 0xD5, 0xAA, 0x37, 0x69, 0xB8, 0x25, 0xCB, 0x7B, 0x03, 0x00, 0x90, 0x25, 0xF3, 0x7E, 0x9A, 0x0F, 0xA3, 0xAA, 0xC4, 0xB9, 0x3B, 0x3A, 0x18, 0x2B, 0xBC, 0x9C, 0x11, 0x04, 0x92, 0x16, 0x6E, 0xC3, 0xFA, 0x01, 0xD3, 0x00, 0x02, 0xF3, 0x2E, 0xD5, 0x60, 0xA8, 0xAF, 0xAB, 0xEE, 0x2F, 0x9D, 0x30, 0x3E, 0x0E, 0xDC, 0xB8, 0xEC, 0x87, 0x9E, 0x4A, 0xA9, 0x01, 0x34, 0x69, 0x2C, 0x4C, 0x34, 0xB7, 0x7D, 0xB9, 0x7A, 0x17, 0x74, 0x31, 0xB0, 0x29, 0xC4, 0x7D, 0x27, 0x1F, 0xBA, 0xBA, 0x3F, 0x5B, 0x62, 0xF6, 0x90, 0xB8, 0x37, 0x33, 0xFC, 0x73, 0xD6, 0x19, 0x11, 0xCA, 0x83, 0x2A, 0x58, 0x62, 0x9C, 0xB1, 0x83, 0x43, 0x1D, 0x2C, 0x00, 0xA2, 0xE5, 0x87, 0x97, 0x12, 0x63, 0x31, 0x83, 0x0E, 0xB1, 0x1E, 0x69, 0x99, 0x02, 0xAF, 0xDF, 0xFF, 0x0F, 0xA9, 0x7C, 0x1B, 0x33, 0x9E, 0xFF, 0x9C, 0x14, 0x19, 0xA6, 0xCA, 0xFD, 0xB9, 0x17, 0xE0, 0x22, 0xCF, 0xB5, 0x00, 0x77, 0x2E, 0x31, 0xAD, 0xF7, 0xE5, 0xAD, 0x98, 0x14, 0xDF, 0x19, 0xF0, 0xC9, 0xBE, 0x37, 0xF6, 0xF0, 0x23, 0x66, 0xCF, 0x34, 0xE3, 0xD5, 0x8F, 0xD4, 0x07, 0xBA, 0x06, 0x56, 0x00, 0x66, 0x9A, 0xEB, 0x93
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk2_HdrPrivK[0x100] =
|
||||
{
|
||||
0xBC, 0x49, 0x29, 0xB9, 0x01, 0x52, 0x31, 0x76, 0x4C, 0xBA, 0xB1, 0x29, 0x91, 0x77, 0x29, 0xF2, 0x54, 0xE4, 0x6C, 0xB5, 0x68, 0xE1, 0xF0, 0x28, 0xDB, 0x8E, 0x54, 0xA8, 0xB1, 0xA3, 0xBE, 0x3F, 0xCA, 0xCA, 0x95, 0x9D, 0x4E, 0x12, 0xD7, 0x77, 0x6F, 0xB0, 0x9D, 0x85, 0x91, 0x5D, 0x29, 0x3A, 0x54, 0x3A, 0xD6, 0xEE, 0x11, 0xE5, 0xDF, 0xEF, 0xEA, 0x45, 0xD3, 0xFE, 0x58, 0x03, 0x7B, 0xE4, 0x7B, 0x19, 0x75, 0x02, 0xFE, 0xDE, 0xFF, 0x8C, 0x28, 0x33, 0xFE, 0x10, 0x11, 0xD4, 0xCD, 0x13, 0x05, 0x26, 0x85, 0xC3, 0xA8, 0x8A, 0x7A, 0x8A, 0x77, 0x1D, 0x49, 0x25, 0x11, 0x34, 0xB0, 0xBF, 0x45, 0x56, 0xCE, 0x42, 0x2E, 0x1B, 0x5C, 0xC4, 0xDD, 0x71, 0xA0, 0x01, 0x50, 0x73, 0x21, 0xFF, 0x5D, 0x54, 0x6D, 0xDD, 0x3F, 0x14, 0x49, 0x4D, 0x44, 0x46, 0x12, 0x88, 0xD5, 0x92, 0xAE, 0xE2, 0xD0, 0xF6, 0x2C, 0x10, 0xD5, 0x67, 0x61, 0x87, 0x7F, 0x2A, 0x17, 0x9D, 0x4F, 0xC6, 0x79, 0xC3, 0xAF, 0x4D, 0x6F, 0xFB, 0x0F, 0x3B, 0x48, 0x5D, 0x46, 0x9A, 0xE8, 0x53, 0xB7, 0xC5, 0x69, 0xEC, 0x31, 0x25, 0xD1, 0xDC, 0x93, 0xAB, 0x2E, 0x53, 0x3B, 0x8E, 0x96, 0x27, 0x59, 0xD4, 0xF7, 0xB3, 0xAB, 0x51, 0x59, 0xAE, 0x6E, 0x26, 0x4F, 0xC2, 0x95, 0xCE, 0x42, 0xC6, 0xAF, 0x46, 0xC6, 0x2E, 0x32, 0x09, 0x7B, 0xAF, 0x67, 0x4E, 0x57, 0xC8, 0x93, 0x5F, 0x8C, 0xD5, 0x66, 0x7B, 0xCC, 0xE9, 0xBE, 0x86, 0xB9, 0xBB, 0xD0, 0xC8, 0xD2, 0xDC, 0x5F, 0x95, 0x83, 0x28, 0x55, 0x21, 0x1E, 0xEE, 0xCF, 0x23, 0xB7, 0x6D, 0xE0, 0x9A, 0x87, 0x99, 0xFB, 0x82, 0x50, 0xD0, 0x2D, 0xC4, 0xFB, 0xA0, 0x11, 0x2F, 0xDD, 0x05, 0x7E, 0x1C, 0xE3, 0xFB, 0x98, 0x69, 0xD4, 0x49, 0x2F, 0x0D, 0xF6, 0x61
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk2_AcexData[0x200] =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk2_AcexSig[0x100] =
|
||||
{
|
||||
0x62, 0xFE, 0xD9, 0x12, 0x3D, 0x99, 0x53, 0xC4, 0x20, 0x25, 0xDE, 0x59, 0xEA, 0x6E, 0xF3, 0x16, 0x5B, 0x36, 0xBA, 0x1C, 0xB3, 0xB5, 0x48, 0x37, 0xD2, 0xA4, 0x04, 0xE5, 0x14, 0xC6, 0xE7, 0x22, 0x14, 0x40, 0x6F, 0x92, 0x6A, 0x9B, 0xDF, 0xDE, 0xFA, 0xCE, 0x3C, 0xBB, 0x4B, 0xC4, 0x66, 0xA8, 0x86, 0x58, 0xAC, 0xEB, 0x2F, 0xB7, 0xA3, 0xEC, 0xEA, 0x31, 0x23, 0x61, 0xF6, 0x72, 0x1E, 0x26, 0x8A, 0x1D, 0x68, 0x2A, 0x2A, 0x21, 0x5A, 0xA2, 0x6A, 0xBD, 0xCE, 0xC0, 0x19, 0x08, 0x61, 0x64, 0xB3, 0xF6, 0x90, 0xB1, 0x34, 0xF8, 0x50, 0x6F, 0x83, 0xB6, 0x8D, 0x35, 0x12, 0x7F, 0x9C, 0x7B, 0x6E, 0x3C, 0x4E, 0xD1, 0xFD, 0xC3, 0x30, 0xD2, 0xE8, 0x7E, 0x15, 0x1F, 0xAD, 0xDB, 0x1D, 0x92, 0xDA, 0x8C, 0x4E, 0xE9, 0x84, 0x83, 0xFF, 0x1A, 0x09, 0x77, 0x05, 0x5A, 0xCF, 0x5C, 0x8B, 0x4F, 0x68, 0x36, 0xC8, 0xDA, 0x5B, 0x1A, 0x5A, 0x49, 0xF9, 0xA1, 0xF2, 0xC8, 0x02, 0xFD, 0x69, 0x1F, 0x1D, 0xB3, 0xE8, 0xF8, 0xE1, 0x6B, 0x15, 0x9A, 0x5E, 0x41, 0x84, 0x06, 0x1F, 0x2A, 0xB3, 0xB2, 0xA1, 0xDC, 0x63, 0x81, 0xB3, 0x6B, 0x4B, 0x21, 0x67, 0x19, 0x82, 0x52, 0xFE, 0x75, 0x96, 0xA1, 0xDF, 0x02, 0xD4, 0x07, 0x1F, 0x1B, 0x88, 0x12, 0x5A, 0x76, 0x54, 0xC4, 0x06, 0x2D, 0xB1, 0xAA, 0x41, 0x3C, 0x9F, 0x43, 0xA2, 0x75, 0x20, 0x39, 0xB6, 0x06, 0xF9, 0x9C, 0xFC, 0x00, 0xC5, 0xBC, 0x84, 0x13, 0x80, 0xE4, 0x10, 0x1A, 0xCD, 0x95, 0xBB, 0xF2, 0xDC, 0x57, 0x7B, 0xBA, 0x87, 0x05, 0x0B, 0x96, 0xC1, 0xCD, 0x60, 0xC7, 0x10, 0x44, 0x78, 0x0E, 0x0F, 0x2F, 0x91, 0x54, 0x6C, 0xDE, 0xB8, 0x14, 0x46, 0xF3, 0x9C, 0xAC, 0x7B, 0xAA, 0xE7, 0x1B, 0x52, 0xD6, 0xBE, 0x71, 0x97, 0x22
|
||||
};
|
||||
|
||||
// DLP
|
||||
static const unsigned char Dlp_sdk2_HdrPubK[0x100] =
|
||||
{
|
||||
0xB9, 0xDE, 0x3D, 0xC0, 0x55, 0xB9, 0xCC, 0x3F, 0x55, 0xE0, 0x61, 0x1D, 0x6F, 0xCF, 0x3E, 0x7F, 0xE2, 0xF7, 0xF5, 0xAD, 0x5C, 0x02, 0x7F, 0x17, 0x5B, 0x44, 0x2F, 0x2D, 0xDC, 0xD4, 0xA6, 0x63, 0xD2, 0xA7, 0x82, 0xD3, 0x00, 0x77, 0xC8, 0x0B, 0x28, 0x09, 0x3D, 0x81, 0x86, 0x93, 0xF5, 0xF6, 0xE4, 0x69, 0x3B, 0x60, 0x4C, 0x7F, 0x8D, 0x72, 0xA3, 0x22, 0x42, 0x86, 0x87, 0x06, 0xD8, 0x29, 0x89, 0x8A, 0x9F, 0x5F, 0x6C, 0x06, 0x0C, 0x96, 0x84, 0x00, 0x24, 0x5D, 0x0B, 0xEA, 0x15, 0xEC, 0xAD, 0x90, 0xA4, 0x0C, 0x7B, 0xAE, 0x0E, 0x85, 0x3E, 0xA2, 0x20, 0x04, 0xE8, 0xD9, 0x59, 0x0F, 0x31, 0x0E, 0xD4, 0x5D, 0xC1, 0x18, 0xED, 0x0E, 0xB4, 0xD2, 0x5E, 0x65, 0xA2, 0x78, 0x0C, 0x76, 0x03, 0x3A, 0x71, 0x18, 0xE4, 0x38, 0x44, 0x14, 0xE0, 0x93, 0x84, 0xFE, 0x34, 0x82, 0xCA, 0x0B, 0xB8, 0xF2, 0x41, 0xAB, 0x63, 0xF3, 0xDE, 0xAE, 0xF4, 0x36, 0x81, 0xA4, 0x78, 0x7B, 0xF9, 0xA8, 0xFB, 0xC9, 0xA7, 0x6E, 0xA4, 0xD5, 0xE2, 0xA9, 0xD8, 0xD9, 0xE8, 0x98, 0x1B, 0x25, 0x75, 0x00, 0x11, 0x51, 0x97, 0x62, 0x0D, 0xF0, 0x0C, 0xE9, 0x6B, 0x0C, 0xEE, 0xCE, 0x25, 0x2C, 0x3F, 0xDF, 0xBE, 0x54, 0xD5, 0xD6, 0x5E, 0xEE, 0x1F, 0x73, 0xFC, 0xE8, 0xEC, 0xB3, 0x8A, 0x48, 0x9F, 0x6A, 0xC1, 0x63, 0x85, 0xE4, 0x94, 0x85, 0x8F, 0x3D, 0x9D, 0x43, 0xB4, 0xA7, 0x4C, 0x82, 0xA3, 0x0B, 0x67, 0x43, 0x12, 0x31, 0x77, 0x89, 0xB0, 0xD5, 0x00, 0x1B, 0x52, 0x29, 0xCE, 0x54, 0xC7, 0xC4, 0x7D, 0xB6, 0x69, 0x7B, 0xFE, 0xDC, 0xDB, 0x4E, 0xD8, 0x58, 0x42, 0x14, 0x34, 0x72, 0x64, 0xBC, 0x09, 0x6D, 0xAC, 0xD3, 0xC4, 0x1B, 0x5C, 0x8E, 0xF9, 0xBE, 0x84, 0xCD, 0x9A, 0x86, 0x4B, 0x17
|
||||
};
|
||||
|
||||
static const unsigned char Dlp_sdk2_HdrPrivK[0x100] =
|
||||
{
|
||||
0xAA, 0x51, 0x62, 0x58, 0x9A, 0xB5, 0x74, 0xDA, 0x1C, 0xC1, 0x4D, 0x7C, 0x81, 0xF6, 0x70, 0x99, 0x13, 0xCC, 0x90, 0x0D, 0xD9, 0xA0, 0x58, 0x01, 0x79, 0x1A, 0x53, 0xF9, 0x3C, 0xC0, 0x87, 0xF0, 0x35, 0x1A, 0x56, 0xA1, 0x2F, 0x6E, 0x93, 0x9A, 0xD5, 0x87, 0x12, 0x1B, 0x5C, 0xCC, 0xBC, 0xB9, 0x0E, 0xB8, 0xF7, 0x35, 0xD9, 0x23, 0x90, 0xE4, 0x19, 0x64, 0xCD, 0x7D, 0x24, 0xC2, 0x3A, 0xD6, 0x65, 0x38, 0xE7, 0xAD, 0xB2, 0xF9, 0x20, 0x13, 0xD4, 0xC5, 0xA4, 0x8C, 0xB6, 0xDC, 0x3C, 0x56, 0xF2, 0xFC, 0xF5, 0xB6, 0x92, 0xA6, 0xFE, 0x9B, 0x4E, 0xB7, 0x95, 0x8B, 0xAA, 0x2B, 0x70, 0x96, 0xA1, 0x27, 0xAB, 0xA6, 0x75, 0xC9, 0x77, 0x80, 0xE0, 0x65, 0x5D, 0x26, 0xD8, 0xE8, 0x14, 0xD3, 0x17, 0x46, 0x38, 0x58, 0xCC, 0xD8, 0x5A, 0x5A, 0x9F, 0x27, 0xCE, 0xD8, 0x7A, 0x19, 0xD7, 0x35, 0xB2, 0x32, 0xAF, 0x47, 0x2E, 0x9F, 0x4B, 0x64, 0xEC, 0x1F, 0xC6, 0x40, 0xD0, 0x2C, 0x47, 0xD1, 0xEA, 0x33, 0xE5, 0x0E, 0x80, 0xFC, 0x68, 0xEC, 0x8C, 0x12, 0x33, 0xCE, 0x34, 0x28, 0x79, 0xFA, 0x05, 0x5D, 0x70, 0x15, 0xDE, 0xB1, 0x22, 0x85, 0x18, 0x63, 0x15, 0x35, 0x57, 0x04, 0x17, 0x64, 0x20, 0xC8, 0x52, 0x44, 0x64, 0x5E, 0x47, 0x4E, 0x5F, 0x80, 0x21, 0x16, 0x94, 0x4B, 0x18, 0x11, 0x36, 0x67, 0x3B, 0x6C, 0x69, 0x19, 0xCF, 0xC9, 0x05, 0x85, 0x9B, 0x3A, 0xDE, 0x12, 0x1E, 0x0A, 0xC6, 0x22, 0xA8, 0xC7, 0x9A, 0x34, 0x14, 0x98, 0xFD, 0xD9, 0x0F, 0xE8, 0x64, 0xE6, 0x89, 0x63, 0x6E, 0x17, 0x76, 0xD7, 0x1B, 0x6F, 0x92, 0x00, 0xD8, 0xBB, 0xF6, 0xA0, 0x65, 0x9D, 0xAA, 0x7A, 0x0E, 0x4B, 0x56, 0xA5, 0x33, 0xDA, 0x3F, 0x5D, 0xFE, 0xD3, 0xAD, 0x6E, 0x0E, 0xB3, 0xD4, 0x41
|
||||
};
|
||||
|
||||
static const unsigned char Dlp_sdk2_AcexData[0x200] =
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
static const unsigned char Dlp_sdk2_AcexSig[0x100] =
|
||||
{
|
||||
0x97, 0x84, 0x97, 0xEE, 0x4F, 0x35, 0xCC, 0xBE, 0x08, 0xB4, 0x5D, 0x7E, 0x17, 0xC3, 0x94, 0x2B, 0x4D, 0x3A, 0xA5, 0xB5, 0x01, 0xD4, 0xAE, 0x2A, 0x90, 0x26, 0x21, 0x8F, 0x56, 0x05, 0xB9, 0xA2, 0x5E, 0xCE, 0x73, 0xC7, 0x42, 0xDC, 0x99, 0xD2, 0x7C, 0x08, 0x62, 0xBF, 0x10, 0x7A, 0xC1, 0x5D, 0x22, 0x53, 0x8F, 0x63, 0x2D, 0x73, 0xF3, 0x05, 0xDA, 0x9D, 0x6A, 0xF8, 0xB9, 0x5B, 0x80, 0xB4, 0x30, 0xB3, 0x11, 0xF7, 0x96, 0x8A, 0xCF, 0x70, 0xD7, 0x62, 0x6E, 0x99, 0x32, 0xFD, 0x74, 0x34, 0x16, 0xFD, 0x17, 0x1F, 0xB1, 0xEC, 0xA4, 0x0F, 0x52, 0x13, 0x9F, 0x62, 0x0D, 0xE0, 0x50, 0xA6, 0xA0, 0x7B, 0x69, 0x95, 0xE0, 0xE9, 0xBB, 0x38, 0x0C, 0x62, 0xE0, 0xE3, 0xCE, 0x82, 0xE0, 0xB9, 0xE0, 0xF6, 0x61, 0x50, 0xBF, 0xA8, 0x18, 0x15, 0x38, 0xFE, 0xFA, 0x8C, 0xBA, 0xA5, 0xB9, 0x9C, 0x05, 0xA6, 0x91, 0x5C, 0xA7, 0x13, 0x6F, 0x13, 0x3F, 0xF1, 0xF6, 0x68, 0xAF, 0x40, 0xEC, 0x27, 0xE0, 0x33, 0x6B, 0xCF, 0x26, 0x06, 0xF8, 0x6A, 0x13, 0x6C, 0xBC, 0xDB, 0xAF, 0x6F, 0x78, 0xA0, 0x80, 0x10, 0x8F, 0xB6, 0x91, 0x5A, 0x43, 0x2C, 0x5F, 0x1D, 0xBA, 0xB4, 0x5E, 0xBE, 0xAE, 0x53, 0x09, 0x17, 0x5B, 0x6C, 0xC1, 0x5E, 0x0F, 0x72, 0x6E, 0xD6, 0x10, 0x0B, 0xC3, 0x26, 0xDC, 0xAF, 0xCA, 0x28, 0xAB, 0x00, 0x67, 0x04, 0xE3, 0x54, 0xE8, 0x95, 0xC6, 0x23, 0xB6, 0x79, 0x70, 0xA4, 0x87, 0x6D, 0x12, 0x48, 0xCC, 0x11, 0x86, 0xEC, 0x82, 0xF4, 0x30, 0xC9, 0xB1, 0x6D, 0x08, 0xA7, 0xEA, 0x8C, 0x6A, 0x97, 0xAA, 0x89, 0xD5, 0xC5, 0x07, 0xA9, 0xD5, 0xCF, 0x09, 0x08, 0xBC, 0x56, 0x63, 0x8D, 0x70, 0x2F, 0x64, 0xAF, 0x51, 0x9E, 0x22, 0xA4, 0x88, 0xF0, 0xDC, 0x56, 0x72, 0x28
|
||||
};
|
||||
|
||||
|
||||
/* CTR_SDK 4/5 (4.2.8) */
|
||||
// DependencyList
|
||||
static const unsigned char sdk4_dep_list[0x180] =
|
||||
{
|
||||
0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x33, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x37, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// APP
|
||||
static const unsigned char App_sdk4_HdrPubK[0x100] =
|
||||
{
|
||||
0xCF, 0xEC, 0xB2, 0x48, 0x03, 0x6D, 0xB8, 0x09, 0xE3, 0x5C, 0x6C, 0x62, 0x2C, 0xA9, 0x49, 0xE1, 0xF4, 0xF4, 0x0C, 0x6C, 0xC3, 0xE5, 0x2F, 0x9D, 0x50, 0xA0, 0x2B, 0x5A, 0x00, 0xC6, 0x72, 0x00, 0x0B, 0xA3, 0x04, 0x5D, 0x94, 0x46, 0xE7, 0x00, 0x1B, 0x48, 0x85, 0xB5, 0x61, 0x2C, 0xC9, 0x74, 0xCA, 0x2B, 0x43, 0x13, 0xC1, 0x78, 0x97, 0x5C, 0x33, 0x2F, 0x07, 0xC7, 0x85, 0xF0, 0xDA, 0xDB, 0x60, 0x96, 0x50, 0x0F, 0x7C, 0x4B, 0x7A, 0xD7, 0x17, 0x9D, 0xE4, 0xE5, 0xC3, 0xAB, 0x6F, 0x5D, 0xA5, 0x78, 0x32, 0xAD, 0x04, 0xDD, 0x96, 0x6E, 0xDC, 0x75, 0xFF, 0xC2, 0x2F, 0xFA, 0xA2, 0xEE, 0x46, 0x89, 0xCD, 0xAE, 0x69, 0x92, 0xA4, 0x48, 0xBC, 0x46, 0x47, 0xC4, 0x8C, 0x89, 0x63, 0xE1, 0x0A, 0x4D, 0x1C, 0xDC, 0x46, 0x2F, 0x5B, 0x70, 0x8A, 0x7C, 0xE9, 0x22, 0x9C, 0x09, 0x0B, 0xA8, 0x97, 0x40, 0xCA, 0x2A, 0x7D, 0x84, 0xA1, 0x04, 0x4A, 0x2E, 0xDB, 0xD7, 0xD0, 0x64, 0x43, 0x9C, 0xD0, 0x78, 0x11, 0x41, 0x88, 0x33, 0xDD, 0x31, 0x62, 0x90, 0x2D, 0x17, 0xF2, 0xC6, 0xA9, 0x2B, 0x9C, 0x70, 0xAB, 0xDC, 0xD3, 0xAB, 0x5D, 0xDA, 0xEE, 0x3D, 0x6C, 0x0E, 0x81, 0xFF, 0xF6, 0x67, 0x5A, 0x44, 0xF9, 0xAC, 0x07, 0x3D, 0x23, 0x94, 0x75, 0x65, 0x93, 0x20, 0x0C, 0xC5, 0x76, 0x1D, 0x0F, 0x65, 0x06, 0x3D, 0x21, 0xA2, 0xF0, 0x96, 0x80, 0xB7, 0x0A, 0x49, 0x53, 0x38, 0xA3, 0x5D, 0xC0, 0x74, 0x3C, 0xA4, 0xD9, 0x40, 0x36, 0x85, 0x1F, 0x8C, 0xD1, 0x2D, 0x15, 0xF9, 0xEF, 0x24, 0xA9, 0x7E, 0x9D, 0xB2, 0x1E, 0xF8, 0xA0, 0x72, 0x81, 0x17, 0x77, 0x73, 0xB1, 0x56, 0x7F, 0xAD, 0x05, 0xA2, 0xD2, 0x30, 0x5A, 0xF5, 0xD3, 0xAF, 0x0F, 0x10, 0x4A, 0x52, 0xD8, 0x09, 0x47, 0x97
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk4_HdrPrivK[0x100] =
|
||||
{
|
||||
0x8C, 0xBD, 0xB2, 0x3B, 0xCE, 0x9E, 0x51, 0x09, 0xD8, 0x6D, 0x72, 0x2B, 0xCE, 0x01, 0x55, 0x32, 0x6E, 0xC5, 0x57, 0x37, 0xB4, 0x2E, 0x09, 0x59, 0xD9, 0xFE, 0x60, 0xF9, 0xCE, 0x36, 0x85, 0x6A, 0x04, 0x76, 0x76, 0xF9, 0x04, 0xEA, 0x2D, 0x68, 0xC4, 0x0F, 0x05, 0xFA, 0xAD, 0x69, 0x4C, 0x80, 0x12, 0x6C, 0xD0, 0x3D, 0xAA, 0x22, 0xFF, 0x89, 0x78, 0x57, 0xE8, 0x53, 0x25, 0x15, 0xD0, 0x7E, 0xD8, 0x55, 0x46, 0xA2, 0x04, 0xC7, 0x6E, 0xC1, 0xF3, 0x89, 0x7C, 0x2C, 0x0E, 0x93, 0x97, 0x91, 0x72, 0xF4, 0xF6, 0x90, 0x69, 0x0F, 0xB8, 0xC9, 0x17, 0xCF, 0x83, 0xAC, 0xA5, 0x1F, 0x69, 0x74, 0x12, 0x29, 0x2B, 0x21, 0x58, 0xF2, 0xDA, 0xE3, 0x25, 0x16, 0x09, 0x74, 0x40, 0x90, 0xAB, 0x1B, 0xE4, 0x06, 0x28, 0x77, 0xED, 0xC6, 0x16, 0x86, 0x0A, 0x27, 0xDD, 0x03, 0x01, 0x4D, 0x9A, 0x26, 0x6E, 0xC8, 0x9F, 0xD3, 0x9A, 0x4B, 0x59, 0xD1, 0x10, 0x9B, 0xEB, 0xA9, 0x58, 0x72, 0xBD, 0xA1, 0xFE, 0x9D, 0x86, 0xED, 0x29, 0xE9, 0x29, 0x49, 0x62, 0x4B, 0xD8, 0x7D, 0x2A, 0x7A, 0x66, 0x1B, 0xE5, 0x04, 0x81, 0x56, 0x10, 0x50, 0xAF, 0xB8, 0x48, 0x27, 0xC1, 0xC9, 0x46, 0xBD, 0x3F, 0x16, 0x06, 0xA5, 0x3D, 0x04, 0x9F, 0x0D, 0x54, 0x71, 0x1C, 0xF4, 0x82, 0xC0, 0x66, 0x74, 0xEA, 0x9C, 0x83, 0x3C, 0x27, 0x01, 0xDF, 0x6F, 0x56, 0xA8, 0x1B, 0xE3, 0x68, 0x55, 0x9F, 0xAB, 0x90, 0x67, 0x20, 0x25, 0xFA, 0x3D, 0x51, 0x2A, 0x23, 0x16, 0xCB, 0x06, 0x5A, 0xAD, 0xAC, 0xC8, 0x47, 0xF9, 0x39, 0x2E, 0x6A, 0xF8, 0xFA, 0x0A, 0xE8, 0x8A, 0x64, 0x84, 0x6B, 0xED, 0xDA, 0x8F, 0x2A, 0x08, 0x86, 0x8F, 0x56, 0x69, 0x64, 0xC3, 0x98, 0x55, 0x37, 0x9A, 0x48, 0x40, 0xDA, 0xD5, 0x03, 0x21
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk4_AcexData[0x200] =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk4_AcexSig[0x100] =
|
||||
{
|
||||
0xDF, 0x1C, 0x8B, 0x98, 0xE4, 0x6F, 0xA2, 0x35, 0x6C, 0xC3, 0x18, 0x17, 0x98, 0xF3, 0xCE, 0x54, 0x7E, 0x14, 0x2E, 0x7F, 0x1E, 0xD8, 0x6D, 0xCF, 0xBC, 0x29, 0x4E, 0xFE, 0x32, 0x2E, 0xC1, 0x11, 0xAD, 0x46, 0x9A, 0xC6, 0x70, 0xEA, 0xEE, 0x28, 0x55, 0x22, 0xE1, 0x36, 0x05, 0x1C, 0x04, 0x8A, 0xCE, 0x0F, 0x0C, 0x83, 0x8F, 0xC8, 0xD6, 0xDE, 0x11, 0x8E, 0xEA, 0xCF, 0xAD, 0x9B, 0xCF, 0x81, 0x0D, 0xEB, 0x71, 0x13, 0xB3, 0xD3, 0xAE, 0x83, 0x02, 0x4C, 0x0E, 0x10, 0x50, 0x59, 0x3C, 0xEE, 0x60, 0x06, 0xFB, 0x8C, 0x7F, 0xC2, 0x20, 0x24, 0x01, 0x62, 0x55, 0x87, 0x60, 0x0F, 0xAD, 0xFA, 0x73, 0x2E, 0xF6, 0x65, 0x62, 0xD2, 0xE5, 0x10, 0x45, 0x69, 0x70, 0x39, 0x03, 0xD1, 0x39, 0xEC, 0x50, 0xC1, 0xD4, 0x25, 0x39, 0xB2, 0x90, 0x11, 0x4E, 0x95, 0xCB, 0x19, 0xEB, 0xCA, 0x0F, 0xB5, 0xFA, 0xC7, 0xB0, 0xE2, 0xD7, 0xE0, 0x71, 0xC3, 0xE5, 0x55, 0x33, 0x9E, 0x5C, 0xDC, 0x4D, 0x3B, 0x51, 0x11, 0x0D, 0x31, 0x78, 0x96, 0xCA, 0xD7, 0x18, 0x58, 0xEE, 0x00, 0xE9, 0x28, 0xF2, 0x68, 0x76, 0xD4, 0x57, 0xFE, 0x65, 0xB1, 0x4B, 0x49, 0x3F, 0xF6, 0xA6, 0x58, 0x4A, 0xC7, 0xFC, 0xC4, 0xBB, 0x61, 0xBC, 0x58, 0x8D, 0x55, 0x65, 0xE6, 0x0A, 0x79, 0x39, 0x41, 0xB8, 0x80, 0x61, 0xF7, 0x05, 0xC3, 0xFE, 0xD6, 0x8B, 0x09, 0x82, 0xC2, 0x5F, 0xA6, 0x56, 0xF9, 0xEE, 0x1D, 0x0E, 0x06, 0x3E, 0x9F, 0x3F, 0xF1, 0x93, 0x9A, 0x4F, 0xA2, 0xD5, 0x91, 0x87, 0x8A, 0xFE, 0xCF, 0xC3, 0xFC, 0x8A, 0xB1, 0xC4, 0x78, 0xE9, 0xD1, 0x1A, 0xF7, 0xB1, 0xD3, 0x20, 0xCB, 0x83, 0xBE, 0x03, 0xD5, 0xCA, 0xA5, 0x5E, 0x17, 0xA6, 0x91, 0x10, 0xD4, 0xBE, 0x23, 0xD6, 0x4B, 0x4F, 0x03, 0xA9, 0xAE
|
||||
};
|
||||
|
||||
// DEMO
|
||||
static const unsigned char Demo_sdk4_HdrPubK[0x100] =
|
||||
{
|
||||
0xB5, 0x11, 0x8D, 0x9E, 0x2D, 0xDB, 0x70, 0x6D, 0x6E, 0xEE, 0xAA, 0x21, 0xE0, 0x4E, 0x80, 0x0A, 0x96, 0x4A, 0x10, 0xD0, 0x9C, 0xD7, 0xD9, 0xD4, 0x94, 0x87, 0x72, 0xA2, 0xAF, 0x02, 0xA0, 0x05, 0x2E, 0xBF, 0x17, 0xEB, 0xFE, 0x5B, 0x9F, 0xB7, 0x0B, 0x1E, 0x3E, 0xF9, 0xAC, 0xBC, 0x7B, 0xB1, 0x56, 0x10, 0x24, 0x5F, 0x57, 0x2C, 0x08, 0xD0, 0x14, 0x79, 0x83, 0x84, 0x6A, 0x45, 0x25, 0xEB, 0xD9, 0xBE, 0x02, 0x21, 0xF7, 0x35, 0xC2, 0x74, 0x57, 0xC5, 0xAC, 0x34, 0x05, 0xC6, 0x9E, 0x82, 0xB8, 0xED, 0x78, 0xC4, 0x3B, 0xFD, 0x23, 0x59, 0x54, 0xD2, 0x0A, 0x0B, 0x5B, 0x25, 0xC0, 0x71, 0xC3, 0x84, 0x3A, 0xA7, 0xF9, 0x99, 0x86, 0xD8, 0xFE, 0x60, 0x10, 0x85, 0x77, 0x57, 0x76, 0x0C, 0x25, 0xE1, 0x18, 0x18, 0x3B, 0x83, 0xFD, 0x36, 0x7C, 0x84, 0x58, 0xC2, 0xC4, 0x68, 0x4F, 0xD1, 0xD7, 0x0A, 0x88, 0xFD, 0xCA, 0x97, 0xA1, 0xE5, 0xCE, 0x72, 0x63, 0xCF, 0x74, 0xD0, 0x20, 0xD9, 0xDE, 0x3F, 0xBB, 0x11, 0xF9, 0x21, 0xAB, 0x3F, 0x54, 0x41, 0xA7, 0xAA, 0xCA, 0xFC, 0xE1, 0x1A, 0x8C, 0x12, 0xC9, 0x39, 0x13, 0x5A, 0x81, 0x29, 0x49, 0xE8, 0xFB, 0x48, 0xC9, 0x4D, 0x50, 0x87, 0xAE, 0x51, 0xFB, 0x94, 0xFC, 0xF0, 0x9C, 0x70, 0x1C, 0xE8, 0x6E, 0x44, 0x53, 0x1E, 0x2F, 0x27, 0x5C, 0xB8, 0xEC, 0xBE, 0xFC, 0xD9, 0x98, 0x6A, 0x08, 0xD0, 0x5C, 0x4D, 0x78, 0x2D, 0x4D, 0x07, 0xAD, 0x5E, 0xB8, 0x51, 0x40, 0xE2, 0x2A, 0x7F, 0xB1, 0x54, 0x47, 0x5C, 0x99, 0x12, 0xC2, 0x6D, 0x5E, 0xED, 0x25, 0x30, 0x6A, 0x99, 0xC5, 0x0D, 0x65, 0x83, 0x68, 0x3A, 0xFD, 0x82, 0x59, 0x0D, 0xCE, 0x0B, 0x49, 0xBE, 0x17, 0x46, 0x51, 0xA9, 0xB6, 0x54, 0xE1, 0x18, 0xBD, 0x49, 0xE6, 0x7F
|
||||
};
|
||||
|
||||
static const unsigned char Demo_sdk4_HdrPrivK[0x100] =
|
||||
{
|
||||
0x1D, 0x7B, 0x79, 0x32, 0xAB, 0x46, 0xD2, 0xBC, 0x8E, 0xD6, 0x7F, 0x8F, 0x3A, 0x85, 0xAD, 0xA5, 0x8B, 0xA9, 0x0D, 0xA9, 0xDA, 0x0F, 0xEF, 0x61, 0x04, 0xBA, 0x35, 0x39, 0x36, 0x03, 0xD8, 0x68, 0x5F, 0x9F, 0x2F, 0xD6, 0xF6, 0x38, 0x96, 0xFD, 0xE7, 0xEA, 0x89, 0xD8, 0x7F, 0x7E, 0xC5, 0x29, 0x2F, 0xD9, 0x3B, 0x02, 0xE7, 0x1F, 0xBD, 0x63, 0x9C, 0x21, 0xD8, 0xFF, 0x43, 0x8A, 0x74, 0xCD, 0x3D, 0x4C, 0x09, 0xEE, 0xDB, 0xE0, 0xBE, 0x03, 0xD1, 0x92, 0xD7, 0x22, 0x35, 0x5A, 0x8C, 0xCE, 0xBE, 0x2B, 0xB4, 0x81, 0x47, 0x3F, 0x45, 0x75, 0x33, 0x31, 0x6B, 0xFF, 0x43, 0x5D, 0x17, 0x43, 0xAE, 0xD1, 0x25, 0xF7, 0xD9, 0xD5, 0x5C, 0xB6, 0x92, 0x5C, 0xB3, 0xF3, 0xF7, 0x65, 0x9F, 0x4C, 0x05, 0x12, 0xEC, 0xA8, 0x6D, 0x70, 0x65, 0x57, 0x6C, 0xD8, 0xE3, 0xD6, 0xFA, 0xC1, 0xFD, 0x54, 0xE8, 0x34, 0x67, 0x4D, 0x0A, 0x14, 0x2F, 0xA3, 0xD4, 0x81, 0x8C, 0xC3, 0xD0, 0x8B, 0x09, 0x08, 0x90, 0x70, 0x68, 0xA0, 0x0E, 0xD1, 0x0B, 0xAA, 0x71, 0xEC, 0x9A, 0x1A, 0x83, 0xFF, 0xA1, 0x70, 0xEB, 0xAC, 0xF2, 0xE9, 0x80, 0xA1, 0xB8, 0x20, 0x31, 0x83, 0xF5, 0x37, 0x01, 0x72, 0x06, 0x50, 0x05, 0x3F, 0x14, 0xF9, 0x29, 0x48, 0x84, 0xA0, 0x0E, 0xF7, 0xB8, 0x1D, 0xA3, 0x36, 0x5A, 0x78, 0x6D, 0x83, 0x90, 0x27, 0xE3, 0x50, 0x49, 0x2F, 0x65, 0xE5, 0x61, 0xED, 0x65, 0xBE, 0xEA, 0x34, 0xA6, 0x6A, 0xEF, 0x49, 0xB4, 0xE0, 0xBC, 0xC2, 0xA5, 0xB8, 0xEB, 0xA9, 0x2F, 0xBA, 0x26, 0x76, 0xB2, 0x5A, 0x3A, 0x3B, 0xFD, 0xAD, 0xFB, 0xE4, 0x79, 0xE2, 0x85, 0x54, 0x5B, 0xAB, 0x1F, 0x0A, 0xE5, 0x8B, 0x77, 0x3A, 0x10, 0x98, 0x26, 0x74, 0xC8, 0xB0, 0x82, 0xB1, 0xF9, 0x8F, 0x68, 0x59
|
||||
};
|
||||
|
||||
static const unsigned char Demo_sdk4_AcexData[0x200] =
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
static const unsigned char Demo_sdk4_AcexSig[0x100] =
|
||||
{
|
||||
0xD3, 0x7D, 0x42, 0xBA, 0x6A, 0x1E, 0xD8, 0x07, 0x3C, 0x4A, 0xC4, 0xCD, 0x8C, 0x68, 0x3D, 0xCD, 0xCD, 0xBD, 0x9D, 0xCE, 0xB5, 0x2A, 0xF9, 0x63, 0x3D, 0xA9, 0x54, 0x0A, 0x2E, 0x4C, 0xE1, 0x60, 0x4B, 0xD0, 0xC9, 0xEB, 0xEF, 0x31, 0x65, 0x70, 0xB9, 0x0E, 0x06, 0x3B, 0x3D, 0x42, 0x4C, 0x6E, 0x8D, 0x2C, 0xD4, 0x71, 0x29, 0x76, 0xB7, 0xDD, 0x8C, 0xDA, 0xE7, 0xE3, 0x96, 0xA7, 0xAA, 0xF8, 0xCA, 0x05, 0xE8, 0xA7, 0x0A, 0xDD, 0x01, 0x49, 0xBD, 0xF1, 0xA5, 0xE8, 0x16, 0x22, 0xEE, 0x47, 0x1F, 0xEF, 0x28, 0x48, 0x87, 0xA9, 0x2D, 0xFC, 0x4E, 0xD5, 0xA5, 0x98, 0xB1, 0xFE, 0x1B, 0xEB, 0xA9, 0x06, 0x3C, 0x76, 0xD9, 0xAA, 0x0E, 0x9C, 0x60, 0xFC, 0xE9, 0x77, 0x9D, 0x7F, 0x67, 0xAC, 0xF5, 0xC7, 0x49, 0x12, 0xFD, 0x76, 0xAC, 0xD2, 0x54, 0xDB, 0x73, 0x41, 0x10, 0x1F, 0x04, 0x3F, 0xD0, 0x6F, 0xE0, 0x80, 0x24, 0xCC, 0xEE, 0xBF, 0x25, 0x9D, 0x0D, 0x5A, 0x2A, 0x1C, 0xC5, 0xD4, 0xE3, 0x5D, 0x3A, 0xC1, 0x86, 0xD3, 0xD4, 0x52, 0x1C, 0x4C, 0xBF, 0x31, 0xEB, 0x54, 0xCA, 0x4C, 0x06, 0x50, 0x52, 0x87, 0xD4, 0x9D, 0x4A, 0x4B, 0x22, 0xE1, 0x4A, 0xE9, 0x4D, 0x05, 0xA8, 0x57, 0xEC, 0xF8, 0x90, 0xF8, 0x58, 0xC3, 0x8B, 0x3A, 0x0F, 0x88, 0x36, 0xF4, 0xE5, 0x44, 0x10, 0x80, 0x68, 0x86, 0x1D, 0xAE, 0x90, 0x20, 0x03, 0x22, 0x2D, 0x44, 0xBF, 0xAB, 0x2B, 0xA1, 0x14, 0xAD, 0x6B, 0x40, 0x57, 0xDB, 0xBB, 0xDA, 0x09, 0x4C, 0x51, 0x26, 0x9B, 0xE3, 0xD9, 0xF9, 0xE1, 0xBC, 0xF1, 0xF1, 0xCD, 0x30, 0xB4, 0xF5, 0x39, 0xD0, 0xBC, 0xF7, 0x98, 0x05, 0xAF, 0xA8, 0x33, 0x4B, 0xC1, 0x16, 0x0F, 0xF2, 0xC2, 0x79, 0x96, 0xEC, 0xBE, 0xA9, 0xF5, 0x55, 0x7C, 0x82, 0x95, 0x73
|
||||
};
|
||||
|
||||
// DLP
|
||||
static const unsigned char Dlp_sdk4_HdrPubK[0x100] =
|
||||
{
|
||||
0xB3, 0x16, 0x68, 0xF1, 0xED, 0x59, 0xC8, 0x7F, 0xC6, 0x50, 0x21, 0xFE, 0x36, 0x7C, 0x55, 0xE7, 0x07, 0xF9, 0x1D, 0x1B, 0xF5, 0xB1, 0x2A, 0x6B, 0x3A, 0xDE, 0x2D, 0x4C, 0x51, 0xCD, 0x4C, 0x9F, 0xEE, 0x1D, 0xE4, 0xE8, 0xF0, 0xFD, 0x09, 0x8E, 0x0F, 0x92, 0x5F, 0xDB, 0x9C, 0x5C, 0x15, 0x55, 0x1A, 0x4D, 0x04, 0x8C, 0xB0, 0xA4, 0x88, 0x97, 0xC4, 0xD5, 0x92, 0x04, 0x42, 0x33, 0x84, 0x81, 0x06, 0xD6, 0xF2, 0x17, 0xDE, 0x83, 0x17, 0x50, 0xD0, 0x47, 0x61, 0x14, 0x0D, 0xB7, 0xC7, 0xA0, 0xC1, 0x8B, 0x82, 0x47, 0x13, 0xEE, 0x76, 0xA2, 0xA3, 0x8D, 0xCE, 0x55, 0xC1, 0xF3, 0x7A, 0xEA, 0x91, 0xE1, 0xB9, 0x2F, 0x8F, 0x9B, 0xC3, 0x7B, 0x51, 0x2F, 0xE7, 0xAD, 0x93, 0x9C, 0xFD, 0xDF, 0x19, 0xC8, 0x6C, 0x24, 0xC2, 0xE2, 0x91, 0x97, 0x1F, 0xEB, 0x4B, 0xD4, 0x46, 0x6C, 0x06, 0x93, 0xAF, 0xF5, 0x5E, 0x8F, 0x77, 0x25, 0xC4, 0x28, 0xC0, 0x82, 0x4A, 0x78, 0xE9, 0x14, 0x08, 0xC3, 0xC3, 0x58, 0x24, 0x44, 0x2D, 0x2B, 0xA7, 0xEE, 0x28, 0xEF, 0x1B, 0x6D, 0xAA, 0x9C, 0xED, 0x7F, 0x35, 0xCE, 0x86, 0x5C, 0x6B, 0x8A, 0x23, 0xD3, 0x9D, 0x05, 0x8F, 0xD2, 0x41, 0x93, 0x1D, 0x1D, 0x7E, 0xB0, 0x46, 0x23, 0x63, 0x07, 0xEA, 0x5F, 0x26, 0xE3, 0x81, 0x27, 0xB3, 0x95, 0xB1, 0x93, 0x59, 0xD4, 0x1A, 0xB8, 0x73, 0xD0, 0x09, 0x95, 0x2B, 0xE8, 0x8B, 0xE2, 0x73, 0x5F, 0x34, 0xB9, 0x98, 0x82, 0xF0, 0x11, 0xC6, 0x8F, 0x12, 0x4D, 0x09, 0x57, 0x10, 0x97, 0x22, 0x0E, 0xC8, 0x7D, 0x40, 0xC1, 0x9D, 0x12, 0x1F, 0x71, 0xFE, 0x1E, 0x1A, 0x8C, 0x3F, 0x56, 0xAC, 0x43, 0xC3, 0x66, 0x0C, 0x81, 0xAE, 0xC1, 0x8F, 0x68, 0xFF, 0x87, 0x07, 0x3C, 0xCD, 0x0A, 0x23, 0xDE, 0xBA, 0x9B
|
||||
};
|
||||
|
||||
static const unsigned char Dlp_sdk4_HdrPrivK[0x100] =
|
||||
{
|
||||
0x77, 0xC2, 0x7A, 0xB7, 0x9E, 0x13, 0xB6, 0x62, 0xCC, 0x09, 0x76, 0x51, 0xFB, 0xB9, 0xB5, 0xF0, 0x63, 0x82, 0x91, 0x96, 0xCA, 0xFC, 0x88, 0xF3, 0x60, 0x50, 0x87, 0x56, 0x4C, 0x35, 0xD0, 0x11, 0xFB, 0x38, 0x7E, 0x85, 0xCF, 0xF2, 0x46, 0xDB, 0x7B, 0x4A, 0x55, 0x54, 0x15, 0x01, 0xF7, 0x3A, 0x0B, 0xF6, 0x89, 0x1E, 0x54, 0x5A, 0x13, 0x05, 0xFB, 0x19, 0x1F, 0x26, 0x3D, 0xE7, 0x19, 0xAA, 0xF7, 0x19, 0xF2, 0x97, 0x47, 0xB3, 0xBE, 0x79, 0xCA, 0x6E, 0x91, 0x5A, 0xC9, 0xB9, 0xA6, 0x83, 0xB8, 0x2A, 0x45, 0x1A, 0xA7, 0x17, 0x86, 0xBA, 0x48, 0x49, 0x62, 0x3C, 0x33, 0x11, 0x51, 0x97, 0x5F, 0xAA, 0xE5, 0x1E, 0x0B, 0x19, 0x0C, 0xE6, 0x80, 0x6A, 0x5A, 0xB1, 0xD6, 0xCE, 0xDB, 0x6E, 0xC0, 0x5D, 0x29, 0x04, 0x84, 0x56, 0xE3, 0x29, 0x7E, 0xAC, 0xE8, 0xEE, 0xB1, 0x91, 0x37, 0xEB, 0x98, 0x9C, 0xBD, 0x02, 0x6A, 0x78, 0x61, 0xB0, 0x79, 0x1A, 0x9F, 0x30, 0x86, 0xF6, 0x71, 0x5A, 0x5A, 0x12, 0xA1, 0x9E, 0xA1, 0x68, 0x03, 0xE5, 0x95, 0xA8, 0x38, 0x58, 0x87, 0x08, 0x57, 0x35, 0x32, 0x47, 0x3B, 0xFC, 0x02, 0x6F, 0xCE, 0x55, 0x61, 0xA3, 0x2A, 0x6B, 0x2F, 0xF8, 0xEE, 0x8D, 0xFA, 0x43, 0x33, 0x02, 0x63, 0x47, 0x02, 0x78, 0x5A, 0x7F, 0x64, 0x07, 0x92, 0xB7, 0x7C, 0x09, 0x7C, 0xFE, 0x2D, 0x1C, 0xFC, 0x77, 0x9F, 0x19, 0x20, 0xDD, 0x6D, 0x4C, 0xFE, 0x49, 0x09, 0x47, 0xCA, 0x9B, 0x1C, 0x8C, 0x1F, 0x37, 0xAC, 0x14, 0x85, 0x56, 0xC0, 0xFD, 0xD6, 0x01, 0xB3, 0x40, 0xA3, 0x1A, 0x32, 0x78, 0xA0, 0xDD, 0x21, 0x75, 0xBF, 0x24, 0xD2, 0x93, 0x85, 0xED, 0x22, 0xAD, 0x99, 0x91, 0x87, 0x4A, 0xEC, 0xC0, 0x6C, 0x71, 0x00, 0x76, 0x08, 0x23, 0xA2, 0xF3, 0xCF, 0x61
|
||||
};
|
||||
|
||||
static const unsigned char Dlp_sdk4_AcexData[0x200] =
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
static const unsigned char Dlp_sdk4_AcexSig[0x100] =
|
||||
{
|
||||
0xAC, 0xE2, 0xA7, 0xC3, 0x00, 0xDE, 0xE8, 0xE9, 0xE0, 0x03, 0xB3, 0x54, 0x08, 0xA8, 0xF8, 0x3A, 0x2E, 0xD8, 0x10, 0x6B, 0xEC, 0xDC, 0x4E, 0xEE, 0x62, 0x10, 0x71, 0x49, 0xD4, 0x43, 0xB1, 0x0E, 0x6B, 0x8C, 0xD7, 0x54, 0xD5, 0x62, 0x28, 0x3F, 0xAA, 0xDE, 0xA9, 0x7D, 0xED, 0x37, 0x7C, 0xE7, 0x89, 0x0B, 0x02, 0xB2, 0x72, 0x4B, 0x17, 0xDB, 0xE2, 0xD3, 0x7C, 0x94, 0x12, 0x3F, 0x2E, 0xA1, 0x08, 0x99, 0xCC, 0x7F, 0x93, 0xE6, 0x38, 0xC9, 0x37, 0x84, 0xD7, 0x11, 0x9D, 0x02, 0x4D, 0x66, 0xB4, 0x70, 0x9F, 0xD8, 0xC6, 0xDD, 0xD5, 0x13, 0x52, 0xF0, 0xA6, 0x78, 0x8C, 0x8E, 0x15, 0xA0, 0xA1, 0xF3, 0xC4, 0xC3, 0x48, 0x45, 0xA5, 0xBE, 0xC9, 0x7A, 0x8B, 0xD3, 0x95, 0xA5, 0x4C, 0xF1, 0xB3, 0x0C, 0x6C, 0x76, 0xA7, 0x57, 0xA1, 0x77, 0xDF, 0x2F, 0xC8, 0x06, 0xA6, 0x0D, 0x1A, 0x09, 0xE4, 0x38, 0x64, 0x07, 0xBE, 0x6A, 0xD2, 0xA0, 0xC0, 0xEC, 0x09, 0x64, 0x9F, 0x0D, 0x93, 0x0C, 0x89, 0xA2, 0x71, 0xD6, 0xC6, 0xC2, 0x54, 0x79, 0x2A, 0xA4, 0x31, 0x28, 0x24, 0x1A, 0xF3, 0x56, 0x78, 0x63, 0x99, 0x97, 0xA5, 0xCE, 0x8F, 0x52, 0x7A, 0x79, 0x51, 0xEE, 0x4C, 0x8B, 0x00, 0x9D, 0x5C, 0x3E, 0xD5, 0xAA, 0x24, 0x9C, 0x94, 0xC6, 0xA3, 0x99, 0x1B, 0x2D, 0xD4, 0xFF, 0xB4, 0x25, 0x73, 0x13, 0x33, 0x9F, 0x03, 0x6F, 0x1E, 0x75, 0xC4, 0x70, 0xF4, 0x07, 0x4F, 0x18, 0xFE, 0xBD, 0x8F, 0x2C, 0x9B, 0x33, 0xD4, 0x30, 0xA7, 0x18, 0x4A, 0xF1, 0xA4, 0xDD, 0x78, 0x41, 0xA0, 0xB8, 0x02, 0x8D, 0x51, 0x96, 0xBE, 0xE7, 0x17, 0x94, 0x66, 0x65, 0x27, 0xF7, 0x69, 0x48, 0x7E, 0xA9, 0x08, 0x71, 0x20, 0x76, 0xB7, 0x8E, 0xD2, 0xBF, 0x5C, 0x7E, 0x5E, 0x06, 0x45, 0xAB, 0x7E, 0x2E
|
||||
};
|
||||
|
||||
|
||||
/* SDK 7 (7.1.0) */
|
||||
static const unsigned char sdk7_dep_list[0x180] =
|
||||
{
|
||||
0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x38, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x33, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x37, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// APP
|
||||
static const unsigned char App_sdk7_HdrPubK[0x100] =
|
||||
{
|
||||
0x9B, 0x3B, 0x52, 0x2D, 0x61, 0xF5, 0x0D, 0x14,
|
||||
0x96, 0x09, 0x7A, 0x66, 0xC9, 0x86, 0x4C, 0x51,
|
||||
0x61, 0x7D, 0xF8, 0x9B, 0xFD, 0xB0, 0x3E, 0x44,
|
||||
0xC5, 0x0D, 0xC2, 0x6B, 0x6C, 0x66, 0x63, 0x3E,
|
||||
0xE7, 0xC8, 0x04, 0xCB, 0x06, 0xC8, 0x35, 0xC5,
|
||||
0x6D, 0xDB, 0x38, 0x36, 0xC5, 0x54, 0x32, 0xF0,
|
||||
0x60, 0x11, 0x44, 0x9F, 0xD9, 0xFA, 0x6A, 0x43,
|
||||
0xE1, 0x79, 0x56, 0xBF, 0xCF, 0xDD, 0xA8, 0x35,
|
||||
0x15, 0x23, 0x51, 0xF9, 0x4B, 0xDA, 0x1A, 0xD9,
|
||||
0x9D, 0x28, 0xF6, 0xCC, 0x1D, 0x53, 0x00, 0xC0,
|
||||
0x3C, 0x13, 0x32, 0xBC, 0x7F, 0x75, 0x82, 0xCD,
|
||||
0x79, 0xEF, 0x65, 0xBC, 0xCA, 0x98, 0x31, 0x0A,
|
||||
0x7B, 0xEF, 0x18, 0xD8, 0xF3, 0x8D, 0x3A, 0x10,
|
||||
0x22, 0xA0, 0xF2, 0x8D, 0xA5, 0xA8, 0xBE, 0xA0,
|
||||
0x62, 0xEC, 0xE2, 0xC7, 0x6C, 0xCF, 0x06, 0x6B,
|
||||
0xA7, 0xB5, 0xB8, 0x8C, 0xD5, 0x8E, 0xEF, 0xE3,
|
||||
0x42, 0xC9, 0xAD, 0x44, 0x46, 0x3A, 0x4E, 0x77,
|
||||
0x63, 0x02, 0xB4, 0x4E, 0xB4, 0x42, 0x65, 0x1D,
|
||||
0x68, 0x98, 0x37, 0x7A, 0x27, 0x87, 0x31, 0xBE,
|
||||
0x48, 0xFA, 0x4E, 0xD3, 0x85, 0xA6, 0xD6, 0xD2,
|
||||
0x2D, 0xCD, 0x10, 0xC9, 0x13, 0x59, 0x12, 0x48,
|
||||
0x14, 0x67, 0x3E, 0x40, 0xD3, 0xF8, 0x60, 0xA0,
|
||||
0xBD, 0x77, 0x31, 0x76, 0x78, 0x85, 0x55, 0x53,
|
||||
0x16, 0xF1, 0xB9, 0xFF, 0x7F, 0x3D, 0x9A, 0xF1,
|
||||
0x33, 0x1E, 0x67, 0x8F, 0x6B, 0x4A, 0x7A, 0x79,
|
||||
0x54, 0x8B, 0x43, 0xB5, 0xC2, 0xAF, 0xB8, 0x75,
|
||||
0x11, 0xDE, 0x4D, 0x34, 0x6A, 0xD6, 0x5A, 0x3B,
|
||||
0x48, 0x1F, 0x41, 0x9D, 0xF4, 0x58, 0x90, 0x67,
|
||||
0xA8, 0x71, 0xD4, 0x09, 0x67, 0xF7, 0x55, 0xEF,
|
||||
0xD3, 0x7C, 0x7D, 0x2F, 0x76, 0x84, 0x70, 0x6E,
|
||||
0xAA, 0x75, 0x7D, 0xA9, 0x95, 0x42, 0xEF, 0x28,
|
||||
0x29, 0x48, 0xCD, 0x79, 0xA8, 0x16, 0xB6, 0xB5
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk7_AcexData[0x200] =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18,
|
||||
0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00,
|
||||
0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30,
|
||||
0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31,
|
||||
0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00,
|
||||
0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00,
|
||||
0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75,
|
||||
0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52,
|
||||
0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00,
|
||||
0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00,
|
||||
0x41, 0x50, 0x54, 0x3A, 0x41, 0x00, 0x00, 0x00,
|
||||
0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00,
|
||||
0x61, 0x63, 0x74, 0x3A, 0x75, 0x00, 0x00, 0x00,
|
||||
0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00,
|
||||
0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00,
|
||||
0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00,
|
||||
0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00,
|
||||
0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C,
|
||||
0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52,
|
||||
0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50,
|
||||
0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00,
|
||||
0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00,
|
||||
0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00,
|
||||
0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00,
|
||||
0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00,
|
||||
0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00,
|
||||
0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00,
|
||||
0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53,
|
||||
0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00,
|
||||
0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00,
|
||||
0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00,
|
||||
0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1,
|
||||
0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF,
|
||||
0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF,
|
||||
0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF,
|
||||
0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF,
|
||||
0x00, 0x02, 0x00, 0xFE, 0x27, 0x02, 0x00, 0xFC,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
static const unsigned char App_sdk7_AcexSig[0x100] =
|
||||
{
|
||||
0x06, 0xDD, 0x68, 0x17, 0xAA, 0x40, 0x3A, 0x75,
|
||||
0xD2, 0xCF, 0xA2, 0x5A, 0xC8, 0x1B, 0x74, 0x9D,
|
||||
0x91, 0xCD, 0x38, 0x4E, 0xCA, 0x19, 0x60, 0x8E,
|
||||
0x39, 0x71, 0x6C, 0xB9, 0xF9, 0x9F, 0x68, 0x44,
|
||||
0xCF, 0x33, 0x94, 0x54, 0x72, 0xCC, 0xC6, 0x33,
|
||||
0x96, 0x9F, 0x12, 0x07, 0xE9, 0x38, 0x87, 0x70,
|
||||
0x11, 0x51, 0xFD, 0xBF, 0xD9, 0x2D, 0xFA, 0x3F,
|
||||
0x70, 0x42, 0x75, 0x39, 0xE3, 0x97, 0x85, 0xAF,
|
||||
0x7B, 0xC5, 0x87, 0x9B, 0x0B, 0xF9, 0xE4, 0x1C,
|
||||
0xC5, 0x6B, 0x44, 0x2A, 0x10, 0x14, 0x86, 0xAA,
|
||||
0xFE, 0x9E, 0x5B, 0x1D, 0x15, 0xBA, 0x8C, 0x34,
|
||||
0xA2, 0xAF, 0x14, 0xD0, 0xD4, 0x0E, 0x7B, 0x3A,
|
||||
0xD5, 0x3C, 0x53, 0xDB, 0x7C, 0xBE, 0x44, 0x58,
|
||||
0x79, 0x42, 0x23, 0x3A, 0x77, 0xA3, 0x2C, 0xB9,
|
||||
0xEB, 0x62, 0x19, 0x94, 0x2B, 0xA0, 0x67, 0x94,
|
||||
0xC6, 0xB2, 0x90, 0xC6, 0x61, 0xFD, 0x43, 0xEC,
|
||||
0xEA, 0x27, 0x7E, 0xA6, 0xB1, 0xED, 0xA9, 0x67,
|
||||
0xED, 0x56, 0x91, 0x90, 0xF9, 0x32, 0x4E, 0xC3,
|
||||
0x29, 0x5A, 0x84, 0x4C, 0xAB, 0x99, 0x75, 0x40,
|
||||
0x8E, 0x19, 0xD9, 0x12, 0xD1, 0x06, 0x2D, 0xD0,
|
||||
0x2C, 0xD9, 0x6C, 0x41, 0x35, 0x64, 0xDB, 0x80,
|
||||
0x63, 0xB2, 0x01, 0xF8, 0x29, 0xAB, 0xF5, 0x70,
|
||||
0x79, 0x4E, 0x0F, 0xFA, 0x23, 0x20, 0x2E, 0x04,
|
||||
0x75, 0x48, 0x15, 0x9B, 0x71, 0xD5, 0x85, 0x09,
|
||||
0x67, 0x7D, 0xAC, 0x6A, 0xFA, 0xC0, 0x16, 0xAF,
|
||||
0x58, 0x26, 0xCD, 0x6F, 0x1F, 0xB8, 0xF5, 0x8D,
|
||||
0xD1, 0x7D, 0x3D, 0x70, 0x2F, 0x08, 0xB8, 0x23,
|
||||
0x61, 0x24, 0xAE, 0x94, 0x31, 0xA3, 0xBD, 0x1E,
|
||||
0x18, 0xD7, 0x82, 0x92, 0xDD, 0x11, 0x79, 0x7D,
|
||||
0x1F, 0xEC, 0x03, 0x08, 0x82, 0xCC, 0x52, 0x62,
|
||||
0xC9, 0x27, 0x2D, 0x08, 0xD5, 0x6B, 0x4E, 0x86,
|
||||
0x2E, 0x3F, 0x50, 0x5C, 0xA3, 0xC1, 0xDF, 0xF5,
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -18,8 +18,8 @@ int get_CIASettings(cia_settings *ciaset, user_settings *usrset);
|
||||
|
||||
int GetSettingsFromUsrset(cia_settings *ciaset, user_settings *usrset);
|
||||
int GetSettingsFromNcch0(cia_settings *ciaset, u32 ncch0_offset);
|
||||
int GetCIADataFromNcch(cia_settings *ciaset, NCCH_Header *NcchHdr, ExtendedHeader_Struct *ExHeader);
|
||||
int GetMetaRegion(cia_settings *ciaset, ExtendedHeader_Struct *ExHeader, u8 *ExeFs);
|
||||
int GetCIADataFromNcch(cia_settings *ciaset, ncch_hdr *NcchHdr, extended_hdr *ExHeader);
|
||||
int GetMetaRegion(cia_settings *ciaset, extended_hdr *ExHeader, u8 *ExeFs);
|
||||
int GetContentFilePtrs(cia_settings *ciaset, user_settings *usrset);
|
||||
int GetSettingsFromSrl(cia_settings *ciaset);
|
||||
int GetSettingsFromCci(cia_settings *ciaset);
|
||||
@@ -50,9 +50,9 @@ int build_CIA(user_settings *usrset)
|
||||
if(result) goto finish;
|
||||
|
||||
// Create Output File
|
||||
ciaset->out = fopen(usrset->outfile,"wb");
|
||||
ciaset->out = fopen(usrset->common.outFileName,"wb");
|
||||
if(!ciaset->out){
|
||||
fprintf(stderr,"[CIA ERROR] Failed to create '%s'\n",usrset->outfile);
|
||||
fprintf(stderr,"[CIA ERROR] Failed to create \"%s\"\n",usrset->common.outFileName);
|
||||
result = FAILED_TO_CREATE_OUTFILE;
|
||||
goto finish;
|
||||
}
|
||||
@@ -99,16 +99,16 @@ void init_CIASettings(cia_settings *set)
|
||||
|
||||
void free_CIASettings(cia_settings *set)
|
||||
{
|
||||
if(set->content.ContentFilePtrs){
|
||||
for(u32 i = 1; i < set->content.ContentCount; i++){
|
||||
fclose(set->content.ContentFilePtrs[i]);
|
||||
if(set->content.contentFilePtrs){
|
||||
for(u32 i = 1; i < set->content.contentCount; i++){
|
||||
fclose(set->content.contentFilePtrs[i]);
|
||||
}
|
||||
free(set->content.ContentFilePtrs);
|
||||
free(set->content.contentFilePtrs);
|
||||
}
|
||||
free(set->CIA_Sections.CertChain.buffer);
|
||||
free(set->CIA_Sections.Ticket.buffer);
|
||||
free(set->CIA_Sections.TitleMetaData.buffer);
|
||||
free(set->CIA_Sections.CXI_MetaData.buffer);
|
||||
free(set->ciaSections.certChain.buffer);
|
||||
free(set->ciaSections.tik.buffer);
|
||||
free(set->ciaSections.tmd.buffer);
|
||||
free(set->ciaSections.meta.buffer);
|
||||
|
||||
memset(set,0,sizeof(cia_settings));
|
||||
|
||||
@@ -122,19 +122,19 @@ int get_CIASettings(cia_settings *ciaset, user_settings *usrset)
|
||||
// Transfering data from usrset
|
||||
result = GetSettingsFromUsrset(ciaset,usrset);
|
||||
|
||||
if(usrset->Content0IsNcch){
|
||||
if(usrset->common.workingFileType == infile_ncch){
|
||||
result = GetSettingsFromNcch0(ciaset,0);
|
||||
if(result) return result;
|
||||
result = GetContentFilePtrs(ciaset,usrset);
|
||||
if(result) return result;
|
||||
}
|
||||
|
||||
else if(usrset->Content0IsSrl){
|
||||
else if(usrset->common.workingFileType == infile_srl){
|
||||
result = GetSettingsFromSrl(ciaset);
|
||||
if(result) return result;
|
||||
}
|
||||
|
||||
else if(usrset->ConvertCci){
|
||||
else if(usrset->common.workingFileType == infile_ncsd){
|
||||
result = GetSettingsFromCci(ciaset);
|
||||
if(result) return result;
|
||||
}
|
||||
@@ -146,58 +146,63 @@ int get_CIASettings(cia_settings *ciaset, user_settings *usrset)
|
||||
int GetSettingsFromUsrset(cia_settings *ciaset, user_settings *usrset)
|
||||
{
|
||||
// General Stuff
|
||||
ciaset->keys = &usrset->keys;
|
||||
ciaset->content.content0 = usrset->Content0.buffer;
|
||||
ciaset->content.content0_FileLen = usrset->Content0.size;
|
||||
u32_to_u8(ciaset->Title_type,TYPE_CTR,BE);
|
||||
ciaset->content.EncryptContents = usrset->EncryptContents;
|
||||
if(ciaset->keys->aes.CommonKey[ciaset->keys->aes.CurrentCommonKey] == NULL && ciaset->content.EncryptContents){
|
||||
ciaset->keys = &usrset->common.keys;
|
||||
ciaset->inFile = usrset->common.workingFile.buffer;
|
||||
ciaset->inFileSize = usrset->common.workingFile.size;
|
||||
u32_to_u8(ciaset->tmd.titleType,TYPE_CTR,BE);
|
||||
ciaset->content.encryptCia = usrset->cia.encryptCia;
|
||||
ciaset->content.IsDlc = usrset->cia.DlcContent;
|
||||
if(ciaset->keys->aes.commonKey[ciaset->keys->aes.currentCommonKey] == NULL && ciaset->content.encryptCia){
|
||||
fprintf(stderr,"[CIA WARNING] Common Key could not be loaded, CIA will not be encrypted\n");
|
||||
ciaset->content.EncryptContents = false;
|
||||
ciaset->content.encryptCia = false;
|
||||
}
|
||||
|
||||
ciaset->cert.ca_crl_version = 0;
|
||||
ciaset->cert.signer_crl_version = 0;
|
||||
ciaset->cert.caCrlVersion = 0;
|
||||
ciaset->cert.signerCrlVersion = 0;
|
||||
|
||||
for(int i = 0; i < 3; i++){
|
||||
ciaset->Version[i] = usrset->Version[i];
|
||||
ciaset->common.titleVersion[i] = usrset->cia.titleVersion[i];
|
||||
}
|
||||
|
||||
ciaset->content.overrideSaveDataSize = usrset->cia.overideSaveDataSize;
|
||||
|
||||
// Random Number generator
|
||||
u8 hash[0x20];
|
||||
ctr_sha(ciaset->content.content0,0x100,hash,CTR_SHA_256);
|
||||
if(usrset->common.rsfPath)
|
||||
ctr_sha(usrset->common.rsfPath,strlen(usrset->common.rsfPath),hash,CTR_SHA_256);
|
||||
else
|
||||
ctr_sha(ciaset->inFile,(rand() % 0x200),hash,CTR_SHA_256);
|
||||
|
||||
// Ticket Data
|
||||
memcpy(ciaset->tik.TicketID,(hash+0x8),8);
|
||||
if(usrset->RandomTitleKey){
|
||||
memcpy(ciaset->tik.TitleKey,(hash+0x10),16);
|
||||
}
|
||||
else{
|
||||
memcpy(ciaset->tik.TitleKey,usrset->keys.aes.NormalKey,16);
|
||||
}
|
||||
memcpy(ciaset->tik.ticketId,(hash+0x8),8);
|
||||
if(usrset->cia.randomTitleKey)
|
||||
memcpy(ciaset->common.titleKey,(hash+0x10),16);
|
||||
else
|
||||
memset(ciaset->common.titleKey,0,16);
|
||||
|
||||
ciaset->tik.ticket_format_ver = 1;
|
||||
ciaset->tik.formatVersion = 1;
|
||||
|
||||
int result = GenCertChildIssuer(ciaset->tik.TicketIssuer,usrset->keys.certs.tik_cert);
|
||||
int result = GenCertChildIssuer(ciaset->tik.issuer,ciaset->keys->certs.xsCert);
|
||||
if(result) return result;
|
||||
|
||||
// Tmd Stuff
|
||||
if(usrset->ContentID[0] > 0xffffffff){
|
||||
ciaset->content.ContentId[0] = u8_to_u32(hash,BE);
|
||||
if(usrset->cia.contentId[0] > 0xffffffff){
|
||||
ciaset->content.contentId[0] = u8_to_u32(hash,BE);
|
||||
}
|
||||
else ciaset->content.ContentId[0] = usrset->ContentID[0];
|
||||
ciaset->tmd.tmd_format_ver = 1;
|
||||
result = GenCertChildIssuer(ciaset->tmd.TMDIssuer,usrset->keys.certs.tmd_cert);
|
||||
else
|
||||
ciaset->content.contentId[0] = usrset->cia.contentId[0];
|
||||
ciaset->tmd.formatVersion = 1;
|
||||
result = GenCertChildIssuer(ciaset->tmd.issuer,ciaset->keys->certs.cpCert);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetSettingsFromNcch0(cia_settings *ciaset, u32 ncch0_offset)
|
||||
{
|
||||
/* Sanity Checks */
|
||||
if(!ciaset->content.content0_FileLen)
|
||||
if(!ciaset->inFile)
|
||||
return CIA_NO_NCCH0;
|
||||
|
||||
u8 *ncch0 = (u8*)(ciaset->content.content0+ncch0_offset);
|
||||
u8 *ncch0 = (u8*)(ciaset->inFile+ncch0_offset);
|
||||
|
||||
if(!IsNCCH(NULL,ncch0)){
|
||||
fprintf(stderr,"[CIA ERROR] Content0 is not NCCH\n");
|
||||
@@ -205,26 +210,29 @@ int GetSettingsFromNcch0(cia_settings *ciaset, u32 ncch0_offset)
|
||||
}
|
||||
|
||||
/* Get Ncch0 Header */
|
||||
NCCH_Header *hdr = NULL;
|
||||
ncch_hdr *hdr = NULL;
|
||||
hdr = GetNCCH_CommonHDR(hdr,NULL,ncch0);
|
||||
if(IsCfa(hdr)){
|
||||
ciaset->content.IsCfa = true;
|
||||
}
|
||||
|
||||
ciaset->content.ContentOffset[0] = 0;
|
||||
ciaset->content.ContentSize[0] = GetNCCH_MediaSize(hdr)*GetNCCH_MediaUnitSize(hdr);
|
||||
ciaset->content.TotalContentSize = ciaset->content.ContentSize[0];
|
||||
ciaset->content.contentOffset[0] = 0;
|
||||
ciaset->content.contentSize[0] = GetNCCH_MediaSize(hdr)*GetNCCH_MediaUnitSize(hdr);
|
||||
ciaset->content.totalContentSize = ciaset->content.contentSize[0];
|
||||
|
||||
/* Get Ncch0 Import Context */
|
||||
NCCH_STRUCT *ncch_ctx = malloc(sizeof(NCCH_STRUCT));
|
||||
if(!ncch_ctx){ fprintf(stderr,"[CIA ERROR] MEM ERROR\n"); return MEM_ERROR; }
|
||||
memset(ncch_ctx,0x0,sizeof(NCCH_STRUCT));
|
||||
ncch_struct *ncch_ctx = malloc(sizeof(ncch_struct));
|
||||
if(!ncch_ctx){
|
||||
fprintf(stderr,"[CIA ERROR] MEM ERROR\n");
|
||||
return MEM_ERROR;
|
||||
}
|
||||
memset(ncch_ctx,0x0,sizeof(ncch_struct));
|
||||
GetCXIStruct(ncch_ctx,hdr);
|
||||
|
||||
/* Verify Ncch0 (Sig&Hash Checks) */
|
||||
int result = VerifyNCCH(ncch0,ciaset->keys,true);
|
||||
int result = VerifyNCCH(ncch0,ciaset->keys,false);
|
||||
if(result == UNABLE_TO_LOAD_NCCH_KEY){
|
||||
ciaset->content.KeyNotFound = true;
|
||||
ciaset->content.keyNotFound = true;
|
||||
if(!ciaset->content.IsCfa){
|
||||
fprintf(stderr,"[CIA WARNING] CXI AES Key could not be loaded\n");
|
||||
fprintf(stderr," Meta Region, SaveDataSize, Remaster Version cannot be obtained\n");
|
||||
@@ -236,17 +244,17 @@ int GetSettingsFromNcch0(cia_settings *ciaset, u32 ncch0_offset)
|
||||
}
|
||||
|
||||
/* Gen Settings From Ncch0 */
|
||||
endian_memcpy(ciaset->TitleID,hdr->title_id,8,LE);
|
||||
endian_memcpy(ciaset->common.titleId,hdr->titleId,8,LE);
|
||||
|
||||
|
||||
/* Getting ExeFs/ExHeader */
|
||||
u8 *ExeFs = malloc(ncch_ctx->exefs_size);
|
||||
u8 *ExeFs = malloc(ncch_ctx->exefsSize);
|
||||
if(!ExeFs){ fprintf(stderr,"[CIA ERROR] MEM ERROR\n"); return MEM_ERROR; }
|
||||
ExtendedHeader_Struct *ExHeader = malloc(ncch_ctx->exheader_size);
|
||||
extended_hdr *ExHeader = malloc(ncch_ctx->exhdrSize);
|
||||
if(!ExHeader){ fprintf(stderr,"[CIA ERROR] MEM ERROR\n"); free(ExeFs); return MEM_ERROR; }
|
||||
|
||||
if(!(ciaset->content.IsCfa||ciaset->content.KeyNotFound)) GetNCCHSection(ExeFs, ncch_ctx->exefs_size, 0, ncch0, ncch_ctx, ciaset->keys, ncch_exefs);
|
||||
if(!(ciaset->content.IsCfa||ciaset->content.KeyNotFound)) GetNCCHSection((u8*)ExHeader, ncch_ctx->exheader_size, 0, ncch0, ncch_ctx, ciaset->keys, ncch_ExHeader);
|
||||
if(!(ciaset->content.IsCfa||ciaset->content.keyNotFound)) GetNCCHSection(ExeFs, ncch_ctx->exefsSize, 0, ncch0, ncch_ctx, ciaset->keys, ncch_exefs);
|
||||
if(!(ciaset->content.IsCfa||ciaset->content.keyNotFound)) GetNCCHSection((u8*)ExHeader, ncch_ctx->exhdrSize, 0, ncch0, ncch_ctx, ciaset->keys, ncch_exhdr);
|
||||
|
||||
result = GetCIADataFromNcch(ciaset,hdr,ExHeader); // Data For TMD
|
||||
if(result) goto finish;
|
||||
@@ -261,87 +269,100 @@ finish:
|
||||
return result;
|
||||
}
|
||||
|
||||
int GetCIADataFromNcch(cia_settings *ciaset, NCCH_Header *NcchHdr, ExtendedHeader_Struct *ExHeader)
|
||||
int GetCIADataFromNcch(cia_settings *ciaset, ncch_hdr *NcchHdr, extended_hdr *ExHeader)
|
||||
{
|
||||
u16 Category = u8_to_u16((ciaset->TitleID+2),BE);
|
||||
bool IsPatch = (Category == 0x000E);
|
||||
if(IsPatch||ciaset->content.IsCfa||ciaset->content.KeyNotFound) u32_to_u8(ciaset->tmd.SaveDataSize,0,LE);
|
||||
else u32_to_u8(ciaset->tmd.SaveDataSize,(u32)GetSaveDataSize_frm_exhdr(ExHeader),LE);
|
||||
u16 Category = u8_to_u16((ciaset->common.titleId+2),BE);
|
||||
if(IsPatch(Category)||ciaset->content.IsCfa||ciaset->content.keyNotFound) u32_to_u8(ciaset->tmd.savedataSize,0,LE);
|
||||
else u32_to_u8(ciaset->tmd.savedataSize,(u32)GetSaveDataSize_frm_exhdr(ExHeader),LE);
|
||||
if(ciaset->content.overrideSaveDataSize){
|
||||
u64 size = 0;
|
||||
GetSaveDataSizeFromString(&size,ciaset->content.overrideSaveDataSize);
|
||||
u32_to_u8(ciaset->tmd.savedataSize,(u32)size,LE);
|
||||
}
|
||||
|
||||
|
||||
if(ciaset->content.IsCfa||ciaset->content.KeyNotFound){
|
||||
if(ciaset->Version[0] == 0xffff){ // '-major' wasn't set
|
||||
if(ciaset->content.IsCfa||ciaset->content.keyNotFound){
|
||||
if(ciaset->common.titleVersion[0] == 0xffff){ // '-major' wasn't set
|
||||
if(ciaset->content.IsCfa){ // Is a CFA and can be decrypted
|
||||
fprintf(stderr,"[CIA ERROR] Invalid major version. Use '-major' option.\n");
|
||||
fprintf(stderr,"[CIA ERROR] Invalid major version. Use \"-major\" option.\n");
|
||||
return CIA_BAD_VERSION;
|
||||
}
|
||||
else // CXI which cannot be decrypted
|
||||
ciaset->Version[0] = 0;
|
||||
ciaset->common.titleVersion[0] = 0;
|
||||
}
|
||||
}
|
||||
else{ // Is a CXI and can be decrypted
|
||||
if(ciaset->Version[0] != 0xffff){ // '-major' was set
|
||||
fprintf(stderr,"[CIA ERROR] Option '-major' cannot be applied for cxi.\n");
|
||||
if(ciaset->common.titleVersion[0] != 0xffff){ // '-major' was set
|
||||
fprintf(stderr,"[CIA ERROR] Option \"-major\" cannot be applied for cxi.\n");
|
||||
return CIA_BAD_VERSION;
|
||||
}
|
||||
// Setting remaster ver
|
||||
ciaset->Version[0] = GetRemasterVersion_frm_exhdr(ExHeader);
|
||||
ciaset->common.titleVersion[0] = GetRemasterVersion_frm_exhdr(ExHeader);
|
||||
}
|
||||
SetupVersion(ciaset->Version[0],ciaset->Version[1],ciaset->Version[2]);
|
||||
|
||||
u16 version = SetupVersion(ciaset->Version[0],ciaset->Version[1],ciaset->Version[2]);
|
||||
u16_to_u8(ciaset->tik.TicketVersion,version,BE);
|
||||
u16_to_u8(ciaset->tmd.TitleVersion,version,BE);
|
||||
u16 version = SetupVersion(ciaset->common.titleVersion[0],ciaset->common.titleVersion[1],ciaset->common.titleVersion[2]);
|
||||
ciaset->tik.version = version;
|
||||
ciaset->tmd.version = version;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetMetaRegion(cia_settings *ciaset, ExtendedHeader_Struct *ExHeader, u8 *ExeFs)
|
||||
int GetMetaRegion(cia_settings *ciaset, extended_hdr *ExHeader, u8 *ExeFs)
|
||||
{
|
||||
if(ciaset->content.IsCfa || ciaset->content.KeyNotFound) return 0;
|
||||
ciaset->CIA_Sections.CXI_MetaData.size = sizeof(MetaData_Struct) + GetExeFsSectionSize("icon",ExeFs);
|
||||
ciaset->CIA_Sections.CXI_MetaData.buffer = malloc(ciaset->CIA_Sections.CXI_MetaData.size);
|
||||
if(!ciaset->CIA_Sections.CXI_MetaData.buffer){ fprintf(stderr,"[CIA ERROR] MEM ERROR\n"); return MEM_ERROR; }
|
||||
MetaData_Struct *hdr = (MetaData_Struct*)ciaset->CIA_Sections.CXI_MetaData.buffer;
|
||||
memset(hdr,0,sizeof(MetaData_Struct));
|
||||
GetDependancyList_frm_exhdr(hdr->DependancyList,ExHeader);
|
||||
GetCoreVersion_frm_exhdr(hdr->CoreVersion,ExHeader);
|
||||
if(ciaset->content.IsCfa || ciaset->content.keyNotFound) return 0;
|
||||
ciaset->ciaSections.meta.size = sizeof(cia_metadata) + GetExeFsSectionSize("icon",ExeFs);
|
||||
ciaset->ciaSections.meta.buffer = malloc(ciaset->ciaSections.meta.size);
|
||||
if(!ciaset->ciaSections.meta.buffer){
|
||||
fprintf(stderr,"[CIA ERROR] Not enough memory\n");
|
||||
return MEM_ERROR;
|
||||
}
|
||||
cia_metadata *hdr = (cia_metadata*)ciaset->ciaSections.meta.buffer;
|
||||
memset(hdr,0,sizeof(cia_metadata));
|
||||
GetDependencyList_frm_exhdr(hdr->dependencyList,ExHeader);
|
||||
GetCoreVersion_frm_exhdr(hdr->coreVersion,ExHeader);
|
||||
if(DoesExeFsSectionExist("icon",ExeFs)){
|
||||
u8 *IconDestPos = (ciaset->CIA_Sections.CXI_MetaData.buffer + sizeof(MetaData_Struct));
|
||||
u8 *IconDestPos = (ciaset->ciaSections.meta.buffer + sizeof(cia_metadata));
|
||||
memcpy(IconDestPos,GetExeFsSection("icon",ExeFs),GetExeFsSectionSize("icon",ExeFs));
|
||||
//memdump(stdout,"Icon: ",IconDestPos,0x10);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetContentFilePtrs(cia_settings *ciaset, user_settings *usrset)
|
||||
{
|
||||
ciaset->content.ContentFilePtrs = malloc(sizeof(FILE*)*CIA_MAX_CONTENT);
|
||||
if(!ciaset->content.ContentFilePtrs){ fprintf(stderr,"[CIA ERROR] MEM ERROR\n"); return MEM_ERROR; }
|
||||
memset(ciaset->content.ContentFilePtrs,0,sizeof(FILE*)*CIA_MAX_CONTENT);
|
||||
ciaset->content.contentFilePtrs = malloc(sizeof(FILE*)*CIA_MAX_CONTENT);
|
||||
if(!ciaset->content.contentFilePtrs){
|
||||
fprintf(stderr,"[CIA ERROR] Not enough memory\n");
|
||||
return MEM_ERROR;
|
||||
}
|
||||
memset(ciaset->content.contentFilePtrs,0,sizeof(FILE*)*CIA_MAX_CONTENT);
|
||||
int j = 1;
|
||||
NCCH_Header *hdr = malloc(sizeof(NCCH_Header));
|
||||
ncch_hdr *hdr = malloc(sizeof(ncch_hdr));
|
||||
for(int i = 1; i < CIA_MAX_CONTENT; i++){
|
||||
if(usrset->ContentPath[i]){
|
||||
ciaset->content.ContentFilePtrs[j] = fopen(usrset->ContentPath[i],"rb");
|
||||
if(!ciaset->content.ContentFilePtrs[j]){ fprintf(stderr,"[CIA ERROR] Failed to open '%s'\n",usrset->ContentPath[i]); return FAILED_TO_OPEN_FILE; }
|
||||
if(usrset->ContentID[i] == 0x100000000){
|
||||
u8 hash[0x20];
|
||||
ctr_sha(usrset->ContentPath[i],strlen(usrset->ContentPath[i]),hash,CTR_SHA_256);
|
||||
ciaset->content.ContentId[j] = u8_to_u32(hash,BE);
|
||||
if(usrset->common.contentPath[i]){
|
||||
ciaset->content.contentFilePtrs[j] = fopen(usrset->common.contentPath[i],"rb");
|
||||
if(!ciaset->content.contentFilePtrs[j]){
|
||||
fprintf(stderr,"[CIA ERROR] Failed to open \"%s\"\n",usrset->common.contentPath[i]);
|
||||
return FAILED_TO_OPEN_FILE;
|
||||
}
|
||||
else ciaset->content.ContentId[j] = (u32)usrset->ContentID[i];
|
||||
ciaset->content.ContentIndex[j] = (u16)i;
|
||||
if(usrset->cia.contentId[i] == 0x100000000){
|
||||
u8 hash[0x20];
|
||||
ctr_sha(usrset->common.contentPath[i],strlen(usrset->common.contentPath[i]),hash,CTR_SHA_256);
|
||||
ciaset->content.contentId[j] = u8_to_u32(hash,BE);
|
||||
}
|
||||
else
|
||||
ciaset->content.contentId[j] = (u32)usrset->cia.contentId[i];
|
||||
ciaset->content.contentIndex[j] = (u16)i;
|
||||
|
||||
// Get Data from ncch HDR
|
||||
GetNCCH_CommonHDR(hdr,ciaset->content.ContentFilePtrs[j],NULL);
|
||||
GetNCCH_CommonHDR(hdr,ciaset->content.contentFilePtrs[j],NULL);
|
||||
|
||||
// Get TitleID
|
||||
memcpy(ciaset->content.ContentTitleId[j],hdr->title_id,8);
|
||||
memcpy(ciaset->content.contentTitleId[j],hdr->titleId,8);
|
||||
|
||||
// Get Size
|
||||
ciaset->content.ContentSize[j] = GetNCCH_MediaSize(hdr)*GetNCCH_MediaUnitSize(hdr);
|
||||
ciaset->content.ContentOffset[j] = ciaset->content.TotalContentSize;
|
||||
ciaset->content.contentSize[j] = GetNCCH_MediaSize(hdr)*GetNCCH_MediaUnitSize(hdr);
|
||||
ciaset->content.contentOffset[j] = ciaset->content.totalContentSize,0x40;
|
||||
|
||||
ciaset->content.TotalContentSize += ciaset->content.ContentSize[j];
|
||||
ciaset->content.totalContentSize += ciaset->content.contentSize[j];
|
||||
|
||||
|
||||
// Finish get next content
|
||||
@@ -349,13 +370,13 @@ int GetContentFilePtrs(cia_settings *ciaset, user_settings *usrset)
|
||||
}
|
||||
}
|
||||
free(hdr);
|
||||
ciaset->content.ContentCount = j;
|
||||
ciaset->content.contentCount = j;
|
||||
|
||||
// Check Conflicting IDs
|
||||
for(int i = 0; i < ciaset->content.ContentCount; i++){
|
||||
for(j = i+1; j < ciaset->content.ContentCount; j++){
|
||||
if(ciaset->content.ContentId[j] == ciaset->content.ContentId[i]){
|
||||
fprintf(stderr,"[CIA ERROR] CIA Content %d and %d, have conflicting IDs\n",ciaset->content.ContentIndex[j],ciaset->content.ContentIndex[i]);
|
||||
for(int i = 0; i < ciaset->content.contentCount; i++){
|
||||
for(j = i+1; j < ciaset->content.contentCount; j++){
|
||||
if(ciaset->content.contentId[j] == ciaset->content.contentId[i]){
|
||||
fprintf(stderr,"[CIA ERROR] CIA Content %d and %d, have conflicting IDs\n",ciaset->content.contentIndex[j],ciaset->content.contentIndex[i]);
|
||||
return CIA_CONFILCTING_CONTENT_IDS;
|
||||
}
|
||||
}
|
||||
@@ -365,8 +386,8 @@ int GetContentFilePtrs(cia_settings *ciaset, user_settings *usrset)
|
||||
|
||||
int GetSettingsFromSrl(cia_settings *ciaset)
|
||||
{
|
||||
SRL_Header *hdr = (SRL_Header*)ciaset->content.content0;
|
||||
if(!hdr || ciaset->content.content0_FileLen < sizeof(SRL_Header)) {
|
||||
SRL_Header *hdr = (SRL_Header*)ciaset->inFile;
|
||||
if(!hdr || ciaset->inFileSize < sizeof(SRL_Header)) {
|
||||
fprintf(stderr,"[CIA ERROR] Invalid TWL SRL File\n");
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
@@ -378,26 +399,26 @@ int GetSettingsFromSrl(cia_settings *ciaset)
|
||||
}
|
||||
|
||||
// Generate and store Converted TitleID
|
||||
u64_to_u8(ciaset->TitleID,ConvertTwlIdToCtrId(u8_to_u64(hdr->title_id,LE)),BE);
|
||||
u64_to_u8(ciaset->common.titleId,ConvertTwlIdToCtrId(u8_to_u64(hdr->title_id,LE)),BE);
|
||||
//memdump(stdout,"SRL TID: ",ciaset->TitleID,8);
|
||||
|
||||
// Get TWL Flag
|
||||
ciaset->tmd.twl_flag = ((hdr->reserved_flags[3] & 6) >> 1);
|
||||
ciaset->tmd.twlFlag = ((hdr->reserved_flags[3] & 6) >> 1);
|
||||
|
||||
// Get Remaster Version
|
||||
u16 version = SetupVersion(hdr->rom_version,ciaset->Version[1],0);
|
||||
u16_to_u8(ciaset->tik.TicketVersion,version,BE);
|
||||
u16_to_u8(ciaset->tmd.TitleVersion,version,BE);
|
||||
u16 version = SetupVersion(hdr->rom_version,ciaset->common.titleVersion[1],0);
|
||||
ciaset->tik.version = version;
|
||||
ciaset->tmd.version = version;
|
||||
|
||||
// Get SaveDataSize (Public and Private)
|
||||
memcpy(ciaset->tmd.SaveDataSize,hdr->pub_save_data_size,4);
|
||||
memcpy(ciaset->tmd.PrivSaveDataSize,hdr->priv_save_data_size,4);
|
||||
memcpy(ciaset->tmd.savedataSize,hdr->pub_save_data_size,4);
|
||||
memcpy(ciaset->tmd.privSavedataSize,hdr->priv_save_data_size,4);
|
||||
|
||||
// Setting CIA Content Settings
|
||||
ciaset->content.ContentCount = 1;
|
||||
ciaset->content.ContentOffset[0] = 0;
|
||||
ciaset->content.ContentSize[0] = ciaset->content.content0_FileLen;
|
||||
ciaset->content.TotalContentSize = ciaset->content.content0_FileLen;
|
||||
ciaset->content.contentCount = 1;
|
||||
ciaset->content.contentOffset[0] = 0;
|
||||
ciaset->content.contentSize[0] = ciaset->inFileSize;
|
||||
ciaset->content.totalContentSize = ciaset->inFileSize;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -408,14 +429,14 @@ int GetSettingsFromCci(cia_settings *ciaset)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
if(!IsCci(ciaset->content.content0)){
|
||||
if(!IsCci(ciaset->inFile)){
|
||||
fprintf(stderr,"[CIA ERROR] Invalid CCI file\n");
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
|
||||
u32 ncch0_offset = GetPartitionOffset(ciaset->content.content0,0);
|
||||
u32 ncch0_offset = GetPartitionOffset(ciaset->inFile,0);
|
||||
if(!ncch0_offset){
|
||||
fprintf(stderr,"[CIA ERROR] Invalid CCI file (invalid ncch0 size)\n");
|
||||
fprintf(stderr,"[CIA ERROR] Invalid CCI file (invalid ncch0)\n");
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
|
||||
@@ -424,32 +445,32 @@ int GetSettingsFromCci(cia_settings *ciaset)
|
||||
fprintf(stderr,"Import of Ncch 0 failed(%d)\n",result);
|
||||
return result;
|
||||
}
|
||||
ciaset->content.ContentCount = 1;
|
||||
ciaset->content.CCIContentOffsets[0] = ncch0_offset;
|
||||
NCCH_Header *hdr = malloc(sizeof(NCCH_Header));
|
||||
ciaset->content.contentCount = 1;
|
||||
ciaset->content.cciContentOffsets[0] = ncch0_offset;
|
||||
ncch_hdr *hdr = malloc(sizeof(ncch_hdr));
|
||||
for(int i = 1; i < 8; i++){
|
||||
if(GetPartitionSize(ciaset->content.content0,i)){
|
||||
ciaset->content.CCIContentOffsets[ciaset->content.ContentCount] = GetPartitionOffset(ciaset->content.content0,i);
|
||||
if(GetPartitionSize(ciaset->inFile,i)){
|
||||
ciaset->content.cciContentOffsets[ciaset->content.contentCount] = GetPartitionOffset(ciaset->inFile,i);
|
||||
|
||||
// Get Data from ncch HDR
|
||||
GetNCCH_CommonHDR(hdr,NULL,GetPartition(ciaset->content.content0,i));
|
||||
GetNCCH_CommonHDR(hdr,NULL,GetPartition(ciaset->inFile,i));
|
||||
|
||||
// Get Size
|
||||
ciaset->content.ContentSize[ciaset->content.ContentCount] = GetPartitionSize(ciaset->content.content0,i);
|
||||
ciaset->content.ContentOffset[ciaset->content.ContentCount] = ciaset->content.TotalContentSize;
|
||||
ciaset->content.contentSize[ciaset->content.contentCount] = GetPartitionSize(ciaset->inFile,i);
|
||||
ciaset->content.contentOffset[ciaset->content.contentCount] = ciaset->content.totalContentSize;
|
||||
|
||||
ciaset->content.TotalContentSize += ciaset->content.ContentSize[ciaset->content.ContentCount];
|
||||
ciaset->content.totalContentSize += ciaset->content.contentSize[ciaset->content.contentCount];
|
||||
|
||||
// Get ID
|
||||
u8 hash[0x20];
|
||||
ctr_sha((u8*)hdr,0x200,hash,CTR_SHA_256);
|
||||
ciaset->content.ContentId[ciaset->content.ContentCount] = u8_to_u32(hash,BE);
|
||||
ciaset->content.contentId[ciaset->content.contentCount] = u8_to_u32(hash,BE);
|
||||
|
||||
// Get Index
|
||||
ciaset->content.ContentIndex[ciaset->content.ContentCount] = i;
|
||||
ciaset->content.contentIndex[ciaset->content.contentCount] = i;
|
||||
|
||||
// Increment Content Count
|
||||
ciaset->content.ContentCount++;
|
||||
ciaset->content.contentCount++;
|
||||
}
|
||||
}
|
||||
free(hdr);
|
||||
@@ -464,130 +485,136 @@ u16 SetupVersion(u16 Major, u16 Minor, u16 Micro)
|
||||
|
||||
int BuildCIA_CertChain(cia_settings *ciaset)
|
||||
{
|
||||
ciaset->CIA_Sections.CertChain.size = GetCertSize(ciaset->keys->certs.ca_cert) + GetCertSize(ciaset->keys->certs.tik_cert) + GetCertSize(ciaset->keys->certs.tmd_cert);
|
||||
ciaset->CIA_Sections.CertChain.buffer = malloc(ciaset->CIA_Sections.CertChain.size);
|
||||
if(!ciaset->CIA_Sections.CertChain.buffer) { fprintf(stderr,"[CIA ERROR] MEM ERROR\n"); return MEM_ERROR; }
|
||||
memcpy(ciaset->CIA_Sections.CertChain.buffer,ciaset->keys->certs.ca_cert,GetCertSize(ciaset->keys->certs.ca_cert));
|
||||
memcpy((ciaset->CIA_Sections.CertChain.buffer+GetCertSize(ciaset->keys->certs.ca_cert)),ciaset->keys->certs.tik_cert,GetCertSize(ciaset->keys->certs.tik_cert));
|
||||
memcpy((ciaset->CIA_Sections.CertChain.buffer+GetCertSize(ciaset->keys->certs.ca_cert)+GetCertSize(ciaset->keys->certs.tik_cert)),ciaset->keys->certs.tmd_cert,GetCertSize(ciaset->keys->certs.tmd_cert));
|
||||
ciaset->ciaSections.certChain.size = GetCertSize(ciaset->keys->certs.caCert) + GetCertSize(ciaset->keys->certs.xsCert) + GetCertSize(ciaset->keys->certs.cpCert);
|
||||
ciaset->ciaSections.certChain.buffer = malloc(ciaset->ciaSections.certChain.size);
|
||||
if(!ciaset->ciaSections.certChain.buffer) {
|
||||
fprintf(stderr,"[CIA ERROR] Not enough memory\n");
|
||||
return MEM_ERROR;
|
||||
}
|
||||
memcpy(ciaset->ciaSections.certChain.buffer,ciaset->keys->certs.caCert,GetCertSize(ciaset->keys->certs.caCert));
|
||||
memcpy((ciaset->ciaSections.certChain.buffer+GetCertSize(ciaset->keys->certs.caCert)),ciaset->keys->certs.xsCert,GetCertSize(ciaset->keys->certs.xsCert));
|
||||
memcpy((ciaset->ciaSections.certChain.buffer+GetCertSize(ciaset->keys->certs.caCert)+GetCertSize(ciaset->keys->certs.xsCert)),ciaset->keys->certs.cpCert,GetCertSize(ciaset->keys->certs.cpCert));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int BuildCIA_Header(cia_settings *ciaset)
|
||||
{
|
||||
// Allocating memory for header
|
||||
ciaset->CIA_Sections.Header.size = sizeof(CIA_Header);
|
||||
ciaset->CIA_Sections.Header.buffer = malloc(ciaset->CIA_Sections.Header.size);
|
||||
if(!ciaset->CIA_Sections.Header.buffer){ fprintf(stderr,"[CIA ERROR] MEM ERROR\n"); return MEM_ERROR; }
|
||||
ciaset->ciaSections.ciaHdr.size = sizeof(cia_hdr);
|
||||
ciaset->ciaSections.ciaHdr.buffer = malloc(ciaset->ciaSections.ciaHdr.size);
|
||||
if(!ciaset->ciaSections.ciaHdr.buffer){
|
||||
fprintf(stderr,"[CIA ERROR] Not enough memory\n");
|
||||
return MEM_ERROR;
|
||||
}
|
||||
|
||||
CIA_Header *hdr = (CIA_Header*)ciaset->CIA_Sections.Header.buffer;
|
||||
cia_hdr *hdr = (cia_hdr*)ciaset->ciaSections.ciaHdr.buffer;
|
||||
|
||||
// Clearing
|
||||
memset(hdr,0,sizeof(CIA_Header));
|
||||
memset(hdr,0,sizeof(cia_hdr));
|
||||
|
||||
// Predict TMD Size
|
||||
ciaset->CIA_Sections.TitleMetaData.size = PredictTMDSize(ciaset->content.ContentCount);
|
||||
ciaset->ciaSections.tmd.size = PredictTMDSize(ciaset->content.contentCount);
|
||||
|
||||
// Setting Data
|
||||
u32_to_u8(hdr->HdrSize,sizeof(CIA_Header),LE);
|
||||
u16_to_u8(hdr->Type,0x0,LE);
|
||||
u16_to_u8(hdr->Version,0x0,LE);
|
||||
u32_to_u8(hdr->CertChainSize,ciaset->CIA_Sections.CertChain.size,LE);
|
||||
u32_to_u8(hdr->TicketSize,ciaset->CIA_Sections.Ticket.size,LE);
|
||||
u32_to_u8(hdr->TitleMetaDataSize,ciaset->CIA_Sections.TitleMetaData.size,LE);
|
||||
u32_to_u8(hdr->CXI_MetaSize,ciaset->CIA_Sections.CXI_MetaData.size,LE);
|
||||
u64_to_u8(hdr->ContentSize,ciaset->content.TotalContentSize,LE);
|
||||
u32_to_u8(hdr->hdrSize,sizeof(cia_hdr),LE);
|
||||
u16_to_u8(hdr->type,0x0,LE);
|
||||
u16_to_u8(hdr->version,0x0,LE);
|
||||
u32_to_u8(hdr->certChainSize,ciaset->ciaSections.certChain.size,LE);
|
||||
u32_to_u8(hdr->tikSize,ciaset->ciaSections.tik.size,LE);
|
||||
u32_to_u8(hdr->tmdSize,ciaset->ciaSections.tmd.size,LE);
|
||||
u32_to_u8(hdr->metaSize,ciaset->ciaSections.meta.size,LE);
|
||||
u64_to_u8(hdr->contentSize,ciaset->content.totalContentSize,LE);
|
||||
|
||||
// Recording Offsets
|
||||
ciaset->CIA_Sections.CertChainOffset = align_value(sizeof(CIA_Header),0x40);
|
||||
ciaset->CIA_Sections.TicketOffset = align_value(ciaset->CIA_Sections.CertChainOffset+ciaset->CIA_Sections.CertChain.size,0x40);
|
||||
ciaset->CIA_Sections.TitleMetaDataOffset = align_value(ciaset->CIA_Sections.TicketOffset+ciaset->CIA_Sections.Ticket.size,0x40);
|
||||
ciaset->CIA_Sections.ContentOffset = align_value(ciaset->CIA_Sections.TitleMetaDataOffset+ciaset->CIA_Sections.TitleMetaData.size,0x40);
|
||||
ciaset->CIA_Sections.CXI_MetaDataOffset = align_value(ciaset->CIA_Sections.ContentOffset+ciaset->content.TotalContentSize,0x40);
|
||||
ciaset->ciaSections.certChainOffset = align_value(sizeof(cia_hdr),0x40);
|
||||
ciaset->ciaSections.tikOffset = align_value(ciaset->ciaSections.certChainOffset+ciaset->ciaSections.certChain.size,0x40);
|
||||
ciaset->ciaSections.tmdOffset = align_value(ciaset->ciaSections.tikOffset+ciaset->ciaSections.tik.size,0x40);
|
||||
ciaset->ciaSections.contentOffset = align_value(ciaset->ciaSections.tmdOffset+ciaset->ciaSections.tmd.size,0x40);
|
||||
ciaset->ciaSections.metaOffset = align_value(ciaset->ciaSections.contentOffset+ciaset->content.totalContentSize,0x40);
|
||||
|
||||
// SetCIAContentIndex, actually works for all index values now. CIA files generated can now hold, with
|
||||
// validity, 65536 contents. Or at least have a content with index value of 65535.
|
||||
for(int i = 0; i < ciaset->content.ContentCount; i++){
|
||||
for(int i = 0; i < ciaset->content.contentCount; i++){
|
||||
// This works by treating the 0x2000 byte index array as an array of 2048 u32 values
|
||||
|
||||
// Used for determining which u32 chunk to write the value to
|
||||
u16 section = ciaset->content.ContentIndex[i]/32;
|
||||
u16 section = ciaset->content.contentIndex[i]/32;
|
||||
|
||||
// Calculating the value added to the u32
|
||||
u32 value = 0x80000000/(1<<ciaset->content.ContentIndex[i]);
|
||||
u32 value = 1 << (0x1F-ciaset->content.contentIndex[i]);
|
||||
|
||||
// Retrieving current u32 block
|
||||
u32 cur_content_index_section = u8_to_u32(hdr->ContentIndex+(sizeof(u32)*section),BE);
|
||||
u32 cur_content_index_section = u8_to_u32(hdr->contentIndex+(sizeof(u32)*section),BE);
|
||||
|
||||
// Adding value to block
|
||||
cur_content_index_section += value;
|
||||
|
||||
// Returning block
|
||||
u32_to_u8(hdr->ContentIndex+(sizeof(u32)*section),cur_content_index_section,BE);
|
||||
u32_to_u8(hdr->contentIndex+(sizeof(u32)*section),cur_content_index_section,BE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int WriteCurrentSectionstoFile(cia_settings *ciaset)
|
||||
{
|
||||
WriteBuffer(ciaset->CIA_Sections.Header.buffer,ciaset->CIA_Sections.Header.size,0,ciaset->out);
|
||||
WriteBuffer(ciaset->CIA_Sections.CertChain.buffer,ciaset->CIA_Sections.CertChain.size,ciaset->CIA_Sections.CertChainOffset,ciaset->out);
|
||||
WriteBuffer(ciaset->CIA_Sections.Ticket.buffer,ciaset->CIA_Sections.Ticket.size,ciaset->CIA_Sections.TicketOffset,ciaset->out);
|
||||
WriteBuffer(ciaset->CIA_Sections.CXI_MetaData.buffer,ciaset->CIA_Sections.CXI_MetaData.size,ciaset->CIA_Sections.CXI_MetaDataOffset,ciaset->out);
|
||||
WriteBuffer(ciaset->ciaSections.ciaHdr.buffer,ciaset->ciaSections.ciaHdr.size,0,ciaset->out);
|
||||
WriteBuffer(ciaset->ciaSections.certChain.buffer,ciaset->ciaSections.certChain.size,ciaset->ciaSections.certChainOffset,ciaset->out);
|
||||
WriteBuffer(ciaset->ciaSections.tik.buffer,ciaset->ciaSections.tik.size,ciaset->ciaSections.tikOffset,ciaset->out);
|
||||
WriteBuffer(ciaset->ciaSections.meta.buffer,ciaset->ciaSections.meta.size,ciaset->ciaSections.metaOffset,ciaset->out);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int WriteContentsToFile(cia_settings *ciaset, user_settings *usrset)
|
||||
int WriteContentsToFile(cia_settings *ciaset, user_settings *usrset) // re-implement so it's one for loop
|
||||
{
|
||||
u8 *Content0 = ciaset->content.content0;
|
||||
if(usrset->ConvertCci) Content0 = (u8*)(ciaset->content.content0+ciaset->content.CCIContentOffsets[0]);
|
||||
u8 *content0 = ciaset->inFile;
|
||||
if(usrset->common.workingFileType == infile_ncsd) content0 = (u8*)(ciaset->inFile+ciaset->content.cciContentOffsets[0]);
|
||||
|
||||
ctr_sha(Content0,ciaset->content.ContentSize[0],ciaset->content.ContentHash[0],CTR_SHA_256);
|
||||
if(ciaset->content.EncryptContents) {
|
||||
ciaset->content.ContentType[0] |= Encrypted;
|
||||
CryptContent(Content0,Content0,ciaset->content.ContentSize[0],ciaset->tik.TitleKey,ciaset->content.ContentIndex[0],ENC);
|
||||
ctr_sha(content0,ciaset->content.contentSize[0],ciaset->content.contentHash[0],CTR_SHA_256);
|
||||
if(ciaset->content.encryptCia) {
|
||||
ciaset->content.contentFlags[0] |= content_Encrypted;
|
||||
CryptContent(content0,content0,ciaset->content.contentSize[0],ciaset->common.titleKey,ciaset->content.contentIndex[0],ENC);
|
||||
}
|
||||
WriteBuffer(Content0,ciaset->content.ContentSize[0],ciaset->content.ContentOffset[0]+ciaset->CIA_Sections.ContentOffset,ciaset->out);
|
||||
WriteBuffer(content0,ciaset->content.contentSize[0],ciaset->content.contentOffset[0]+ciaset->ciaSections.contentOffset,ciaset->out);
|
||||
|
||||
// Free Buffer if Not CCI
|
||||
if(!usrset->ConvertCci){
|
||||
free(usrset->Content0.buffer);
|
||||
usrset->Content0.buffer = NULL;
|
||||
usrset->Content0.size = 0;
|
||||
// Free Buffer if Not CCI, as the rest of the content are in this image
|
||||
if(usrset->common.workingFileType != infile_ncsd){
|
||||
free(usrset->common.workingFile.buffer);
|
||||
usrset->common.workingFile.buffer = NULL;
|
||||
usrset->common.workingFile.size = 0;
|
||||
}
|
||||
|
||||
// Add additional contents, recreating them with their new TitleID
|
||||
if(usrset->Content0IsNcch){
|
||||
if(usrset->common.workingFileType == infile_ncch){
|
||||
u8 TitleId[8];
|
||||
endian_memcpy(TitleId,ciaset->TitleID,8,LE);
|
||||
for(int i = 1; i < ciaset->content.ContentCount; i++){
|
||||
u8 *ContentBuff = RetargetNCCH(ciaset->content.ContentFilePtrs[i],ciaset->content.ContentSize[i],ciaset->content.ContentTitleId[i],TitleId,ciaset->keys);
|
||||
if(!ContentBuff){
|
||||
endian_memcpy(TitleId,ciaset->common.titleId,8,LE);
|
||||
for(int i = 1; i < ciaset->content.contentCount; i++){
|
||||
u8 *content = RetargetNCCH(ciaset->content.contentFilePtrs[i],ciaset->content.contentSize[i],ciaset->content.contentTitleId[i],TitleId,ciaset->keys);
|
||||
if(!content){
|
||||
fprintf(stderr,"[CIA ERROR] Could not import content %d to CIA\n",i);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
ctr_sha(ContentBuff,ciaset->content.ContentSize[i],ciaset->content.ContentHash[i],CTR_SHA_256);
|
||||
if(ciaset->content.EncryptContents) {
|
||||
ciaset->content.ContentType[i] |= Encrypted;
|
||||
CryptContent(ContentBuff,ContentBuff,ciaset->content.ContentSize[i],ciaset->tik.TitleKey,ciaset->content.ContentIndex[i],ENC);
|
||||
ctr_sha(content,ciaset->content.contentSize[i],ciaset->content.contentHash[i],CTR_SHA_256);
|
||||
if(ciaset->content.IsDlc)
|
||||
ciaset->content.contentFlags[i] |= content_Optional;
|
||||
if(ciaset->content.encryptCia) {
|
||||
ciaset->content.contentFlags[i] |= content_Encrypted;
|
||||
CryptContent(content,content,ciaset->content.contentSize[i],ciaset->common.titleKey,ciaset->content.contentIndex[i],ENC);
|
||||
}
|
||||
WriteBuffer(ContentBuff,ciaset->content.ContentSize[i],ciaset->content.ContentOffset[i]+ciaset->CIA_Sections.ContentOffset,ciaset->out);
|
||||
free(ContentBuff);
|
||||
WriteBuffer(content,ciaset->content.contentSize[i],ciaset->content.contentOffset[i]+ciaset->ciaSections.contentOffset,ciaset->out);
|
||||
free(content);
|
||||
}
|
||||
}
|
||||
else if(usrset->ConvertCci){
|
||||
for(int i = 1; i < ciaset->content.ContentCount; i++){
|
||||
u8 *ContentBuff = (u8*)(ciaset->content.content0+ciaset->content.CCIContentOffsets[i]);
|
||||
ctr_sha(ContentBuff,ciaset->content.ContentSize[i],ciaset->content.ContentHash[i],CTR_SHA_256);
|
||||
if(ciaset->content.EncryptContents) {
|
||||
ciaset->content.ContentType[i] |= Encrypted;
|
||||
CryptContent(ContentBuff,ContentBuff,ciaset->content.ContentSize[i],ciaset->tik.TitleKey,ciaset->content.ContentIndex[i],ENC);
|
||||
else if(usrset->common.workingFileType == infile_ncsd){ // This makes the assumption the CCI is valid
|
||||
for(int i = 1; i < ciaset->content.contentCount; i++){
|
||||
u8 *content = (u8*)(ciaset->inFile+ciaset->content.cciContentOffsets[i]);
|
||||
ctr_sha(content,ciaset->content.contentSize[i],ciaset->content.contentHash[i],CTR_SHA_256);
|
||||
if(ciaset->content.encryptCia) {
|
||||
ciaset->content.contentFlags[i] |= content_Encrypted;
|
||||
CryptContent(content,content,ciaset->content.contentSize[i],ciaset->common.titleKey,ciaset->content.contentIndex[i],ENC);
|
||||
}
|
||||
WriteBuffer(ContentBuff,ciaset->content.ContentSize[i],ciaset->content.ContentOffset[i]+ciaset->CIA_Sections.ContentOffset,ciaset->out);
|
||||
WriteBuffer(content,ciaset->content.contentSize[i],ciaset->content.contentOffset[i]+ciaset->ciaSections.contentOffset,ciaset->out);
|
||||
}
|
||||
free(usrset->Content0.buffer);
|
||||
usrset->Content0.buffer = NULL;
|
||||
usrset->Content0.size = 0;
|
||||
free(usrset->common.workingFile.buffer);
|
||||
usrset->common.workingFile.buffer = NULL;
|
||||
usrset->common.workingFile.size = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -596,7 +623,7 @@ int WriteContentsToFile(cia_settings *ciaset, user_settings *usrset)
|
||||
|
||||
int WriteTMDToFile(cia_settings *ciaset)
|
||||
{
|
||||
WriteBuffer(ciaset->CIA_Sections.TitleMetaData.buffer,ciaset->CIA_Sections.TitleMetaData.size,ciaset->CIA_Sections.TitleMetaDataOffset,ciaset->out);
|
||||
WriteBuffer(ciaset->ciaSections.tmd.buffer,ciaset->ciaSections.tmd.size,ciaset->ciaSections.tmdOffset,ciaset->out);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,98 +10,115 @@ typedef enum
|
||||
// Structs
|
||||
typedef struct
|
||||
{
|
||||
u8 HdrSize[4];
|
||||
u8 Type[2];
|
||||
u8 Version[2];
|
||||
u8 CertChainSize[4];
|
||||
u8 TicketSize[4];
|
||||
u8 TitleMetaDataSize[4];
|
||||
u8 CXI_MetaSize[4];
|
||||
u8 ContentSize[8];
|
||||
u8 ContentIndex[0x2000];
|
||||
} CIA_Header;
|
||||
u8 hdrSize[4];
|
||||
u8 type[2];
|
||||
u8 version[2];
|
||||
u8 certChainSize[4];
|
||||
u8 tikSize[4];
|
||||
u8 tmdSize[4];
|
||||
u8 metaSize[4];
|
||||
u8 contentSize[8];
|
||||
u8 contentIndex[0x2000];
|
||||
} cia_hdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 DependancyList[0x30*0x8];
|
||||
u8 Reserved0[0x180];
|
||||
u8 CoreVersion[4];
|
||||
u8 Reserved1[0xfc];
|
||||
} MetaData_Struct;
|
||||
u8 dependencyList[0x30*0x8];
|
||||
u8 padding0[0x180];
|
||||
u8 coreVersion[4];
|
||||
u8 padding1[0xfc];
|
||||
} cia_metadata;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 *inFile;
|
||||
u64 inFileSize;
|
||||
|
||||
FILE *out;
|
||||
|
||||
u8 TitleID[8];
|
||||
u8 Title_type[4];
|
||||
u16 Version[3];
|
||||
|
||||
keys_struct *keys;
|
||||
|
||||
struct{
|
||||
u8 ca_crl_version;
|
||||
u8 signer_crl_version;
|
||||
u8 titleId[8];
|
||||
u16 titleVersion[4];
|
||||
u8 titleKey[16];
|
||||
} common;
|
||||
|
||||
|
||||
struct{
|
||||
u8 caCrlVersion;
|
||||
u8 signerCrlVersion;
|
||||
} cert;
|
||||
|
||||
struct{
|
||||
u8 TicketIssuer[0x40];
|
||||
u8 ticket_format_ver;
|
||||
u8 TicketID[8];
|
||||
u8 DeviceID[8];
|
||||
u8 TicketVersion[3];
|
||||
u8 TitleKey[16];
|
||||
u8 issuer[0x40];
|
||||
u8 formatVersion;
|
||||
|
||||
u16 version;
|
||||
|
||||
u8 ticketId[8];
|
||||
u8 deviceId[8];
|
||||
u8 licenceType;
|
||||
u8 audit;
|
||||
u8 eshopAccId[4];
|
||||
} tik;
|
||||
|
||||
struct{
|
||||
u8 TMDIssuer[0x40];
|
||||
u8 tmd_format_ver;
|
||||
u8 TitleVersion[3];
|
||||
u8 SaveDataSize[4];
|
||||
u8 PrivSaveDataSize[4];
|
||||
u8 twl_flag;
|
||||
u8 issuer[0x40];
|
||||
u8 formatVersion;
|
||||
|
||||
u16 version;
|
||||
|
||||
u8 titleType[4];
|
||||
u8 savedataSize[4];
|
||||
u8 privSavedataSize[4];
|
||||
u8 twlFlag;
|
||||
} tmd;
|
||||
|
||||
struct{
|
||||
u8 *content0;
|
||||
u64 content0_FileLen;
|
||||
bool IsCfa;
|
||||
bool KeyNotFound;
|
||||
bool EncryptContents;
|
||||
bool IsDlc;
|
||||
bool encryptCia;
|
||||
char *overrideSaveDataSize;
|
||||
|
||||
FILE **ContentFilePtrs;
|
||||
u64 CCIContentOffsets[CCI_MAX_CONTENT];
|
||||
u16 ContentCount;
|
||||
u64 ContentSize[CIA_MAX_CONTENT];
|
||||
u64 ContentOffset[CIA_MAX_CONTENT];
|
||||
u16 ContentIndex[CIA_MAX_CONTENT];
|
||||
u16 ContentType[CIA_MAX_CONTENT];
|
||||
u32 ContentId[CIA_MAX_CONTENT];
|
||||
u8 ContentHash[CIA_MAX_CONTENT][0x20];
|
||||
bool keyNotFound;
|
||||
|
||||
FILE **contentFilePtrs;
|
||||
u64 cciContentOffsets[CCI_MAX_CONTENT];
|
||||
|
||||
/* Misc Records */
|
||||
u16 contentCount;
|
||||
u64 contentOffset[CIA_MAX_CONTENT];
|
||||
u64 totalContentSize;
|
||||
|
||||
/* Content Chunk Records */
|
||||
u64 contentSize[CIA_MAX_CONTENT];
|
||||
u16 contentIndex[CIA_MAX_CONTENT];
|
||||
u16 contentFlags[CIA_MAX_CONTENT];
|
||||
u32 contentId[CIA_MAX_CONTENT];
|
||||
u8 contentHash[CIA_MAX_CONTENT][0x20];
|
||||
|
||||
u8 contentTitleId[CIA_MAX_CONTENT][8];
|
||||
|
||||
u8 ContentTitleId[CIA_MAX_CONTENT][8];
|
||||
u64 TotalContentSize;
|
||||
} content;
|
||||
|
||||
struct{
|
||||
COMPONENT_STRUCT Header;
|
||||
COMPONENT_STRUCT ciaHdr;
|
||||
|
||||
u32 CertChainOffset;
|
||||
COMPONENT_STRUCT CertChain;
|
||||
u32 certChainOffset;
|
||||
COMPONENT_STRUCT certChain;
|
||||
|
||||
u32 TicketOffset;
|
||||
COMPONENT_STRUCT Ticket;
|
||||
u32 tikOffset;
|
||||
COMPONENT_STRUCT tik;
|
||||
|
||||
u32 TitleMetaDataOffset;
|
||||
COMPONENT_STRUCT TitleMetaData;
|
||||
u32 tmdOffset;
|
||||
COMPONENT_STRUCT tmd;
|
||||
|
||||
u32 CXI_MetaDataOffset;
|
||||
COMPONENT_STRUCT CXI_MetaData;
|
||||
u32 metaOffset;
|
||||
COMPONENT_STRUCT meta;
|
||||
|
||||
u64 ContentOffset;
|
||||
} CIA_Sections;
|
||||
|
||||
// Finish CIA data req.
|
||||
u64 contentOffset;
|
||||
} ciaSections;
|
||||
} cia_settings;
|
||||
|
||||
// Public Prototypes
|
||||
|
||||
@@ -1,670 +0,0 @@
|
||||
#ifndef _CIA_CERTS_H_
|
||||
#define _CIA_CERTS_H_
|
||||
|
||||
//RetailCerts
|
||||
static const unsigned char ca3_dpki_cert[0x400] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x03, 0x70, 0x41, 0x38, 0xEF,
|
||||
0xBB, 0xBD, 0xA1, 0x6A, 0x98, 0x7D, 0xD9, 0x01,
|
||||
0x32, 0x6D, 0x1C, 0x94, 0x59, 0x48, 0x4C, 0x88,
|
||||
0xA2, 0x86, 0x1B, 0x91, 0xA3, 0x12, 0x58, 0x7A,
|
||||
0xE7, 0x0E, 0xF6, 0x23, 0x7E, 0xC5, 0x0E, 0x10,
|
||||
0x32, 0xDC, 0x39, 0xDD, 0xE8, 0x9A, 0x96, 0xA8,
|
||||
0xE8, 0x59, 0xD7, 0x6A, 0x98, 0xA6, 0xE7, 0xE3,
|
||||
0x6A, 0x0C, 0xFE, 0x35, 0x2C, 0xA8, 0x93, 0x05,
|
||||
0x82, 0x34, 0xFF, 0x83, 0x3F, 0xCB, 0x3B, 0x03,
|
||||
0x81, 0x1E, 0x9F, 0x0D, 0xC0, 0xD9, 0xA5, 0x2F,
|
||||
0x80, 0x45, 0xB4, 0xB2, 0xF9, 0x41, 0x1B, 0x67,
|
||||
0xA5, 0x1C, 0x44, 0xB5, 0xEF, 0x8C, 0xE7, 0x7B,
|
||||
0xD6, 0xD5, 0x6B, 0xA7, 0x57, 0x34, 0xA1, 0x85,
|
||||
0x6D, 0xE6, 0xD4, 0xBE, 0xD6, 0xD3, 0xA2, 0x42,
|
||||
0xC7, 0xC8, 0x79, 0x1B, 0x34, 0x22, 0x37, 0x5E,
|
||||
0x5C, 0x77, 0x9A, 0xBF, 0x07, 0x2F, 0x76, 0x95,
|
||||
0xEF, 0xA0, 0xF7, 0x5B, 0xCB, 0x83, 0x78, 0x9F,
|
||||
0xC3, 0x0E, 0x3F, 0xE4, 0xCC, 0x83, 0x92, 0x20,
|
||||
0x78, 0x40, 0x63, 0x89, 0x49, 0xC7, 0xF6, 0x88,
|
||||
0x56, 0x5F, 0x64, 0x9B, 0x74, 0xD6, 0x3D, 0x8D,
|
||||
0x58, 0xFF, 0xAD, 0xDA, 0x57, 0x1E, 0x95, 0x54,
|
||||
0x42, 0x6B, 0x13, 0x18, 0xFC, 0x46, 0x89, 0x83,
|
||||
0xD4, 0xC8, 0xA5, 0x62, 0x8B, 0x06, 0xB6, 0xFC,
|
||||
0x5D, 0x50, 0x7C, 0x13, 0xE7, 0xA1, 0x8A, 0xC1,
|
||||
0x51, 0x1E, 0xB6, 0xD6, 0x2E, 0xA5, 0x44, 0x8F,
|
||||
0x83, 0x50, 0x14, 0x47, 0xA9, 0xAF, 0xB3, 0xEC,
|
||||
0xC2, 0x90, 0x3C, 0x9D, 0xD5, 0x2F, 0x92, 0x2A,
|
||||
0xC9, 0xAC, 0xDB, 0xEF, 0x58, 0xC6, 0x02, 0x18,
|
||||
0x48, 0xD9, 0x6E, 0x20, 0x87, 0x32, 0xD3, 0xD1,
|
||||
0xD9, 0xD9, 0xEA, 0x44, 0x0D, 0x91, 0x62, 0x1C,
|
||||
0x7A, 0x99, 0xDB, 0x88, 0x43, 0xC5, 0x9C, 0x1F,
|
||||
0x2E, 0x2C, 0x7D, 0x9B, 0x57, 0x7D, 0x51, 0x2C,
|
||||
0x16, 0x6D, 0x6F, 0x7E, 0x1A, 0xAD, 0x4A, 0x77,
|
||||
0x4A, 0x37, 0x44, 0x7E, 0x78, 0xFE, 0x20, 0x21,
|
||||
0xE1, 0x4A, 0x95, 0xD1, 0x12, 0xA0, 0x68, 0xAD,
|
||||
0xA0, 0x19, 0xF4, 0x63, 0xC7, 0xA5, 0x56, 0x85,
|
||||
0xAA, 0xBB, 0x68, 0x88, 0xB9, 0x24, 0x64, 0x83,
|
||||
0xD1, 0x8B, 0x9C, 0x80, 0x6F, 0x47, 0x49, 0x18,
|
||||
0x33, 0x17, 0x82, 0x34, 0x4A, 0x4B, 0x85, 0x31,
|
||||
0x33, 0x4B, 0x26, 0x30, 0x32, 0x63, 0xD9, 0xD2,
|
||||
0xEB, 0x4F, 0x4B, 0xB9, 0x96, 0x02, 0xB3, 0x52,
|
||||
0xF6, 0xAE, 0x40, 0x46, 0xC6, 0x9A, 0x5E, 0x7E,
|
||||
0x8E, 0x4A, 0x18, 0xEF, 0x9B, 0xC0, 0xA2, 0xDE,
|
||||
0xD6, 0x13, 0x10, 0x41, 0x70, 0x12, 0xFD, 0x82,
|
||||
0x4C, 0xC1, 0x16, 0xCF, 0xB7, 0xC4, 0xC1, 0xF7,
|
||||
0xEC, 0x71, 0x77, 0xA1, 0x74, 0x46, 0xCB, 0xDE,
|
||||
0x96, 0xF3, 0xED, 0xD8, 0x8F, 0xCD, 0x05, 0x2F,
|
||||
0x0B, 0x88, 0x8A, 0x45, 0xFD, 0xAF, 0x2B, 0x63,
|
||||
0x13, 0x54, 0xF4, 0x0D, 0x16, 0xE5, 0xFA, 0x9C,
|
||||
0x2C, 0x4E, 0xDA, 0x98, 0xE7, 0x98, 0xD1, 0x5E,
|
||||
0x60, 0x46, 0xDC, 0x53, 0x63, 0xF3, 0x09, 0x6B,
|
||||
0x2C, 0x60, 0x7A, 0x9D, 0x8D, 0xD5, 0x5B, 0x15,
|
||||
0x02, 0xA6, 0xAC, 0x7D, 0x3C, 0xC8, 0xD8, 0xC5,
|
||||
0x75, 0x99, 0x8E, 0x7D, 0x79, 0x69, 0x10, 0xC8,
|
||||
0x04, 0xC4, 0x95, 0x23, 0x50, 0x57, 0xE9, 0x1E,
|
||||
0xCD, 0x26, 0x37, 0xC9, 0xC1, 0x84, 0x51, 0x51,
|
||||
0xAC, 0x6B, 0x9A, 0x04, 0x90, 0xAE, 0x3E, 0xC6,
|
||||
0xF4, 0x77, 0x40, 0xA0, 0xDB, 0x0B, 0xA3, 0x6D,
|
||||
0x07, 0x59, 0x56, 0xCE, 0xE7, 0x35, 0x4E, 0xA3,
|
||||
0xE9, 0xA4, 0xF2, 0x72, 0x0B, 0x26, 0x55, 0x0C,
|
||||
0x7D, 0x39, 0x43, 0x24, 0xBC, 0x0C, 0xB7, 0xE9,
|
||||
0x31, 0x7D, 0x8A, 0x86, 0x61, 0xF4, 0x21, 0x91,
|
||||
0xFF, 0x10, 0xB0, 0x82, 0x56, 0xCE, 0x3F, 0xD2,
|
||||
0x5B, 0x74, 0x5E, 0x51, 0x94, 0x90, 0x6B, 0x4D,
|
||||
0x61, 0xCB, 0x4C, 0x2E, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x52, 0x6F, 0x6F, 0x74, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x43, 0x41, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x7B, 0xE8, 0xEF, 0x6C,
|
||||
0xB2, 0x79, 0xC9, 0xE2, 0xEE, 0xE1, 0x21, 0xC6,
|
||||
0xEA, 0xF4, 0x4F, 0xF6, 0x39, 0xF8, 0x8F, 0x07,
|
||||
0x8B, 0x4B, 0x77, 0xED, 0x9F, 0x95, 0x60, 0xB0,
|
||||
0x35, 0x82, 0x81, 0xB5, 0x0E, 0x55, 0xAB, 0x72,
|
||||
0x11, 0x15, 0xA1, 0x77, 0x70, 0x3C, 0x7A, 0x30,
|
||||
0xFE, 0x3A, 0xE9, 0xEF, 0x1C, 0x60, 0xBC, 0x1D,
|
||||
0x97, 0x46, 0x76, 0xB2, 0x3A, 0x68, 0xCC, 0x04,
|
||||
0xB1, 0x98, 0x52, 0x5B, 0xC9, 0x68, 0xF1, 0x1D,
|
||||
0xE2, 0xDB, 0x50, 0xE4, 0xD9, 0xE7, 0xF0, 0x71,
|
||||
0xE5, 0x62, 0xDA, 0xE2, 0x09, 0x22, 0x33, 0xE9,
|
||||
0xD3, 0x63, 0xF6, 0x1D, 0xD7, 0xC1, 0x9F, 0xF3,
|
||||
0xA4, 0xA9, 0x1E, 0x8F, 0x65, 0x53, 0xD4, 0x71,
|
||||
0xDD, 0x7B, 0x84, 0xB9, 0xF1, 0xB8, 0xCE, 0x73,
|
||||
0x35, 0xF0, 0xF5, 0x54, 0x05, 0x63, 0xA1, 0xEA,
|
||||
0xB8, 0x39, 0x63, 0xE0, 0x9B, 0xE9, 0x01, 0x01,
|
||||
0x1F, 0x99, 0x54, 0x63, 0x61, 0x28, 0x70, 0x20,
|
||||
0xE9, 0xCC, 0x0D, 0xAB, 0x48, 0x7F, 0x14, 0x0D,
|
||||
0x66, 0x26, 0xA1, 0x83, 0x6D, 0x27, 0x11, 0x1F,
|
||||
0x20, 0x68, 0xDE, 0x47, 0x72, 0x14, 0x91, 0x51,
|
||||
0xCF, 0x69, 0xC6, 0x1B, 0xA6, 0x0E, 0xF9, 0xD9,
|
||||
0x49, 0xA0, 0xF7, 0x1F, 0x54, 0x99, 0xF2, 0xD3,
|
||||
0x9A, 0xD2, 0x8C, 0x70, 0x05, 0x34, 0x82, 0x93,
|
||||
0xC4, 0x31, 0xFF, 0xBD, 0x33, 0xF6, 0xBC, 0xA6,
|
||||
0x0D, 0xC7, 0x19, 0x5E, 0xA2, 0xBC, 0xC5, 0x6D,
|
||||
0x20, 0x0B, 0xAF, 0x6D, 0x06, 0xD0, 0x9C, 0x41,
|
||||
0xDB, 0x8D, 0xE9, 0xC7, 0x20, 0x15, 0x4C, 0xA4,
|
||||
0x83, 0x2B, 0x69, 0xC0, 0x8C, 0x69, 0xCD, 0x3B,
|
||||
0x07, 0x3A, 0x00, 0x63, 0x60, 0x2F, 0x46, 0x2D,
|
||||
0x33, 0x80, 0x61, 0xA5, 0xEA, 0x6C, 0x91, 0x5C,
|
||||
0xD5, 0x62, 0x35, 0x79, 0xC3, 0xEB, 0x64, 0xCE,
|
||||
0x44, 0xEF, 0x58, 0x6D, 0x14, 0xBA, 0xAA, 0x88,
|
||||
0x34, 0x01, 0x9B, 0x3E, 0xEB, 0xEE, 0xD3, 0x79,
|
||||
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char xsC_dpki_cert[0x300] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x04, 0x91, 0x9E, 0xBE, 0x46,
|
||||
0x4A, 0xD0, 0xF5, 0x52, 0xCD, 0x1B, 0x72, 0xE7,
|
||||
0x88, 0x49, 0x10, 0xCF, 0x55, 0xA9, 0xF0, 0x2E,
|
||||
0x50, 0x78, 0x96, 0x41, 0xD8, 0x96, 0x68, 0x3D,
|
||||
0xC0, 0x05, 0xBD, 0x0A, 0xEA, 0x87, 0x07, 0x9D,
|
||||
0x8A, 0xC2, 0x84, 0xC6, 0x75, 0x06, 0x5F, 0x74,
|
||||
0xC8, 0xBF, 0x37, 0xC8, 0x80, 0x44, 0x40, 0x95,
|
||||
0x02, 0xA0, 0x22, 0x98, 0x0B, 0xB8, 0xAD, 0x48,
|
||||
0x38, 0x3F, 0x6D, 0x28, 0xA7, 0x9D, 0xE3, 0x96,
|
||||
0x26, 0xCC, 0xB2, 0xB2, 0x2A, 0x0F, 0x19, 0xE4,
|
||||
0x10, 0x32, 0xF0, 0x94, 0xB3, 0x9F, 0xF0, 0x13,
|
||||
0x31, 0x46, 0xDE, 0xC8, 0xF6, 0xC1, 0xA9, 0xD5,
|
||||
0x5C, 0xD2, 0x8D, 0x9E, 0x1C, 0x47, 0xB3, 0xD1,
|
||||
0x1F, 0x4F, 0x54, 0x26, 0xC2, 0xC7, 0x80, 0x13,
|
||||
0x5A, 0x27, 0x75, 0xD3, 0xCA, 0x67, 0x9B, 0xC7,
|
||||
0xE8, 0x34, 0xF0, 0xE0, 0xFB, 0x58, 0xE6, 0x88,
|
||||
0x60, 0xA7, 0x13, 0x30, 0xFC, 0x95, 0x79, 0x17,
|
||||
0x93, 0xC8, 0xFB, 0xA9, 0x35, 0xA7, 0xA6, 0x90,
|
||||
0x8F, 0x22, 0x9D, 0xEE, 0x2A, 0x0C, 0xA6, 0xB9,
|
||||
0xB2, 0x3B, 0x12, 0xD4, 0x95, 0xA6, 0xFE, 0x19,
|
||||
0xD0, 0xD7, 0x26, 0x48, 0x21, 0x68, 0x78, 0x60,
|
||||
0x5A, 0x66, 0x53, 0x8D, 0xBF, 0x37, 0x68, 0x99,
|
||||
0x90, 0x5D, 0x34, 0x45, 0xFC, 0x5C, 0x72, 0x7A,
|
||||
0x0E, 0x13, 0xE0, 0xE2, 0xC8, 0x97, 0x1C, 0x9C,
|
||||
0xFA, 0x6C, 0x60, 0x67, 0x88, 0x75, 0x73, 0x2A,
|
||||
0x4E, 0x75, 0x52, 0x3D, 0x2F, 0x56, 0x2F, 0x12,
|
||||
0xAA, 0xBD, 0x15, 0x73, 0xBF, 0x06, 0xC9, 0x40,
|
||||
0x54, 0xAE, 0xFA, 0x81, 0xA7, 0x14, 0x17, 0xAF,
|
||||
0x9A, 0x4A, 0x06, 0x6D, 0x0F, 0xFC, 0x5A, 0xD6,
|
||||
0x4B, 0xAB, 0x28, 0xB1, 0xFF, 0x60, 0x66, 0x1F,
|
||||
0x44, 0x37, 0xD4, 0x9E, 0x1E, 0x0D, 0x94, 0x12,
|
||||
0xEB, 0x4B, 0xCA, 0xCF, 0x4C, 0xFD, 0x6A, 0x34,
|
||||
0x08, 0x84, 0x79, 0x82, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x43, 0x41, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x58, 0x53, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x63, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x13, 0x7A, 0x08, 0x94,
|
||||
0xAD, 0x50, 0x5B, 0xB6, 0xC6, 0x7E, 0x2E, 0x5B,
|
||||
0xDD, 0x6A, 0x3B, 0xEC, 0x43, 0xD9, 0x10, 0xC7,
|
||||
0x72, 0xE9, 0xCC, 0x29, 0x0D, 0xA5, 0x85, 0x88,
|
||||
0xB7, 0x7D, 0xCC, 0x11, 0x68, 0x0B, 0xB3, 0xE2,
|
||||
0x9F, 0x4E, 0xAB, 0xBB, 0x26, 0xE9, 0x8C, 0x26,
|
||||
0x01, 0x98, 0x5C, 0x04, 0x1B, 0xB1, 0x43, 0x78,
|
||||
0xE6, 0x89, 0x18, 0x1A, 0xAD, 0x77, 0x05, 0x68,
|
||||
0xE9, 0x28, 0xA2, 0xB9, 0x81, 0x67, 0xEE, 0x3E,
|
||||
0x10, 0xD0, 0x72, 0xBE, 0xEF, 0x1F, 0xA2, 0x2F,
|
||||
0xA2, 0xAA, 0x3E, 0x13, 0xF1, 0x1E, 0x18, 0x36,
|
||||
0xA9, 0x2A, 0x42, 0x81, 0xEF, 0x70, 0xAA, 0xF4,
|
||||
0xE4, 0x62, 0x99, 0x82, 0x21, 0xC6, 0xFB, 0xB9,
|
||||
0xBD, 0xD0, 0x17, 0xE6, 0xAC, 0x59, 0x04, 0x94,
|
||||
0xE9, 0xCE, 0xA9, 0x85, 0x9C, 0xEB, 0x2D, 0x2A,
|
||||
0x4C, 0x17, 0x66, 0xF2, 0xC3, 0x39, 0x12, 0xC5,
|
||||
0x8F, 0x14, 0xA8, 0x03, 0xE3, 0x6F, 0xCC, 0xDC,
|
||||
0xCC, 0xDC, 0x13, 0xFD, 0x7A, 0xE7, 0x7C, 0x7A,
|
||||
0x78, 0xD9, 0x97, 0xE6, 0xAC, 0xC3, 0x55, 0x57,
|
||||
0xE0, 0xD3, 0xE9, 0xEB, 0x64, 0xB4, 0x3C, 0x92,
|
||||
0xF4, 0xC5, 0x0D, 0x67, 0xA6, 0x02, 0xDE, 0xB3,
|
||||
0x91, 0xB0, 0x66, 0x61, 0xCD, 0x32, 0x88, 0x0B,
|
||||
0xD6, 0x49, 0x12, 0xAF, 0x1C, 0xBC, 0xB7, 0x16,
|
||||
0x2A, 0x06, 0xF0, 0x25, 0x65, 0xD3, 0xB0, 0xEC,
|
||||
0xE4, 0xFC, 0xEC, 0xDD, 0xAE, 0x8A, 0x49, 0x34,
|
||||
0xDB, 0x8E, 0xE6, 0x7F, 0x30, 0x17, 0x98, 0x62,
|
||||
0x21, 0x15, 0x5D, 0x13, 0x1C, 0x6C, 0x3F, 0x09,
|
||||
0xAB, 0x19, 0x45, 0xC2, 0x06, 0xAC, 0x70, 0xC9,
|
||||
0x42, 0xB3, 0x6F, 0x49, 0xA1, 0x18, 0x3B, 0xCD,
|
||||
0x78, 0xB6, 0xE4, 0xB4, 0x7C, 0x6C, 0x5C, 0xAC,
|
||||
0x0F, 0x8D, 0x62, 0xF8, 0x97, 0xC6, 0x95, 0x3D,
|
||||
0xD1, 0x2F, 0x28, 0xB7, 0x0C, 0x5B, 0x7D, 0xF7,
|
||||
0x51, 0x81, 0x9A, 0x98, 0x34, 0x65, 0x26, 0x25,
|
||||
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char cpB_dpki_cert[0x300] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x04, 0x2E, 0xA6, 0x6C, 0x66,
|
||||
0xCF, 0xF3, 0x35, 0x79, 0x7D, 0x04, 0x97, 0xB7,
|
||||
0x7A, 0x19, 0x7F, 0x9F, 0xE5, 0x1A, 0xB5, 0xA4,
|
||||
0x13, 0x75, 0xDC, 0x73, 0xFD, 0x9E, 0x0B, 0x10,
|
||||
0x66, 0x9B, 0x1B, 0x9A, 0x5B, 0x7E, 0x8A, 0xB2,
|
||||
0x8F, 0x01, 0xB6, 0x7B, 0x62, 0x54, 0xC1, 0x4A,
|
||||
0xA1, 0x33, 0x14, 0x18, 0xF2, 0x5B, 0xA5, 0x49,
|
||||
0x00, 0x4C, 0x37, 0x8D, 0xD7, 0x2F, 0x0C, 0xE6,
|
||||
0x3B, 0x1F, 0x70, 0x91, 0xAA, 0xFE, 0x38, 0x09,
|
||||
0xB7, 0xAC, 0x6C, 0x28, 0x76, 0xA6, 0x1D, 0x60,
|
||||
0x51, 0x6C, 0x43, 0xA6, 0x37, 0x29, 0x16, 0x2D,
|
||||
0x28, 0x0B, 0xE2, 0x1B, 0xE8, 0xE2, 0xFE, 0x05,
|
||||
0x7D, 0x8E, 0xB6, 0xE2, 0x04, 0x24, 0x22, 0x45,
|
||||
0x73, 0x1A, 0xB6, 0xFE, 0xE3, 0x0E, 0x53, 0x35,
|
||||
0x37, 0x3E, 0xEB, 0xA9, 0x70, 0xD5, 0x31, 0xBB,
|
||||
0xA2, 0xCB, 0x22, 0x2D, 0x96, 0x84, 0x38, 0x7D,
|
||||
0x5F, 0x2A, 0x1B, 0xF7, 0x52, 0x00, 0xCE, 0x06,
|
||||
0x56, 0xE3, 0x90, 0xCE, 0x19, 0x13, 0x5B, 0x59,
|
||||
0xE1, 0x4F, 0x0F, 0xA5, 0xC1, 0x28, 0x1A, 0x73,
|
||||
0x86, 0xCC, 0xD1, 0xC8, 0xEC, 0x3F, 0xAD, 0x70,
|
||||
0xFB, 0xCE, 0x74, 0xDE, 0xEE, 0x1F, 0xD0, 0x5F,
|
||||
0x46, 0x33, 0x0B, 0x51, 0xF9, 0xB7, 0x9E, 0x1D,
|
||||
0xDB, 0xF4, 0xE3, 0x3F, 0x14, 0x88, 0x9D, 0x05,
|
||||
0x28, 0x29, 0x24, 0xC5, 0xF5, 0xDC, 0x27, 0x66,
|
||||
0xEF, 0x06, 0x27, 0xD7, 0xEE, 0xDC, 0x73, 0x6E,
|
||||
0x67, 0xC2, 0xE5, 0xB9, 0x38, 0x34, 0x66, 0x80,
|
||||
0x72, 0x21, 0x6D, 0x1C, 0x78, 0xB8, 0x23, 0xA0,
|
||||
0x72, 0xD3, 0x4F, 0xF3, 0xEC, 0xF9, 0xBD, 0x11,
|
||||
0xA2, 0x9A, 0xF1, 0x6C, 0x33, 0xBD, 0x09, 0xAF,
|
||||
0xB2, 0xD7, 0x4D, 0x53, 0x4E, 0x02, 0x7C, 0x19,
|
||||
0x24, 0x0D, 0x59, 0x5A, 0x68, 0xEB, 0xB3, 0x05,
|
||||
0xAC, 0xC4, 0x4A, 0xB3, 0x8A, 0xB8, 0x20, 0xC6,
|
||||
0xD4, 0x26, 0x56, 0x0C, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x43, 0x41, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x43, 0x50, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x62, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x13, 0x7A, 0x08, 0x0B,
|
||||
0xA6, 0x89, 0xC5, 0x90, 0xFD, 0x0B, 0x2F, 0x0D,
|
||||
0x4F, 0x56, 0xB6, 0x32, 0xFB, 0x93, 0x4E, 0xD0,
|
||||
0x73, 0x95, 0x17, 0xB3, 0x3A, 0x79, 0xDE, 0x04,
|
||||
0x0E, 0xE9, 0x2D, 0xC3, 0x1D, 0x37, 0xC7, 0xF7,
|
||||
0x3B, 0xF0, 0x4B, 0xD3, 0xE4, 0x4E, 0x20, 0xAB,
|
||||
0x5A, 0x6F, 0xEA, 0xF5, 0x98, 0x4C, 0xC1, 0xF6,
|
||||
0x06, 0x2E, 0x9A, 0x9F, 0xE5, 0x6C, 0x32, 0x85,
|
||||
0xDC, 0x6F, 0x25, 0xDD, 0xD5, 0xD0, 0xBF, 0x9F,
|
||||
0xE2, 0xEF, 0xE8, 0x35, 0xDF, 0x26, 0x34, 0xED,
|
||||
0x93, 0x7F, 0xAB, 0x02, 0x14, 0xD1, 0x04, 0x80,
|
||||
0x9C, 0xF7, 0x4B, 0x86, 0x0E, 0x6B, 0x04, 0x83,
|
||||
0xF4, 0xCD, 0x2D, 0xAB, 0x2A, 0x96, 0x02, 0xBC,
|
||||
0x56, 0xF0, 0xD6, 0xBD, 0x94, 0x6A, 0xED, 0x6E,
|
||||
0x0B, 0xE4, 0xF0, 0x8F, 0x26, 0x68, 0x6B, 0xD0,
|
||||
0x9E, 0xF7, 0xDB, 0x32, 0x5F, 0x82, 0xB1, 0x8F,
|
||||
0x6A, 0xF2, 0xED, 0x52, 0x5B, 0xFD, 0x82, 0x8B,
|
||||
0x65, 0x3F, 0xEE, 0x6E, 0xCE, 0x40, 0x0D, 0x5A,
|
||||
0x48, 0xFF, 0xE2, 0x2D, 0x53, 0x8B, 0xB5, 0x33,
|
||||
0x5B, 0x41, 0x53, 0x34, 0x2D, 0x43, 0x35, 0xAC,
|
||||
0xF5, 0x90, 0xD0, 0xD3, 0x0A, 0xE2, 0x04, 0x3C,
|
||||
0x7F, 0x5A, 0xD2, 0x14, 0xFC, 0x9C, 0x0F, 0xE6,
|
||||
0xFA, 0x40, 0xA5, 0xC8, 0x65, 0x06, 0xCA, 0x63,
|
||||
0x69, 0xBC, 0xEE, 0x44, 0xA3, 0x2D, 0x9E, 0x69,
|
||||
0x5C, 0xF0, 0x0B, 0x4F, 0xD7, 0x9A, 0xDB, 0x56,
|
||||
0x8D, 0x14, 0x9C, 0x20, 0x28, 0xA1, 0x4C, 0x9D,
|
||||
0x71, 0xB8, 0x50, 0xCA, 0x36, 0x5B, 0x37, 0xF7,
|
||||
0x0B, 0x65, 0x77, 0x91, 0xFC, 0x5D, 0x72, 0x8C,
|
||||
0x4E, 0x18, 0xFD, 0x22, 0x55, 0x7C, 0x40, 0x62,
|
||||
0xD7, 0x47, 0x71, 0x53, 0x3C, 0x70, 0x17, 0x9D,
|
||||
0x3D, 0xAE, 0x8F, 0x92, 0xB1, 0x17, 0xE4, 0x5C,
|
||||
0xB3, 0x32, 0xF3, 0xB3, 0xC2, 0xA2, 0x2E, 0x70,
|
||||
0x5C, 0xFE, 0xC6, 0x6F, 0x6D, 0xA3, 0x77, 0x2B,
|
||||
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
//DevCerts
|
||||
static const unsigned char ca4_dpki_cert[0x400] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x03, 0x19, 0x49, 0x42, 0x9D,
|
||||
0x1E, 0x58, 0xA6, 0x2E, 0x7E, 0x8B, 0x56, 0xD1,
|
||||
0xB7, 0x6A, 0xE3, 0x02, 0xFD, 0x8B, 0x97, 0x49,
|
||||
0x1F, 0x77, 0x87, 0x45, 0xF7, 0x53, 0x88, 0xC4,
|
||||
0xDD, 0x0B, 0xEB, 0x1D, 0xF1, 0x22, 0xFB, 0x96,
|
||||
0x42, 0x15, 0x14, 0x97, 0x76, 0x4A, 0x53, 0xCF,
|
||||
0x78, 0x15, 0x18, 0x45, 0xE4, 0x2C, 0xA8, 0xFD,
|
||||
0xE4, 0x86, 0xFD, 0x2A, 0x4F, 0x53, 0xF8, 0xA1,
|
||||
0xBA, 0x00, 0x8A, 0x74, 0x85, 0xFF, 0x73, 0xB3,
|
||||
0xBF, 0x7E, 0x3C, 0x98, 0x07, 0x29, 0xD0, 0x65,
|
||||
0x6B, 0x69, 0x32, 0x19, 0xAD, 0xE8, 0x35, 0xEB,
|
||||
0x5F, 0xFF, 0xFC, 0xCB, 0x7C, 0xBB, 0x5E, 0x30,
|
||||
0x7F, 0xE0, 0x68, 0x8B, 0x88, 0x8E, 0xF2, 0xD2,
|
||||
0x05, 0x3F, 0xB7, 0xE7, 0x91, 0xE9, 0x85, 0xFD,
|
||||
0x15, 0xEF, 0x10, 0xD7, 0x9C, 0xCA, 0x88, 0xD6,
|
||||
0xBB, 0x15, 0xE8, 0xE4, 0x71, 0x4A, 0x98, 0xEE,
|
||||
0x09, 0xBF, 0x7B, 0x8A, 0xF0, 0x53, 0x23, 0x2B,
|
||||
0x64, 0x50, 0xE6, 0xD5, 0xFD, 0xFF, 0xC2, 0x0A,
|
||||
0x6D, 0x1E, 0xA6, 0xA2, 0x38, 0x12, 0xE1, 0x01,
|
||||
0x45, 0x25, 0xD5, 0x6D, 0x40, 0x82, 0x70, 0x3B,
|
||||
0x86, 0x98, 0x69, 0x59, 0xA7, 0x3C, 0xD1, 0xA1,
|
||||
0x43, 0x64, 0xD2, 0xC2, 0xDA, 0xEA, 0x96, 0xB0,
|
||||
0x95, 0xF7, 0x6C, 0x46, 0xE4, 0xFF, 0x41, 0x55,
|
||||
0x46, 0x5E, 0x70, 0xEF, 0x1E, 0xD3, 0x10, 0x53,
|
||||
0xD9, 0x70, 0x11, 0xE0, 0x10, 0xCC, 0x93, 0xE7,
|
||||
0x91, 0x40, 0x13, 0x68, 0x7F, 0xA3, 0xA8, 0x02,
|
||||
0x99, 0x6D, 0x1E, 0x55, 0x7B, 0x1C, 0xCC, 0x7A,
|
||||
0x7E, 0x8F, 0x58, 0x65, 0xC1, 0x74, 0x2E, 0x28,
|
||||
0xE2, 0x6D, 0xEF, 0x38, 0xA9, 0x3A, 0xB5, 0xD8,
|
||||
0x2D, 0x43, 0xEC, 0xCC, 0xBF, 0x0B, 0xEF, 0x22,
|
||||
0xE1, 0xFD, 0x57, 0xE2, 0x86, 0x43, 0x33, 0x58,
|
||||
0x2F, 0xED, 0xEA, 0xBC, 0x01, 0x2F, 0x98, 0x6D,
|
||||
0xDF, 0xC3, 0xE9, 0x44, 0x79, 0x73, 0x47, 0x03,
|
||||
0x08, 0x45, 0x5B, 0xDC, 0x57, 0xAA, 0x17, 0x0B,
|
||||
0x84, 0x42, 0x7F, 0x73, 0xA2, 0x9B, 0x48, 0xF6,
|
||||
0xDA, 0x13, 0x5F, 0x66, 0xC7, 0x45, 0xC1, 0x42,
|
||||
0xA8, 0x4A, 0xFB, 0x0E, 0x6A, 0x5E, 0xED, 0x85,
|
||||
0xD7, 0xB9, 0x71, 0x99, 0x36, 0xF8, 0xCE, 0x2B,
|
||||
0x62, 0x1F, 0x39, 0x5F, 0x40, 0xDC, 0x03, 0xBE,
|
||||
0xF8, 0x85, 0x4C, 0x11, 0x17, 0xFF, 0x0C, 0x12,
|
||||
0x86, 0x41, 0xCC, 0x78, 0x43, 0xB9, 0x7B, 0x43,
|
||||
0x46, 0xDB, 0x22, 0x6F, 0x60, 0x26, 0xAC, 0xB5,
|
||||
0x6C, 0x27, 0x8B, 0x8E, 0x0E, 0xA7, 0x9A, 0x2D,
|
||||
0x65, 0xEF, 0x79, 0x8E, 0x10, 0x78, 0xAD, 0x80,
|
||||
0xED, 0x4B, 0x96, 0x04, 0xD2, 0xF0, 0x8B, 0x2C,
|
||||
0xD6, 0x4A, 0x23, 0xA3, 0xDB, 0x27, 0x08, 0x33,
|
||||
0xB4, 0x02, 0xF8, 0x08, 0x51, 0xF3, 0x5B, 0xED,
|
||||
0x3E, 0xE4, 0x57, 0x7C, 0x66, 0x60, 0xFB, 0xF1,
|
||||
0x6D, 0x94, 0x13, 0xE0, 0x9C, 0x91, 0x7A, 0x49,
|
||||
0xD4, 0x2C, 0x6D, 0xA3, 0x75, 0xBC, 0x27, 0xF0,
|
||||
0x23, 0x0D, 0xB9, 0x8F, 0x89, 0x73, 0xAB, 0x02,
|
||||
0x7B, 0x52, 0x2C, 0xD5, 0x7E, 0xC0, 0x3D, 0x25,
|
||||
0xE8, 0xB3, 0xFC, 0x34, 0x94, 0xC9, 0x7F, 0xB1,
|
||||
0x08, 0xFE, 0x18, 0xC6, 0x8A, 0x43, 0x36, 0xE4,
|
||||
0x6C, 0x26, 0xB6, 0xF2, 0x80, 0xD2, 0x7E, 0x34,
|
||||
0xBE, 0x28, 0x7C, 0x3E, 0x46, 0x87, 0xBC, 0x9D,
|
||||
0x77, 0x6B, 0x76, 0xD9, 0x28, 0xD1, 0xB6, 0x35,
|
||||
0x2E, 0xC0, 0x34, 0x7D, 0x72, 0x94, 0xAA, 0x93,
|
||||
0x60, 0x26, 0x8D, 0x26, 0xF5, 0xF6, 0x52, 0x06,
|
||||
0x4A, 0xF2, 0x40, 0xD7, 0xD0, 0x0C, 0x7C, 0x5E,
|
||||
0xA3, 0xC3, 0x2D, 0xE6, 0x2D, 0x9B, 0x5C, 0x4B,
|
||||
0x4C, 0xAB, 0x6F, 0xD7, 0xBD, 0x37, 0x1D, 0x57,
|
||||
0xC2, 0x16, 0x60, 0x95, 0x91, 0x0E, 0x4A, 0xD8,
|
||||
0xE9, 0xED, 0x18, 0x1E, 0xF7, 0x61, 0x93, 0x61,
|
||||
0x53, 0x89, 0x2D, 0x77, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x52, 0x6F, 0x6F, 0x74, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x43, 0x41, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x81, 0x12, 0x2A, 0x46,
|
||||
0xC9, 0xCC, 0x2D, 0xC4, 0xDF, 0x29, 0x30, 0xE4,
|
||||
0xDF, 0x3F, 0x8C, 0x70, 0xA0, 0x78, 0x94, 0x87,
|
||||
0x75, 0xAD, 0x5E, 0x9A, 0xA6, 0x04, 0xC5, 0xB4,
|
||||
0xD8, 0xEA, 0xFF, 0x2A, 0xA1, 0xD2, 0x14, 0x67,
|
||||
0x65, 0x64, 0xEF, 0xCA, 0x28, 0xCC, 0x00, 0x15,
|
||||
0x45, 0x54, 0xA1, 0xA3, 0xEA, 0x13, 0x79, 0xE9,
|
||||
0xE6, 0xCA, 0xAC, 0xED, 0x15, 0x93, 0xFE, 0x88,
|
||||
0xD8, 0x9A, 0xC6, 0xB8, 0xAC, 0xCC, 0xAB, 0x6E,
|
||||
0x20, 0x7C, 0xEB, 0x7C, 0xCA, 0x29, 0x80, 0x9E,
|
||||
0x29, 0x80, 0x44, 0x06, 0x62, 0xB7, 0xD4, 0x38,
|
||||
0x2A, 0x15, 0xDA, 0x43, 0x08, 0x57, 0x45, 0xA9,
|
||||
0xAA, 0xE5, 0x9A, 0xA0, 0x5B, 0xDB, 0x32, 0xF6,
|
||||
0x68, 0x69, 0xA2, 0xDD, 0x42, 0x95, 0x38, 0x6C,
|
||||
0x87, 0xEC, 0xDD, 0x35, 0x08, 0xA2, 0xCF, 0x60,
|
||||
0xD0, 0x1E, 0x23, 0xEC, 0x2F, 0xE6, 0x98, 0xF4,
|
||||
0x70, 0xD6, 0x00, 0x15, 0x49, 0xA2, 0xF0, 0x67,
|
||||
0x59, 0x13, 0x1E, 0x53, 0x4C, 0x70, 0x06, 0x05,
|
||||
0x7D, 0xEF, 0x1D, 0x18, 0xA8, 0x3F, 0x0A, 0xC7,
|
||||
0x9C, 0xFE, 0x80, 0xFF, 0x5A, 0x91, 0xF2, 0xBE,
|
||||
0xD4, 0xA0, 0x83, 0x70, 0x61, 0x19, 0x0A, 0x03,
|
||||
0x29, 0x90, 0x21, 0x65, 0x40, 0x3C, 0x9A, 0x90,
|
||||
0x8F, 0xB6, 0x15, 0x73, 0x9F, 0x3C, 0xE3, 0x3B,
|
||||
0xF1, 0xBA, 0xEA, 0x16, 0xC2, 0x5B, 0xCE, 0xD7,
|
||||
0x96, 0x3F, 0xAC, 0xC9, 0xD2, 0x4D, 0x9C, 0x0A,
|
||||
0xD7, 0x6F, 0xC0, 0x20, 0xB2, 0xC4, 0xB8, 0x4C,
|
||||
0x10, 0xA7, 0x41, 0xA2, 0xCC, 0x7D, 0x9B, 0xAC,
|
||||
0x3A, 0xAC, 0xCC, 0xA3, 0x52, 0x9B, 0xAC, 0x31,
|
||||
0x6A, 0x9A, 0xA7, 0x5D, 0x2A, 0x26, 0xC7, 0xD7,
|
||||
0xD2, 0x88, 0xCB, 0xA4, 0x66, 0xC5, 0xFE, 0x5F,
|
||||
0x45, 0x4A, 0xE6, 0x79, 0x74, 0x4A, 0x90, 0xA1,
|
||||
0x57, 0x72, 0xDB, 0x3B, 0x0E, 0x47, 0xA4, 0x9A,
|
||||
0xF0, 0x31, 0xD1, 0x6D, 0xBE, 0xAB, 0x33, 0x2B,
|
||||
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char xs9_dpki_cert[0x300] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x04, 0x63, 0x80, 0x5A, 0x35,
|
||||
0x1A, 0x43, 0x7B, 0xA2, 0x43, 0x19, 0xBB, 0x3A,
|
||||
0x77, 0x7B, 0x7A, 0xF3, 0x5E, 0x72, 0x4B, 0x15,
|
||||
0x0A, 0x06, 0x39, 0x6C, 0x5F, 0xEC, 0x38, 0x45,
|
||||
0xB1, 0x88, 0x76, 0x26, 0x8D, 0x5E, 0xDA, 0xE6,
|
||||
0x2F, 0x14, 0xBA, 0x02, 0xFA, 0xD6, 0xFC, 0x3B,
|
||||
0x2B, 0xBE, 0x87, 0x07, 0x63, 0x8E, 0x55, 0xBF,
|
||||
0x05, 0x5A, 0xFC, 0xFC, 0xB3, 0x47, 0x69, 0x11,
|
||||
0x89, 0xDB, 0x1C, 0xAF, 0x4B, 0x43, 0x76, 0x62,
|
||||
0x3E, 0x30, 0x89, 0x0A, 0x9D, 0x3B, 0xBB, 0x3E,
|
||||
0x50, 0xBD, 0xF7, 0xA6, 0xC0, 0xF7, 0xF8, 0xBB,
|
||||
0x0D, 0xB5, 0x6A, 0xBB, 0xC6, 0xC3, 0x50, 0xC8,
|
||||
0x88, 0xBB, 0x9D, 0xF0, 0x9B, 0xD1, 0x30, 0x64,
|
||||
0x60, 0x69, 0xDD, 0x34, 0x67, 0xA7, 0x00, 0xEB,
|
||||
0xDC, 0xF9, 0x8C, 0xB0, 0xF7, 0x93, 0x0E, 0x81,
|
||||
0xFE, 0x98, 0xD9, 0x72, 0x45, 0x8B, 0x94, 0x7E,
|
||||
0x59, 0xE2, 0xBE, 0x4E, 0x91, 0x2D, 0x75, 0xCA,
|
||||
0x1B, 0x8E, 0x2E, 0xF4, 0x6D, 0x73, 0xB1, 0x6B,
|
||||
0x35, 0xB5, 0x67, 0x0D, 0x63, 0x2D, 0x51, 0x38,
|
||||
0x53, 0x28, 0x19, 0x1D, 0x9D, 0xAE, 0x8D, 0xC6,
|
||||
0x61, 0xCC, 0xEF, 0xA4, 0xAB, 0xE2, 0xF3, 0xB0,
|
||||
0x4C, 0x7B, 0xE2, 0x71, 0xB5, 0xF9, 0x2C, 0xFA,
|
||||
0x55, 0xCD, 0x88, 0x8B, 0x72, 0xCC, 0xBE, 0x67,
|
||||
0xFA, 0xDF, 0xEF, 0x6B, 0x53, 0x3C, 0x45, 0xD8,
|
||||
0xCB, 0xDF, 0xB2, 0x76, 0x41, 0x46, 0xD6, 0xC2,
|
||||
0x6F, 0x27, 0x16, 0xC5, 0x07, 0xF3, 0xF4, 0x44,
|
||||
0x66, 0xA3, 0x15, 0xD2, 0x77, 0xF2, 0x89, 0xDA,
|
||||
0xFD, 0xD5, 0x50, 0xCF, 0xA4, 0x9B, 0xEA, 0xCA,
|
||||
0xC9, 0x7B, 0xE5, 0x46, 0x0E, 0xED, 0x9B, 0xFB,
|
||||
0x04, 0xA9, 0xDA, 0x19, 0x58, 0xD9, 0x2A, 0x20,
|
||||
0x8A, 0xAC, 0xC1, 0xF4, 0x8E, 0xE9, 0x14, 0xD8,
|
||||
0x8A, 0xD7, 0x41, 0xD5, 0x5B, 0x9B, 0x64, 0x22,
|
||||
0xD8, 0xAF, 0xAE, 0xC7, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x43, 0x41, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x58, 0x53, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x18, 0xA3, 0x47, 0xA4,
|
||||
0xC0, 0x84, 0x4C, 0xEB, 0x7E, 0xB0, 0xCF, 0xF0,
|
||||
0xAE, 0xB7, 0x77, 0x69, 0x85, 0x93, 0xE4, 0x99,
|
||||
0x5A, 0x95, 0x4E, 0x58, 0x17, 0x38, 0xCE, 0xD6,
|
||||
0x81, 0xB0, 0xBD, 0x77, 0x09, 0xE7, 0xF8, 0x9A,
|
||||
0xDF, 0xAD, 0x05, 0x48, 0x83, 0xF6, 0xC3, 0xFD,
|
||||
0xDF, 0x7B, 0x83, 0xE0, 0x0C, 0x26, 0x81, 0x54,
|
||||
0x43, 0x29, 0xEA, 0x82, 0x6C, 0x89, 0xF0, 0xA6,
|
||||
0x74, 0x42, 0x86, 0x4D, 0x32, 0x60, 0x32, 0x7D,
|
||||
0xA7, 0x7A, 0x13, 0x40, 0x66, 0x59, 0xDA, 0x3E,
|
||||
0x41, 0x6B, 0x27, 0x94, 0x03, 0x4F, 0xAA, 0x22,
|
||||
0x9D, 0xD5, 0x54, 0x52, 0xDB, 0x27, 0x0A, 0x6A,
|
||||
0xA2, 0x3D, 0x19, 0xB1, 0x66, 0x1B, 0x19, 0x7D,
|
||||
0xAB, 0xC7, 0x0E, 0x88, 0x17, 0x91, 0xA1, 0x2A,
|
||||
0xB4, 0x3C, 0x6C, 0xCB, 0xF5, 0xAA, 0x7C, 0x3A,
|
||||
0xDD, 0x36, 0xFB, 0x35, 0x71, 0x7B, 0x20, 0x01,
|
||||
0x59, 0x00, 0xD6, 0xF6, 0x90, 0x39, 0x35, 0x41,
|
||||
0x31, 0xF8, 0xC1, 0xC0, 0x57, 0x3A, 0x35, 0x18,
|
||||
0x58, 0x90, 0xB1, 0xAD, 0x9A, 0x0E, 0xEC, 0xE0,
|
||||
0xF4, 0x7A, 0x7D, 0xA5, 0x27, 0x48, 0xC9, 0x72,
|
||||
0xAB, 0x0D, 0x08, 0x7B, 0x62, 0x35, 0x40, 0x91,
|
||||
0x14, 0x2B, 0xB1, 0x1D, 0x1A, 0xFA, 0xF9, 0xCD,
|
||||
0x5C, 0x17, 0x13, 0x53, 0x52, 0x71, 0xCA, 0xE2,
|
||||
0x2A, 0x78, 0xB1, 0x7F, 0x4A, 0xCD, 0x59, 0xD8,
|
||||
0xBA, 0x1D, 0x7D, 0x70, 0x5F, 0x78, 0x1B, 0x9F,
|
||||
0x9D, 0x37, 0x18, 0x8E, 0xD7, 0xCD, 0x0D, 0x49,
|
||||
0x57, 0x74, 0x69, 0x88, 0x3A, 0x6B, 0x8E, 0x4E,
|
||||
0x1B, 0x85, 0xDD, 0xBE, 0x39, 0x45, 0x05, 0x89,
|
||||
0x56, 0x12, 0x97, 0x59, 0x9A, 0x09, 0xA4, 0xC8,
|
||||
0x2D, 0x2F, 0xF5, 0xCF, 0xB4, 0x73, 0x70, 0xDB,
|
||||
0x58, 0x1E, 0xB2, 0x4E, 0x77, 0x6F, 0xA4, 0x7E,
|
||||
0x62, 0xDF, 0xB7, 0x05, 0xE8, 0x80, 0x42, 0x5C,
|
||||
0xB8, 0x78, 0x87, 0x97, 0x7F, 0x66, 0x2C, 0x5F,
|
||||
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char cpA_dpki_cert[0x300] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x04, 0x50, 0x05, 0xD7, 0x5E,
|
||||
0x6D, 0xDE, 0xB8, 0x78, 0x3C, 0x81, 0xE9, 0xEF,
|
||||
0x0D, 0x17, 0xCD, 0x58, 0xF5, 0x94, 0x26, 0xA3,
|
||||
0xFD, 0x6F, 0x69, 0x90, 0xE8, 0xF8, 0x32, 0x87,
|
||||
0x12, 0x2E, 0xC2, 0x5C, 0xA1, 0x4B, 0x99, 0x24,
|
||||
0x23, 0x37, 0xBA, 0x91, 0xA7, 0x5B, 0x0F, 0x7C,
|
||||
0x59, 0xFB, 0xF7, 0xD1, 0x89, 0x27, 0x22, 0xC4,
|
||||
0xE6, 0xAF, 0xC7, 0xDE, 0xC7, 0x4A, 0x6E, 0x00,
|
||||
0x7F, 0x43, 0x4A, 0x88, 0x8A, 0x82, 0x15, 0xE8,
|
||||
0xDF, 0x2B, 0x52, 0xED, 0x42, 0x00, 0xBC, 0x69,
|
||||
0xB4, 0xDA, 0x7F, 0xEB, 0x74, 0x6C, 0x7A, 0x2D,
|
||||
0x96, 0x56, 0x5B, 0x45, 0x59, 0x7B, 0x8F, 0xAE,
|
||||
0xB1, 0x6B, 0xDC, 0x76, 0xC1, 0xC8, 0x0C, 0x47,
|
||||
0xF5, 0x0D, 0xA9, 0xC3, 0xE1, 0xFE, 0x28, 0x50,
|
||||
0x1C, 0x26, 0xA2, 0xD1, 0x54, 0x4B, 0xD1, 0x60,
|
||||
0x4A, 0x9E, 0x8F, 0x32, 0x2A, 0xEF, 0x31, 0x5F,
|
||||
0xEA, 0x48, 0x22, 0x67, 0x22, 0xB7, 0xCB, 0x37,
|
||||
0x2F, 0xF3, 0x5F, 0x5E, 0x61, 0x6A, 0x53, 0x44,
|
||||
0xA5, 0x85, 0xE5, 0xA0, 0x8A, 0x2E, 0x17, 0x77,
|
||||
0x57, 0x2B, 0x7A, 0x9A, 0xF7, 0xD2, 0xD8, 0xC4,
|
||||
0x9C, 0xD0, 0xA0, 0x54, 0xBF, 0x8A, 0x9D, 0xB4,
|
||||
0x9F, 0xC6, 0x60, 0x61, 0x7C, 0xB8, 0x35, 0x4E,
|
||||
0x25, 0x7F, 0x68, 0x68, 0x2F, 0x94, 0xB3, 0xCC,
|
||||
0x53, 0x8C, 0x42, 0x6F, 0x88, 0xC5, 0x48, 0x5C,
|
||||
0xBE, 0xC1, 0xD0, 0x48, 0x04, 0x74, 0x96, 0x5A,
|
||||
0x7E, 0x82, 0x59, 0xAA, 0x9F, 0xB6, 0x61, 0x46,
|
||||
0xCE, 0x59, 0x21, 0xC6, 0xF0, 0xC1, 0x75, 0x1F,
|
||||
0x21, 0x91, 0x7F, 0x24, 0x96, 0xCB, 0x0C, 0x70,
|
||||
0x15, 0x7A, 0xB7, 0xBB, 0x3A, 0x9F, 0x57, 0x56,
|
||||
0x56, 0x5C, 0x38, 0x92, 0x2E, 0xFD, 0xC8, 0xF1,
|
||||
0x70, 0xB9, 0xAE, 0xA1, 0xAE, 0x36, 0xF5, 0x5E,
|
||||
0x35, 0x26, 0x63, 0x0A, 0xBA, 0xB2, 0x05, 0x0F,
|
||||
0xF0, 0x0C, 0xDC, 0xBB, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x43, 0x41, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x43, 0x50, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x61, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x18, 0xA3, 0x4D, 0x5B,
|
||||
0xAA, 0x7F, 0x93, 0x80, 0x28, 0x9B, 0xE8, 0x98,
|
||||
0x63, 0x10, 0x7A, 0xE1, 0x0C, 0x59, 0x2C, 0x2F,
|
||||
0x7C, 0xFF, 0xBD, 0xAA, 0xDD, 0x74, 0xF4, 0xA2,
|
||||
0xFB, 0xAC, 0xD7, 0x6F, 0x00, 0x93, 0x42, 0x06,
|
||||
0x34, 0x71, 0x56, 0xD8, 0x40, 0x49, 0x72, 0x9F,
|
||||
0x3E, 0x24, 0xFA, 0x5E, 0x19, 0xD1, 0x5B, 0x63,
|
||||
0x5C, 0xD2, 0xEF, 0x09, 0xDE, 0x32, 0xEE, 0x6B,
|
||||
0x6F, 0xC8, 0xFA, 0x32, 0x8E, 0x2E, 0x96, 0xB9,
|
||||
0x94, 0x41, 0x04, 0x7D, 0x07, 0x62, 0x95, 0xDA,
|
||||
0x0D, 0x91, 0xD8, 0x09, 0x35, 0xD0, 0xDE, 0x8E,
|
||||
0x6B, 0xC6, 0xAB, 0x14, 0x27, 0x01, 0x9C, 0xFE,
|
||||
0x49, 0x96, 0xFC, 0x9B, 0x54, 0x79, 0x4D, 0xEB,
|
||||
0xD7, 0xC6, 0x66, 0x73, 0xA6, 0xDD, 0x3A, 0x77,
|
||||
0x65, 0x47, 0x94, 0xEC, 0x1C, 0x87, 0xAA, 0x46,
|
||||
0xD9, 0x78, 0xA9, 0x7D, 0xDB, 0x11, 0x22, 0x6E,
|
||||
0xD4, 0x12, 0xC2, 0x78, 0x4B, 0x21, 0x83, 0x92,
|
||||
0xC7, 0x10, 0xC7, 0x74, 0x19, 0xFF, 0xAA, 0xF6,
|
||||
0x0B, 0x75, 0xD8, 0x23, 0xDD, 0x33, 0xC3, 0xA1,
|
||||
0x5B, 0xA7, 0x2D, 0x30, 0xA5, 0xA4, 0xD8, 0xF8,
|
||||
0x0F, 0xD6, 0x73, 0xFD, 0x26, 0xCB, 0x29, 0xA6,
|
||||
0xEF, 0x50, 0x39, 0xE2, 0x5F, 0x59, 0x61, 0x84,
|
||||
0x6B, 0xDA, 0x2E, 0xC7, 0xCB, 0xE4, 0x38, 0x4B,
|
||||
0x28, 0xFB, 0x0D, 0xD5, 0x8E, 0x7C, 0xAA, 0x7D,
|
||||
0x4B, 0x37, 0x3A, 0xD7, 0x81, 0xDD, 0x73, 0xE3,
|
||||
0x09, 0x93, 0xBD, 0xBD, 0x7E, 0x08, 0x55, 0x4A,
|
||||
0x8C, 0xA5, 0xC9, 0x84, 0x2D, 0x71, 0x01, 0xA2,
|
||||
0x2A, 0x01, 0xB0, 0x15, 0xFB, 0x30, 0x78, 0xB9,
|
||||
0x13, 0xF4, 0xC7, 0x3F, 0xB5, 0xA6, 0xF1, 0xA2,
|
||||
0x5E, 0x22, 0xB0, 0x02, 0xB6, 0xE0, 0x09, 0x54,
|
||||
0x7F, 0x0F, 0xBD, 0xF0, 0xFE, 0xA5, 0x50, 0x1D,
|
||||
0x93, 0x15, 0xF9, 0x3D, 0x83, 0x0F, 0x0F, 0x0E,
|
||||
0x3D, 0xE2, 0x3D, 0x96, 0xE7, 0x09, 0xD9, 0x77,
|
||||
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -10,6 +10,43 @@ void ctr_sha(void *data, u64 size, u8 *hash, int mode)
|
||||
}
|
||||
}
|
||||
|
||||
u8* AesKeyScrambler(u8 *KeyX, u8 *KeyY)
|
||||
{
|
||||
u32 *KeyX_u32 = (u32*) KeyX;
|
||||
u32 *KeyY_u32 = (u32*) KeyY;
|
||||
u32 *Key = malloc(16);
|
||||
|
||||
for(int i = 0,j; i < 4; i++)
|
||||
{
|
||||
switch(i)
|
||||
{
|
||||
///* Type 1
|
||||
case 0 : j = 2; break;
|
||||
case 1 : j = 3; break;
|
||||
case 2 : j = 0; break;
|
||||
case 3 : j = 1; break;
|
||||
//*/
|
||||
/* Type 2
|
||||
case 0 : j = 3; break;
|
||||
case 1 : j = 2; break;
|
||||
case 2 : j = 1; break;
|
||||
case 3 : j = 0; break;
|
||||
//*/
|
||||
/* Type 3
|
||||
case 0 : j = 1; break;
|
||||
case 1 : j = 0; break;
|
||||
case 2 : j = 3; break;
|
||||
case 3 : j = 2; break;
|
||||
//*/
|
||||
}
|
||||
|
||||
Key[j] = KeyX_u32[i] ^ KeyY_u32[i];
|
||||
}
|
||||
|
||||
// Done Stuff
|
||||
return (u8*)Key;
|
||||
}
|
||||
|
||||
void ctr_add_counter(ctr_aes_context* ctx, u32 carry)
|
||||
{
|
||||
u32 counter[4];
|
||||
|
||||
@@ -74,6 +74,7 @@ extern "C" {
|
||||
// SHA
|
||||
void ctr_sha(void *data, u64 size, u8 *hash, int mode);
|
||||
// AES
|
||||
u8* AesKeyScrambler(u8 *KeyX, u8 *KeyY);
|
||||
void ctr_add_counter(ctr_aes_context* ctx, u32 carry);
|
||||
void ctr_init_counter(ctr_aes_context* ctx, u8 key[16],u8 ctr[16]);
|
||||
void ctr_crypt_counter_block(ctr_aes_context* ctx, u8 input[16], u8 output[16]);
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
#ifndef _DESC_DEV_SIGDATA_H_
|
||||
#define _DESC_DEV_SIGDATA_H_
|
||||
|
||||
/* CTR_SDK 1 (1.2.0) */
|
||||
// APP
|
||||
static const unsigned char app_1_dev_hdrpub[0x100] =
|
||||
{
|
||||
0x9B, 0x82, 0x9C, 0x19, 0x01, 0x73, 0x23, 0x50, 0x89, 0xE3, 0x0B, 0xC8, 0x8F, 0xFB, 0xA5, 0xE4, 0xFD, 0x44, 0xAE, 0x49, 0x32, 0xC7, 0xEF, 0x0A, 0x7E, 0x93, 0x95, 0xBA, 0xA2, 0x48, 0x4D, 0x8E, 0x18, 0x82, 0x34, 0x66, 0xFE, 0xDA, 0x7A, 0x45, 0x4A, 0x7D, 0xD5, 0x3C, 0xC6, 0x5C, 0xE0, 0x71, 0xFC, 0xD0, 0x82, 0xCC, 0xB2, 0xCF, 0x77, 0x0E, 0xAD, 0xCD, 0xD2, 0xAC, 0x1D, 0x66, 0x1B, 0xC1, 0xEA, 0xAC, 0x39, 0x96, 0x2C, 0x52, 0xDE, 0xFF, 0xF2, 0x74, 0xF6, 0xC5, 0xCA, 0x99, 0x31, 0x95, 0x13, 0xBB, 0x3F, 0xED, 0x30, 0xAE, 0x0A, 0xD3, 0x86, 0x0D, 0x0B, 0xF5, 0x56, 0x7D, 0x33, 0xBA, 0xA1, 0x39, 0xA2, 0xF5, 0xB6, 0x47, 0x78, 0x1F, 0xFD, 0x04, 0xA3, 0x49, 0xA9, 0x10, 0xD3, 0x41, 0x2E, 0x92, 0x7D, 0xE1, 0xA4, 0xA8, 0x02, 0x18, 0x01, 0x2C, 0xC2, 0x61, 0xB1, 0xAC, 0xCB, 0xB3, 0x7A, 0x64, 0xB1, 0xC3, 0xE6, 0x3B, 0x50, 0xAD, 0xDD, 0x55, 0xAB, 0x28, 0xDA, 0x59, 0xE7, 0x57, 0x6A, 0x76, 0x4F, 0x6B, 0x08, 0xD1, 0x61, 0x7D, 0x28, 0xD5, 0x88, 0x7B, 0x8E, 0x80, 0x78, 0xF3, 0xFF, 0x50, 0x00, 0xBD, 0x73, 0xFB, 0x62, 0xB3, 0xCA, 0xA8, 0x05, 0x48, 0xE6, 0xE6, 0x71, 0xB5, 0xAC, 0xDA, 0xE9, 0xC6, 0x1F, 0x9B, 0x72, 0x98, 0x2E, 0xFF, 0xB2, 0x9C, 0x36, 0x9F, 0x7E, 0x7D, 0x25, 0x65, 0x6F, 0xB0, 0x60, 0xB1, 0xB5, 0x5F, 0xCF, 0x74, 0x29, 0x91, 0x9D, 0xAB, 0x84, 0x97, 0x1A, 0x27, 0x5D, 0x69, 0x49, 0x16, 0xF8, 0x77, 0x31, 0x26, 0x3E, 0x6F, 0x97, 0x41, 0x4A, 0x26, 0xFD, 0x5B, 0xAB, 0x65, 0x77, 0x45, 0x1C, 0x76, 0x15, 0xDC, 0x1A, 0x63, 0x0F, 0x51, 0x2D, 0xA0, 0x07, 0x6E, 0xE5, 0x29, 0xD3, 0x37, 0x4B, 0xE5, 0x7F, 0xBB, 0x23, 0xD0, 0x2B, 0xB9, 0x76, 0x1F
|
||||
};
|
||||
|
||||
static const unsigned char app_1_dev_hdrpvt[0x100] =
|
||||
{
|
||||
0x66, 0x9F, 0xB5, 0xC5, 0xA6, 0xB8, 0x45, 0xD8, 0xD3, 0x75, 0xFB, 0x03, 0xBB, 0x48, 0xF5, 0x7C, 0x7D, 0x4B, 0x02, 0xBD, 0x19, 0x7E, 0xE9, 0x98, 0x02, 0x5A, 0x00, 0xD8, 0x6E, 0x59, 0xCA, 0x9C, 0x78, 0x3E, 0x0C, 0xB8, 0xDF, 0x7C, 0x6C, 0x6E, 0x27, 0xAF, 0x8C, 0xB6, 0x13, 0xAD, 0x9D, 0x0C, 0x7C, 0x2B, 0x59, 0xF6, 0x1E, 0x16, 0x5D, 0x5A, 0x59, 0x86, 0x57, 0x7D, 0xEF, 0xD4, 0xBF, 0x82, 0xA4, 0x0C, 0x4D, 0xE0, 0x75, 0x95, 0xA6, 0xC6, 0x3F, 0x49, 0xC2, 0xC4, 0x5A, 0x63, 0xE8, 0x5D, 0x99, 0xEC, 0xDB, 0x4D, 0xFA, 0xEF, 0x10, 0x03, 0xF1, 0x15, 0xD1, 0x0B, 0x71, 0xAD, 0x24, 0x23, 0x08, 0x5C, 0x91, 0xD7, 0x17, 0x18, 0x69, 0x04, 0xAB, 0x23, 0x91, 0x62, 0x7D, 0xE8, 0xB5, 0x90, 0xF1, 0x5C, 0x09, 0x28, 0x8C, 0x51, 0xB7, 0x38, 0x02, 0x26, 0x78, 0x8C, 0xA2, 0x05, 0x07, 0x53, 0x7D, 0x99, 0x46, 0xFD, 0x12, 0x77, 0x32, 0x0E, 0xA8, 0x54, 0xE3, 0x32, 0x0E, 0x93, 0x05, 0x10, 0xFA, 0x59, 0x7A, 0x5D, 0x2E, 0xDE, 0x32, 0xE8, 0xE9, 0xF0, 0x27, 0x4E, 0x08, 0x83, 0x08, 0xD4, 0x92, 0x58, 0x4D, 0x6D, 0x34, 0x9F, 0xD9, 0xAF, 0xA9, 0x01, 0x62, 0xB5, 0x1A, 0x1D, 0x7E, 0x8D, 0xBB, 0x8A, 0x58, 0xBA, 0xFF, 0xB4, 0xD3, 0x75, 0xF3, 0x44, 0xE7, 0x13, 0x05, 0xC6, 0xC5, 0xA4, 0xD2, 0x6B, 0x18, 0x31, 0x9F, 0xBE, 0x42, 0x45, 0x82, 0x2E, 0x47, 0x9B, 0x26, 0x73, 0x28, 0xD7, 0x9A, 0x64, 0xA6, 0x3D, 0x38, 0x9C, 0x11, 0x36, 0x01, 0x5B, 0x82, 0x2F, 0x7E, 0xA8, 0xC4, 0x82, 0x15, 0x6C, 0x0B, 0xBA, 0x1C, 0x58, 0xF5, 0x81, 0xF9, 0x45, 0xA9, 0xC6, 0x05, 0x6A, 0x2C, 0xA6, 0xCF, 0xF5, 0xDF, 0xEB, 0xBB, 0xC0, 0x92, 0xE3, 0xA6, 0x9D, 0x23, 0x09, 0x09, 0x0E, 0x98, 0x39
|
||||
};
|
||||
|
||||
static const unsigned char app_1_dev_acexsig[0x100] =
|
||||
{
|
||||
0x05, 0x90, 0xAF, 0x65, 0x16, 0x9F, 0x18, 0x2C, 0x17, 0x78, 0x9F, 0xDF, 0xB6, 0x37, 0xCF, 0x26, 0x9B, 0x1B, 0x75, 0x51, 0xB8, 0x57, 0xA3, 0x8F, 0xD7, 0x93, 0x19, 0x61, 0x81, 0x0D, 0x3D, 0xBC, 0x36, 0x50, 0x53, 0xDA, 0x7D, 0xA9, 0x7F, 0xAA, 0x3E, 0x51, 0x2C, 0x75, 0xA1, 0xB9, 0xB1, 0x56, 0xEB, 0x2A, 0x46, 0x21, 0xEC, 0x4F, 0xA7, 0x0C, 0xA1, 0xA8, 0xFD, 0xEE, 0xA3, 0x4A, 0xFD, 0x54, 0xB0, 0x3A, 0x49, 0x5C, 0x8F, 0x8D, 0xB2, 0xBC, 0x32, 0x50, 0x7E, 0x2C, 0x50, 0xD2, 0x1A, 0x6B, 0x61, 0xCB, 0x2A, 0xC9, 0x7E, 0x6E, 0x6A, 0xC8, 0xD6, 0x9B, 0x21, 0xE7, 0x3B, 0xB8, 0x39, 0x1C, 0xD7, 0xEB, 0x69, 0x35, 0xF5, 0xBC, 0xB5, 0x23, 0x54, 0x81, 0x4F, 0x73, 0xAB, 0x9C, 0x55, 0xF0, 0x04, 0x0B, 0x4A, 0xEA, 0x54, 0x08, 0xBF, 0x36, 0x28, 0x12, 0x5E, 0x44, 0x41, 0xF5, 0x3D, 0xFE, 0xA7, 0x6B, 0x35, 0xF2, 0x9A, 0xF2, 0x88, 0xCD, 0xD6, 0x2E, 0x7B, 0xF3, 0xF5, 0x0D, 0x06, 0x2E, 0x13, 0x4F, 0x78, 0xEE, 0x27, 0xAB, 0x31, 0x06, 0x62, 0xE9, 0xB2, 0x3E, 0xC6, 0x99, 0xD7, 0xA9, 0xCC, 0x21, 0x70, 0xD7, 0xCD, 0x9F, 0x03, 0x66, 0x91, 0x7E, 0xBD, 0x3E, 0x83, 0xC4, 0xFF, 0xC9, 0xAA, 0x7E, 0x27, 0xAE, 0x5C, 0x37, 0x7D, 0x93, 0x57, 0x60, 0xB9, 0x0B, 0x71, 0x43, 0x8A, 0x2F, 0x43, 0x50, 0x94, 0xF8, 0x0D, 0x40, 0xCC, 0x64, 0x16, 0x09, 0x70, 0xCD, 0x03, 0xCA, 0x95, 0x30, 0x20, 0xE2, 0x85, 0x2F, 0x2A, 0xCF, 0x65, 0xAA, 0xE9, 0xCF, 0x1F, 0x57, 0xC1, 0x8F, 0xD5, 0x46, 0x51, 0x5A, 0x99, 0x60, 0x65, 0x93, 0xA9, 0xBB, 0xEA, 0x5F, 0xA0, 0x47, 0xD7, 0x11, 0x04, 0xC7, 0xB4, 0x82, 0x66, 0x24, 0x17, 0x17, 0x5E, 0x9D, 0xC8, 0x50, 0x80, 0x63, 0x28, 0xB3, 0xF8, 0xE3
|
||||
};
|
||||
|
||||
// DLP
|
||||
static const unsigned char dlp_1_dev_hdrpub[0x100] =
|
||||
{
|
||||
0xD9, 0xF0, 0xC9, 0x35, 0x1E, 0x55, 0xD8, 0x7E, 0x96, 0x53, 0x33, 0x34, 0xBB, 0x8A, 0xAE, 0x03, 0x92, 0x35, 0xE2, 0x05, 0x58, 0x7C, 0xCC, 0x08, 0xB2, 0xDF, 0x43, 0x41, 0xB7, 0x7A, 0xB5, 0x29, 0xEE, 0x4E, 0xF3, 0xC7, 0x35, 0x3B, 0x7E, 0xC5, 0xEE, 0x74, 0xF0, 0xAA, 0x7E, 0x60, 0xF1, 0x28, 0x35, 0x17, 0xD6, 0xC9, 0x9A, 0xF2, 0x84, 0xFE, 0xC8, 0x93, 0x86, 0xF7, 0xA7, 0x36, 0xA6, 0xB0, 0x28, 0xDC, 0xE8, 0x38, 0x0B, 0x54, 0x42, 0x8D, 0x4E, 0x4B, 0x55, 0x0F, 0x4A, 0x0D, 0x72, 0xA0, 0x23, 0xC9, 0x68, 0x22, 0x37, 0x31, 0x88, 0x2C, 0x05, 0x49, 0x86, 0x80, 0x9A, 0xFC, 0x1D, 0x02, 0xE3, 0x20, 0x15, 0x0C, 0x7E, 0x28, 0x40, 0x57, 0xEF, 0xA7, 0xBC, 0xAA, 0xC5, 0xD6, 0xD7, 0x6F, 0xF9, 0x26, 0x9A, 0x32, 0xB2, 0x9E, 0x10, 0x5F, 0x93, 0xE6, 0xB2, 0xC6, 0xB2, 0x62, 0x34, 0x6A, 0xB0, 0xD9, 0x71, 0x3B, 0x0F, 0x34, 0x6C, 0xB1, 0xFE, 0x3A, 0x39, 0xDE, 0x3D, 0x6A, 0xCB, 0x32, 0x95, 0xFA, 0x18, 0x4F, 0xF4, 0xEB, 0x5F, 0x20, 0xE4, 0xEF, 0x64, 0xC5, 0x06, 0x27, 0xC3, 0x44, 0x2A, 0x39, 0x35, 0xD8, 0x00, 0xDF, 0x00, 0xAD, 0xC4, 0x98, 0x06, 0x52, 0xD8, 0x4A, 0xC5, 0x2A, 0x7F, 0x77, 0x50, 0x62, 0x7E, 0x05, 0x3E, 0x8C, 0x28, 0x0A, 0x26, 0xD2, 0x6C, 0x9B, 0x27, 0x65, 0xE9, 0x77, 0x68, 0xE9, 0xE6, 0xAA, 0xBA, 0xF5, 0x85, 0xFC, 0x75, 0x07, 0x84, 0xB2, 0xCA, 0x35, 0x85, 0x52, 0x10, 0x08, 0xEF, 0x85, 0xD3, 0x70, 0x17, 0x31, 0xE1, 0x44, 0xF6, 0x34, 0xDF, 0x7C, 0x42, 0xF7, 0x74, 0xAA, 0xFC, 0xC3, 0xE4, 0x84, 0x2D, 0xBF, 0x15, 0x1E, 0x84, 0x00, 0xE3, 0x80, 0xD7, 0x89, 0x56, 0xEE, 0x60, 0x09, 0x1F, 0xD3, 0xBF, 0xBF, 0x50, 0x8F, 0xA3, 0x0C, 0x72, 0x3F
|
||||
};
|
||||
|
||||
static const unsigned char dlp_1_dev_hdrpvt[0x100] =
|
||||
{
|
||||
0x10, 0x19, 0x3A, 0x33, 0xA3, 0x47, 0x02, 0x13, 0xEF, 0xB4, 0xBB, 0x9E, 0x94, 0x8F, 0xDC, 0xE4, 0xC4, 0xA3, 0x18, 0x4B, 0xFE, 0xCA, 0x51, 0x23, 0xFF, 0x5A, 0x80, 0x94, 0x55, 0x22, 0x4A, 0x49, 0x8B, 0xA1, 0xE7, 0x5D, 0xFA, 0xAF, 0xA7, 0x60, 0xA5, 0x89, 0x9B, 0xD1, 0x6C, 0x3E, 0x6A, 0xF1, 0xE6, 0x62, 0x19, 0x6A, 0x90, 0xF8, 0x83, 0x1C, 0x72, 0xE2, 0x7A, 0xE0, 0xC6, 0x48, 0x42, 0x2D, 0xD7, 0x06, 0xE2, 0x5C, 0x69, 0x71, 0xD2, 0xEC, 0xAF, 0x30, 0xDF, 0x5A, 0x9E, 0xC4, 0xB9, 0x87, 0xDC, 0xBC, 0xDE, 0xE5, 0x50, 0x20, 0x67, 0x87, 0xA0, 0xE8, 0x5A, 0x78, 0x1B, 0x7A, 0xAE, 0x05, 0xED, 0x93, 0x0C, 0x1A, 0xFD, 0x22, 0xAA, 0x06, 0x14, 0xDC, 0xD6, 0x11, 0xE3, 0x45, 0x48, 0x6A, 0xAC, 0x03, 0xCE, 0xF6, 0x19, 0xBD, 0x95, 0x46, 0x0A, 0x1D, 0xCB, 0x6C, 0xE3, 0xF6, 0x5F, 0x1A, 0xB3, 0x81, 0xC7, 0xE2, 0xAB, 0xFE, 0xEF, 0xFB, 0xEC, 0xFE, 0x88, 0x36, 0x26, 0x60, 0x47, 0x43, 0x78, 0x36, 0xA7, 0xC8, 0xC9, 0x40, 0x98, 0x2E, 0xF2, 0x7E, 0xE4, 0x0D, 0x6C, 0x45, 0x88, 0x2A, 0x32, 0x9B, 0xA2, 0x7C, 0x39, 0x20, 0xAA, 0x6B, 0x64, 0x35, 0xC6, 0xA9, 0x20, 0x71, 0x4A, 0x78, 0x6E, 0x55, 0x3C, 0x9B, 0xEA, 0x10, 0x73, 0xBB, 0xA7, 0xD8, 0xFE, 0x69, 0x42, 0xB8, 0xE7, 0xA1, 0xE5, 0xDF, 0x8A, 0xDE, 0x4C, 0x2B, 0x3A, 0x92, 0xB8, 0x3E, 0x5E, 0x2C, 0x29, 0x0D, 0xC1, 0x3D, 0x10, 0x65, 0x1E, 0xF1, 0x95, 0xE5, 0xF6, 0x45, 0x15, 0xBF, 0xE2, 0x30, 0xA6, 0x70, 0x19, 0xA4, 0x11, 0x57, 0x12, 0x1C, 0x81, 0x4B, 0x54, 0x04, 0xBE, 0x67, 0xF5, 0x00, 0x22, 0x06, 0xDA, 0x6B, 0xCE, 0x23, 0x3F, 0x86, 0xE4, 0x70, 0x6A, 0xD1, 0x3E, 0xE5, 0x74, 0x44, 0x86, 0xDA, 0xBE, 0x79
|
||||
};
|
||||
|
||||
static const unsigned char dlp_1_dev_acexsig[0x100] =
|
||||
{
|
||||
0x13, 0xB2, 0xF4, 0x89, 0xBB, 0xB4, 0xFF, 0x55, 0x7E, 0x3E, 0x9B, 0x90, 0x44, 0x45, 0xC6, 0x8A, 0x17, 0x32, 0x91, 0x77, 0x7D, 0xCB, 0x4A, 0x26, 0x3D, 0xCA, 0xD8, 0x6E, 0x72, 0x27, 0x93, 0x9C, 0xE4, 0x27, 0xFE, 0x54, 0xDC, 0xE7, 0xDC, 0x02, 0x17, 0x9C, 0x82, 0xA8, 0xB0, 0xE8, 0x69, 0x07, 0xE3, 0x34, 0x0E, 0xBF, 0x17, 0x05, 0x58, 0x23, 0x5F, 0x6D, 0xDA, 0xE8, 0xC6, 0xEE, 0x49, 0x29, 0xEF, 0xD7, 0x48, 0x48, 0x41, 0xE2, 0x2A, 0x57, 0x2B, 0x21, 0x13, 0x64, 0xD4, 0x79, 0x5A, 0xE3, 0x84, 0xDA, 0x63, 0x9A, 0x07, 0x39, 0xE2, 0x7E, 0xA7, 0x56, 0x34, 0x1C, 0xE2, 0xAF, 0xCD, 0x65, 0xD1, 0xC0, 0x1B, 0x72, 0xB1, 0x1D, 0xFC, 0xE2, 0x6E, 0x0F, 0xC7, 0xB0, 0xF5, 0x84, 0x0F, 0xA5, 0x2B, 0xDF, 0x3A, 0xCF, 0x43, 0xE8, 0xE4, 0x07, 0x29, 0xC6, 0x41, 0x0E, 0x7B, 0xEE, 0x35, 0xF9, 0xFC, 0xE7, 0x15, 0xF3, 0x8C, 0x3A, 0xB4, 0x77, 0xBD, 0x88, 0x70, 0x83, 0x4A, 0x03, 0x9E, 0x01, 0x9B, 0xBB, 0xD2, 0xE4, 0xA5, 0xBE, 0xF7, 0x80, 0x92, 0x5A, 0x9F, 0x14, 0x9B, 0x49, 0x5D, 0x3D, 0xDC, 0x32, 0x34, 0x7E, 0xC0, 0xD4, 0xAC, 0xDA, 0x8C, 0xF7, 0xA1, 0xE1, 0xCA, 0x29, 0xF5, 0x58, 0x5E, 0xEB, 0x02, 0xB6, 0x67, 0x42, 0x89, 0x46, 0x4C, 0xA6, 0xA8, 0xBD, 0xEB, 0xEB, 0xDD, 0x8F, 0x2E, 0x72, 0x26, 0x49, 0x70, 0x01, 0x7D, 0x5B, 0x03, 0x06, 0x2C, 0x92, 0x1E, 0x55, 0xB2, 0xDA, 0xD7, 0x0D, 0x70, 0x74, 0x42, 0xD5, 0x62, 0x42, 0x3C, 0xC1, 0x70, 0x8E, 0x67, 0xB1, 0xD9, 0xF3, 0x7E, 0xB2, 0xBA, 0x6D, 0x0F, 0x42, 0x65, 0x24, 0x79, 0xE8, 0x8F, 0xB4, 0x4B, 0x32, 0x35, 0xCA, 0x39, 0x70, 0xFE, 0x8E, 0x81, 0x49, 0x73, 0x8D, 0x3C, 0xCD, 0x60, 0xAF, 0xA3, 0x52, 0x45, 0xEE
|
||||
};
|
||||
|
||||
/* CTR_SDK 2 (2.3.4) */
|
||||
// APP
|
||||
static const unsigned char app_2_dev_hdrpub[0x100] =
|
||||
{
|
||||
0xE9, 0x45, 0xF0, 0xC6, 0x96, 0xD5, 0x6F, 0x7E, 0xAE, 0x03, 0x92, 0x2E, 0xEA, 0xCB, 0xFD, 0xEA, 0xA4, 0x7A, 0x9F, 0x12, 0xDA, 0x4C, 0x10, 0x0A, 0xBE, 0x08, 0x9D, 0x87, 0xE0, 0x14, 0xAC, 0x7F, 0x39, 0xD2, 0xFE, 0x9D, 0x88, 0xB2, 0x81, 0xF6, 0x1A, 0x9E, 0x15, 0x57, 0xD4, 0xE2, 0x31, 0x08, 0x07, 0xEC, 0x4F, 0x10, 0x00, 0xDE, 0xEF, 0x8B, 0x6F, 0xCF, 0x84, 0xE7, 0x3B, 0x41, 0x08, 0x64, 0x3B, 0x1C, 0x00, 0x7C, 0x73, 0xBB, 0x59, 0x4D, 0xD8, 0xD6, 0xE7, 0x7B, 0xBE, 0xDD, 0x50, 0x98, 0xA1, 0x1A, 0xD5, 0xAA, 0x37, 0x69, 0xB8, 0x25, 0xCB, 0x7B, 0x03, 0x00, 0x90, 0x25, 0xF3, 0x7E, 0x9A, 0x0F, 0xA3, 0xAA, 0xC4, 0xB9, 0x3B, 0x3A, 0x18, 0x2B, 0xBC, 0x9C, 0x11, 0x04, 0x92, 0x16, 0x6E, 0xC3, 0xFA, 0x01, 0xD3, 0x00, 0x02, 0xF3, 0x2E, 0xD5, 0x60, 0xA8, 0xAF, 0xAB, 0xEE, 0x2F, 0x9D, 0x30, 0x3E, 0x0E, 0xDC, 0xB8, 0xEC, 0x87, 0x9E, 0x4A, 0xA9, 0x01, 0x34, 0x69, 0x2C, 0x4C, 0x34, 0xB7, 0x7D, 0xB9, 0x7A, 0x17, 0x74, 0x31, 0xB0, 0x29, 0xC4, 0x7D, 0x27, 0x1F, 0xBA, 0xBA, 0x3F, 0x5B, 0x62, 0xF6, 0x90, 0xB8, 0x37, 0x33, 0xFC, 0x73, 0xD6, 0x19, 0x11, 0xCA, 0x83, 0x2A, 0x58, 0x62, 0x9C, 0xB1, 0x83, 0x43, 0x1D, 0x2C, 0x00, 0xA2, 0xE5, 0x87, 0x97, 0x12, 0x63, 0x31, 0x83, 0x0E, 0xB1, 0x1E, 0x69, 0x99, 0x02, 0xAF, 0xDF, 0xFF, 0x0F, 0xA9, 0x7C, 0x1B, 0x33, 0x9E, 0xFF, 0x9C, 0x14, 0x19, 0xA6, 0xCA, 0xFD, 0xB9, 0x17, 0xE0, 0x22, 0xCF, 0xB5, 0x00, 0x77, 0x2E, 0x31, 0xAD, 0xF7, 0xE5, 0xAD, 0x98, 0x14, 0xDF, 0x19, 0xF0, 0xC9, 0xBE, 0x37, 0xF6, 0xF0, 0x23, 0x66, 0xCF, 0x34, 0xE3, 0xD5, 0x8F, 0xD4, 0x07, 0xBA, 0x06, 0x56, 0x00, 0x66, 0x9A, 0xEB, 0x93
|
||||
};
|
||||
|
||||
static const unsigned char app_2_dev_hdrpvt[0x100] =
|
||||
{
|
||||
0xBC, 0x49, 0x29, 0xB9, 0x01, 0x52, 0x31, 0x76, 0x4C, 0xBA, 0xB1, 0x29, 0x91, 0x77, 0x29, 0xF2, 0x54, 0xE4, 0x6C, 0xB5, 0x68, 0xE1, 0xF0, 0x28, 0xDB, 0x8E, 0x54, 0xA8, 0xB1, 0xA3, 0xBE, 0x3F, 0xCA, 0xCA, 0x95, 0x9D, 0x4E, 0x12, 0xD7, 0x77, 0x6F, 0xB0, 0x9D, 0x85, 0x91, 0x5D, 0x29, 0x3A, 0x54, 0x3A, 0xD6, 0xEE, 0x11, 0xE5, 0xDF, 0xEF, 0xEA, 0x45, 0xD3, 0xFE, 0x58, 0x03, 0x7B, 0xE4, 0x7B, 0x19, 0x75, 0x02, 0xFE, 0xDE, 0xFF, 0x8C, 0x28, 0x33, 0xFE, 0x10, 0x11, 0xD4, 0xCD, 0x13, 0x05, 0x26, 0x85, 0xC3, 0xA8, 0x8A, 0x7A, 0x8A, 0x77, 0x1D, 0x49, 0x25, 0x11, 0x34, 0xB0, 0xBF, 0x45, 0x56, 0xCE, 0x42, 0x2E, 0x1B, 0x5C, 0xC4, 0xDD, 0x71, 0xA0, 0x01, 0x50, 0x73, 0x21, 0xFF, 0x5D, 0x54, 0x6D, 0xDD, 0x3F, 0x14, 0x49, 0x4D, 0x44, 0x46, 0x12, 0x88, 0xD5, 0x92, 0xAE, 0xE2, 0xD0, 0xF6, 0x2C, 0x10, 0xD5, 0x67, 0x61, 0x87, 0x7F, 0x2A, 0x17, 0x9D, 0x4F, 0xC6, 0x79, 0xC3, 0xAF, 0x4D, 0x6F, 0xFB, 0x0F, 0x3B, 0x48, 0x5D, 0x46, 0x9A, 0xE8, 0x53, 0xB7, 0xC5, 0x69, 0xEC, 0x31, 0x25, 0xD1, 0xDC, 0x93, 0xAB, 0x2E, 0x53, 0x3B, 0x8E, 0x96, 0x27, 0x59, 0xD4, 0xF7, 0xB3, 0xAB, 0x51, 0x59, 0xAE, 0x6E, 0x26, 0x4F, 0xC2, 0x95, 0xCE, 0x42, 0xC6, 0xAF, 0x46, 0xC6, 0x2E, 0x32, 0x09, 0x7B, 0xAF, 0x67, 0x4E, 0x57, 0xC8, 0x93, 0x5F, 0x8C, 0xD5, 0x66, 0x7B, 0xCC, 0xE9, 0xBE, 0x86, 0xB9, 0xBB, 0xD0, 0xC8, 0xD2, 0xDC, 0x5F, 0x95, 0x83, 0x28, 0x55, 0x21, 0x1E, 0xEE, 0xCF, 0x23, 0xB7, 0x6D, 0xE0, 0x9A, 0x87, 0x99, 0xFB, 0x82, 0x50, 0xD0, 0x2D, 0xC4, 0xFB, 0xA0, 0x11, 0x2F, 0xDD, 0x05, 0x7E, 0x1C, 0xE3, 0xFB, 0x98, 0x69, 0xD4, 0x49, 0x2F, 0x0D, 0xF6, 0x61
|
||||
};
|
||||
|
||||
static const unsigned char app_2_dev_acexsig[0x100] =
|
||||
{
|
||||
0x62, 0xFE, 0xD9, 0x12, 0x3D, 0x99, 0x53, 0xC4, 0x20, 0x25, 0xDE, 0x59, 0xEA, 0x6E, 0xF3, 0x16, 0x5B, 0x36, 0xBA, 0x1C, 0xB3, 0xB5, 0x48, 0x37, 0xD2, 0xA4, 0x04, 0xE5, 0x14, 0xC6, 0xE7, 0x22, 0x14, 0x40, 0x6F, 0x92, 0x6A, 0x9B, 0xDF, 0xDE, 0xFA, 0xCE, 0x3C, 0xBB, 0x4B, 0xC4, 0x66, 0xA8, 0x86, 0x58, 0xAC, 0xEB, 0x2F, 0xB7, 0xA3, 0xEC, 0xEA, 0x31, 0x23, 0x61, 0xF6, 0x72, 0x1E, 0x26, 0x8A, 0x1D, 0x68, 0x2A, 0x2A, 0x21, 0x5A, 0xA2, 0x6A, 0xBD, 0xCE, 0xC0, 0x19, 0x08, 0x61, 0x64, 0xB3, 0xF6, 0x90, 0xB1, 0x34, 0xF8, 0x50, 0x6F, 0x83, 0xB6, 0x8D, 0x35, 0x12, 0x7F, 0x9C, 0x7B, 0x6E, 0x3C, 0x4E, 0xD1, 0xFD, 0xC3, 0x30, 0xD2, 0xE8, 0x7E, 0x15, 0x1F, 0xAD, 0xDB, 0x1D, 0x92, 0xDA, 0x8C, 0x4E, 0xE9, 0x84, 0x83, 0xFF, 0x1A, 0x09, 0x77, 0x05, 0x5A, 0xCF, 0x5C, 0x8B, 0x4F, 0x68, 0x36, 0xC8, 0xDA, 0x5B, 0x1A, 0x5A, 0x49, 0xF9, 0xA1, 0xF2, 0xC8, 0x02, 0xFD, 0x69, 0x1F, 0x1D, 0xB3, 0xE8, 0xF8, 0xE1, 0x6B, 0x15, 0x9A, 0x5E, 0x41, 0x84, 0x06, 0x1F, 0x2A, 0xB3, 0xB2, 0xA1, 0xDC, 0x63, 0x81, 0xB3, 0x6B, 0x4B, 0x21, 0x67, 0x19, 0x82, 0x52, 0xFE, 0x75, 0x96, 0xA1, 0xDF, 0x02, 0xD4, 0x07, 0x1F, 0x1B, 0x88, 0x12, 0x5A, 0x76, 0x54, 0xC4, 0x06, 0x2D, 0xB1, 0xAA, 0x41, 0x3C, 0x9F, 0x43, 0xA2, 0x75, 0x20, 0x39, 0xB6, 0x06, 0xF9, 0x9C, 0xFC, 0x00, 0xC5, 0xBC, 0x84, 0x13, 0x80, 0xE4, 0x10, 0x1A, 0xCD, 0x95, 0xBB, 0xF2, 0xDC, 0x57, 0x7B, 0xBA, 0x87, 0x05, 0x0B, 0x96, 0xC1, 0xCD, 0x60, 0xC7, 0x10, 0x44, 0x78, 0x0E, 0x0F, 0x2F, 0x91, 0x54, 0x6C, 0xDE, 0xB8, 0x14, 0x46, 0xF3, 0x9C, 0xAC, 0x7B, 0xAA, 0xE7, 0x1B, 0x52, 0xD6, 0xBE, 0x71, 0x97, 0x22
|
||||
};
|
||||
|
||||
// DLP
|
||||
static const unsigned char dlp_2_dev_hdrpub[0x100] =
|
||||
{
|
||||
0xB9, 0xDE, 0x3D, 0xC0, 0x55, 0xB9, 0xCC, 0x3F, 0x55, 0xE0, 0x61, 0x1D, 0x6F, 0xCF, 0x3E, 0x7F, 0xE2, 0xF7, 0xF5, 0xAD, 0x5C, 0x02, 0x7F, 0x17, 0x5B, 0x44, 0x2F, 0x2D, 0xDC, 0xD4, 0xA6, 0x63, 0xD2, 0xA7, 0x82, 0xD3, 0x00, 0x77, 0xC8, 0x0B, 0x28, 0x09, 0x3D, 0x81, 0x86, 0x93, 0xF5, 0xF6, 0xE4, 0x69, 0x3B, 0x60, 0x4C, 0x7F, 0x8D, 0x72, 0xA3, 0x22, 0x42, 0x86, 0x87, 0x06, 0xD8, 0x29, 0x89, 0x8A, 0x9F, 0x5F, 0x6C, 0x06, 0x0C, 0x96, 0x84, 0x00, 0x24, 0x5D, 0x0B, 0xEA, 0x15, 0xEC, 0xAD, 0x90, 0xA4, 0x0C, 0x7B, 0xAE, 0x0E, 0x85, 0x3E, 0xA2, 0x20, 0x04, 0xE8, 0xD9, 0x59, 0x0F, 0x31, 0x0E, 0xD4, 0x5D, 0xC1, 0x18, 0xED, 0x0E, 0xB4, 0xD2, 0x5E, 0x65, 0xA2, 0x78, 0x0C, 0x76, 0x03, 0x3A, 0x71, 0x18, 0xE4, 0x38, 0x44, 0x14, 0xE0, 0x93, 0x84, 0xFE, 0x34, 0x82, 0xCA, 0x0B, 0xB8, 0xF2, 0x41, 0xAB, 0x63, 0xF3, 0xDE, 0xAE, 0xF4, 0x36, 0x81, 0xA4, 0x78, 0x7B, 0xF9, 0xA8, 0xFB, 0xC9, 0xA7, 0x6E, 0xA4, 0xD5, 0xE2, 0xA9, 0xD8, 0xD9, 0xE8, 0x98, 0x1B, 0x25, 0x75, 0x00, 0x11, 0x51, 0x97, 0x62, 0x0D, 0xF0, 0x0C, 0xE9, 0x6B, 0x0C, 0xEE, 0xCE, 0x25, 0x2C, 0x3F, 0xDF, 0xBE, 0x54, 0xD5, 0xD6, 0x5E, 0xEE, 0x1F, 0x73, 0xFC, 0xE8, 0xEC, 0xB3, 0x8A, 0x48, 0x9F, 0x6A, 0xC1, 0x63, 0x85, 0xE4, 0x94, 0x85, 0x8F, 0x3D, 0x9D, 0x43, 0xB4, 0xA7, 0x4C, 0x82, 0xA3, 0x0B, 0x67, 0x43, 0x12, 0x31, 0x77, 0x89, 0xB0, 0xD5, 0x00, 0x1B, 0x52, 0x29, 0xCE, 0x54, 0xC7, 0xC4, 0x7D, 0xB6, 0x69, 0x7B, 0xFE, 0xDC, 0xDB, 0x4E, 0xD8, 0x58, 0x42, 0x14, 0x34, 0x72, 0x64, 0xBC, 0x09, 0x6D, 0xAC, 0xD3, 0xC4, 0x1B, 0x5C, 0x8E, 0xF9, 0xBE, 0x84, 0xCD, 0x9A, 0x86, 0x4B, 0x17
|
||||
};
|
||||
|
||||
static const unsigned char dlp_2_dev_hdrpvt[0x100] =
|
||||
{
|
||||
0xAA, 0x51, 0x62, 0x58, 0x9A, 0xB5, 0x74, 0xDA, 0x1C, 0xC1, 0x4D, 0x7C, 0x81, 0xF6, 0x70, 0x99, 0x13, 0xCC, 0x90, 0x0D, 0xD9, 0xA0, 0x58, 0x01, 0x79, 0x1A, 0x53, 0xF9, 0x3C, 0xC0, 0x87, 0xF0, 0x35, 0x1A, 0x56, 0xA1, 0x2F, 0x6E, 0x93, 0x9A, 0xD5, 0x87, 0x12, 0x1B, 0x5C, 0xCC, 0xBC, 0xB9, 0x0E, 0xB8, 0xF7, 0x35, 0xD9, 0x23, 0x90, 0xE4, 0x19, 0x64, 0xCD, 0x7D, 0x24, 0xC2, 0x3A, 0xD6, 0x65, 0x38, 0xE7, 0xAD, 0xB2, 0xF9, 0x20, 0x13, 0xD4, 0xC5, 0xA4, 0x8C, 0xB6, 0xDC, 0x3C, 0x56, 0xF2, 0xFC, 0xF5, 0xB6, 0x92, 0xA6, 0xFE, 0x9B, 0x4E, 0xB7, 0x95, 0x8B, 0xAA, 0x2B, 0x70, 0x96, 0xA1, 0x27, 0xAB, 0xA6, 0x75, 0xC9, 0x77, 0x80, 0xE0, 0x65, 0x5D, 0x26, 0xD8, 0xE8, 0x14, 0xD3, 0x17, 0x46, 0x38, 0x58, 0xCC, 0xD8, 0x5A, 0x5A, 0x9F, 0x27, 0xCE, 0xD8, 0x7A, 0x19, 0xD7, 0x35, 0xB2, 0x32, 0xAF, 0x47, 0x2E, 0x9F, 0x4B, 0x64, 0xEC, 0x1F, 0xC6, 0x40, 0xD0, 0x2C, 0x47, 0xD1, 0xEA, 0x33, 0xE5, 0x0E, 0x80, 0xFC, 0x68, 0xEC, 0x8C, 0x12, 0x33, 0xCE, 0x34, 0x28, 0x79, 0xFA, 0x05, 0x5D, 0x70, 0x15, 0xDE, 0xB1, 0x22, 0x85, 0x18, 0x63, 0x15, 0x35, 0x57, 0x04, 0x17, 0x64, 0x20, 0xC8, 0x52, 0x44, 0x64, 0x5E, 0x47, 0x4E, 0x5F, 0x80, 0x21, 0x16, 0x94, 0x4B, 0x18, 0x11, 0x36, 0x67, 0x3B, 0x6C, 0x69, 0x19, 0xCF, 0xC9, 0x05, 0x85, 0x9B, 0x3A, 0xDE, 0x12, 0x1E, 0x0A, 0xC6, 0x22, 0xA8, 0xC7, 0x9A, 0x34, 0x14, 0x98, 0xFD, 0xD9, 0x0F, 0xE8, 0x64, 0xE6, 0x89, 0x63, 0x6E, 0x17, 0x76, 0xD7, 0x1B, 0x6F, 0x92, 0x00, 0xD8, 0xBB, 0xF6, 0xA0, 0x65, 0x9D, 0xAA, 0x7A, 0x0E, 0x4B, 0x56, 0xA5, 0x33, 0xDA, 0x3F, 0x5D, 0xFE, 0xD3, 0xAD, 0x6E, 0x0E, 0xB3, 0xD4, 0x41
|
||||
};
|
||||
|
||||
static const unsigned char dlp_2_dev_acexsig[0x100] =
|
||||
{
|
||||
0x97, 0x84, 0x97, 0xEE, 0x4F, 0x35, 0xCC, 0xBE, 0x08, 0xB4, 0x5D, 0x7E, 0x17, 0xC3, 0x94, 0x2B, 0x4D, 0x3A, 0xA5, 0xB5, 0x01, 0xD4, 0xAE, 0x2A, 0x90, 0x26, 0x21, 0x8F, 0x56, 0x05, 0xB9, 0xA2, 0x5E, 0xCE, 0x73, 0xC7, 0x42, 0xDC, 0x99, 0xD2, 0x7C, 0x08, 0x62, 0xBF, 0x10, 0x7A, 0xC1, 0x5D, 0x22, 0x53, 0x8F, 0x63, 0x2D, 0x73, 0xF3, 0x05, 0xDA, 0x9D, 0x6A, 0xF8, 0xB9, 0x5B, 0x80, 0xB4, 0x30, 0xB3, 0x11, 0xF7, 0x96, 0x8A, 0xCF, 0x70, 0xD7, 0x62, 0x6E, 0x99, 0x32, 0xFD, 0x74, 0x34, 0x16, 0xFD, 0x17, 0x1F, 0xB1, 0xEC, 0xA4, 0x0F, 0x52, 0x13, 0x9F, 0x62, 0x0D, 0xE0, 0x50, 0xA6, 0xA0, 0x7B, 0x69, 0x95, 0xE0, 0xE9, 0xBB, 0x38, 0x0C, 0x62, 0xE0, 0xE3, 0xCE, 0x82, 0xE0, 0xB9, 0xE0, 0xF6, 0x61, 0x50, 0xBF, 0xA8, 0x18, 0x15, 0x38, 0xFE, 0xFA, 0x8C, 0xBA, 0xA5, 0xB9, 0x9C, 0x05, 0xA6, 0x91, 0x5C, 0xA7, 0x13, 0x6F, 0x13, 0x3F, 0xF1, 0xF6, 0x68, 0xAF, 0x40, 0xEC, 0x27, 0xE0, 0x33, 0x6B, 0xCF, 0x26, 0x06, 0xF8, 0x6A, 0x13, 0x6C, 0xBC, 0xDB, 0xAF, 0x6F, 0x78, 0xA0, 0x80, 0x10, 0x8F, 0xB6, 0x91, 0x5A, 0x43, 0x2C, 0x5F, 0x1D, 0xBA, 0xB4, 0x5E, 0xBE, 0xAE, 0x53, 0x09, 0x17, 0x5B, 0x6C, 0xC1, 0x5E, 0x0F, 0x72, 0x6E, 0xD6, 0x10, 0x0B, 0xC3, 0x26, 0xDC, 0xAF, 0xCA, 0x28, 0xAB, 0x00, 0x67, 0x04, 0xE3, 0x54, 0xE8, 0x95, 0xC6, 0x23, 0xB6, 0x79, 0x70, 0xA4, 0x87, 0x6D, 0x12, 0x48, 0xCC, 0x11, 0x86, 0xEC, 0x82, 0xF4, 0x30, 0xC9, 0xB1, 0x6D, 0x08, 0xA7, 0xEA, 0x8C, 0x6A, 0x97, 0xAA, 0x89, 0xD5, 0xC5, 0x07, 0xA9, 0xD5, 0xCF, 0x09, 0x08, 0xBC, 0x56, 0x63, 0x8D, 0x70, 0x2F, 0x64, 0xAF, 0x51, 0x9E, 0x22, 0xA4, 0x88, 0xF0, 0xDC, 0x56, 0x72, 0x28
|
||||
};
|
||||
|
||||
/* CTR_SDK 4/5 (4.2.8) */
|
||||
// APP
|
||||
static const unsigned char app_4_dev_hdrpub[0x100] =
|
||||
{
|
||||
0xCF, 0xEC, 0xB2, 0x48, 0x03, 0x6D, 0xB8, 0x09, 0xE3, 0x5C, 0x6C, 0x62, 0x2C, 0xA9, 0x49, 0xE1, 0xF4, 0xF4, 0x0C, 0x6C, 0xC3, 0xE5, 0x2F, 0x9D, 0x50, 0xA0, 0x2B, 0x5A, 0x00, 0xC6, 0x72, 0x00, 0x0B, 0xA3, 0x04, 0x5D, 0x94, 0x46, 0xE7, 0x00, 0x1B, 0x48, 0x85, 0xB5, 0x61, 0x2C, 0xC9, 0x74, 0xCA, 0x2B, 0x43, 0x13, 0xC1, 0x78, 0x97, 0x5C, 0x33, 0x2F, 0x07, 0xC7, 0x85, 0xF0, 0xDA, 0xDB, 0x60, 0x96, 0x50, 0x0F, 0x7C, 0x4B, 0x7A, 0xD7, 0x17, 0x9D, 0xE4, 0xE5, 0xC3, 0xAB, 0x6F, 0x5D, 0xA5, 0x78, 0x32, 0xAD, 0x04, 0xDD, 0x96, 0x6E, 0xDC, 0x75, 0xFF, 0xC2, 0x2F, 0xFA, 0xA2, 0xEE, 0x46, 0x89, 0xCD, 0xAE, 0x69, 0x92, 0xA4, 0x48, 0xBC, 0x46, 0x47, 0xC4, 0x8C, 0x89, 0x63, 0xE1, 0x0A, 0x4D, 0x1C, 0xDC, 0x46, 0x2F, 0x5B, 0x70, 0x8A, 0x7C, 0xE9, 0x22, 0x9C, 0x09, 0x0B, 0xA8, 0x97, 0x40, 0xCA, 0x2A, 0x7D, 0x84, 0xA1, 0x04, 0x4A, 0x2E, 0xDB, 0xD7, 0xD0, 0x64, 0x43, 0x9C, 0xD0, 0x78, 0x11, 0x41, 0x88, 0x33, 0xDD, 0x31, 0x62, 0x90, 0x2D, 0x17, 0xF2, 0xC6, 0xA9, 0x2B, 0x9C, 0x70, 0xAB, 0xDC, 0xD3, 0xAB, 0x5D, 0xDA, 0xEE, 0x3D, 0x6C, 0x0E, 0x81, 0xFF, 0xF6, 0x67, 0x5A, 0x44, 0xF9, 0xAC, 0x07, 0x3D, 0x23, 0x94, 0x75, 0x65, 0x93, 0x20, 0x0C, 0xC5, 0x76, 0x1D, 0x0F, 0x65, 0x06, 0x3D, 0x21, 0xA2, 0xF0, 0x96, 0x80, 0xB7, 0x0A, 0x49, 0x53, 0x38, 0xA3, 0x5D, 0xC0, 0x74, 0x3C, 0xA4, 0xD9, 0x40, 0x36, 0x85, 0x1F, 0x8C, 0xD1, 0x2D, 0x15, 0xF9, 0xEF, 0x24, 0xA9, 0x7E, 0x9D, 0xB2, 0x1E, 0xF8, 0xA0, 0x72, 0x81, 0x17, 0x77, 0x73, 0xB1, 0x56, 0x7F, 0xAD, 0x05, 0xA2, 0xD2, 0x30, 0x5A, 0xF5, 0xD3, 0xAF, 0x0F, 0x10, 0x4A, 0x52, 0xD8, 0x09, 0x47, 0x97
|
||||
};
|
||||
|
||||
static const unsigned char app_4_dev_hdrpvt[0x100] =
|
||||
{
|
||||
0x8C, 0xBD, 0xB2, 0x3B, 0xCE, 0x9E, 0x51, 0x09, 0xD8, 0x6D, 0x72, 0x2B, 0xCE, 0x01, 0x55, 0x32, 0x6E, 0xC5, 0x57, 0x37, 0xB4, 0x2E, 0x09, 0x59, 0xD9, 0xFE, 0x60, 0xF9, 0xCE, 0x36, 0x85, 0x6A, 0x04, 0x76, 0x76, 0xF9, 0x04, 0xEA, 0x2D, 0x68, 0xC4, 0x0F, 0x05, 0xFA, 0xAD, 0x69, 0x4C, 0x80, 0x12, 0x6C, 0xD0, 0x3D, 0xAA, 0x22, 0xFF, 0x89, 0x78, 0x57, 0xE8, 0x53, 0x25, 0x15, 0xD0, 0x7E, 0xD8, 0x55, 0x46, 0xA2, 0x04, 0xC7, 0x6E, 0xC1, 0xF3, 0x89, 0x7C, 0x2C, 0x0E, 0x93, 0x97, 0x91, 0x72, 0xF4, 0xF6, 0x90, 0x69, 0x0F, 0xB8, 0xC9, 0x17, 0xCF, 0x83, 0xAC, 0xA5, 0x1F, 0x69, 0x74, 0x12, 0x29, 0x2B, 0x21, 0x58, 0xF2, 0xDA, 0xE3, 0x25, 0x16, 0x09, 0x74, 0x40, 0x90, 0xAB, 0x1B, 0xE4, 0x06, 0x28, 0x77, 0xED, 0xC6, 0x16, 0x86, 0x0A, 0x27, 0xDD, 0x03, 0x01, 0x4D, 0x9A, 0x26, 0x6E, 0xC8, 0x9F, 0xD3, 0x9A, 0x4B, 0x59, 0xD1, 0x10, 0x9B, 0xEB, 0xA9, 0x58, 0x72, 0xBD, 0xA1, 0xFE, 0x9D, 0x86, 0xED, 0x29, 0xE9, 0x29, 0x49, 0x62, 0x4B, 0xD8, 0x7D, 0x2A, 0x7A, 0x66, 0x1B, 0xE5, 0x04, 0x81, 0x56, 0x10, 0x50, 0xAF, 0xB8, 0x48, 0x27, 0xC1, 0xC9, 0x46, 0xBD, 0x3F, 0x16, 0x06, 0xA5, 0x3D, 0x04, 0x9F, 0x0D, 0x54, 0x71, 0x1C, 0xF4, 0x82, 0xC0, 0x66, 0x74, 0xEA, 0x9C, 0x83, 0x3C, 0x27, 0x01, 0xDF, 0x6F, 0x56, 0xA8, 0x1B, 0xE3, 0x68, 0x55, 0x9F, 0xAB, 0x90, 0x67, 0x20, 0x25, 0xFA, 0x3D, 0x51, 0x2A, 0x23, 0x16, 0xCB, 0x06, 0x5A, 0xAD, 0xAC, 0xC8, 0x47, 0xF9, 0x39, 0x2E, 0x6A, 0xF8, 0xFA, 0x0A, 0xE8, 0x8A, 0x64, 0x84, 0x6B, 0xED, 0xDA, 0x8F, 0x2A, 0x08, 0x86, 0x8F, 0x56, 0x69, 0x64, 0xC3, 0x98, 0x55, 0x37, 0x9A, 0x48, 0x40, 0xDA, 0xD5, 0x03, 0x21
|
||||
};
|
||||
|
||||
static const unsigned char app_4_dev_acexsig[0x100] =
|
||||
{
|
||||
0xDF, 0x1C, 0x8B, 0x98, 0xE4, 0x6F, 0xA2, 0x35, 0x6C, 0xC3, 0x18, 0x17, 0x98, 0xF3, 0xCE, 0x54, 0x7E, 0x14, 0x2E, 0x7F, 0x1E, 0xD8, 0x6D, 0xCF, 0xBC, 0x29, 0x4E, 0xFE, 0x32, 0x2E, 0xC1, 0x11, 0xAD, 0x46, 0x9A, 0xC6, 0x70, 0xEA, 0xEE, 0x28, 0x55, 0x22, 0xE1, 0x36, 0x05, 0x1C, 0x04, 0x8A, 0xCE, 0x0F, 0x0C, 0x83, 0x8F, 0xC8, 0xD6, 0xDE, 0x11, 0x8E, 0xEA, 0xCF, 0xAD, 0x9B, 0xCF, 0x81, 0x0D, 0xEB, 0x71, 0x13, 0xB3, 0xD3, 0xAE, 0x83, 0x02, 0x4C, 0x0E, 0x10, 0x50, 0x59, 0x3C, 0xEE, 0x60, 0x06, 0xFB, 0x8C, 0x7F, 0xC2, 0x20, 0x24, 0x01, 0x62, 0x55, 0x87, 0x60, 0x0F, 0xAD, 0xFA, 0x73, 0x2E, 0xF6, 0x65, 0x62, 0xD2, 0xE5, 0x10, 0x45, 0x69, 0x70, 0x39, 0x03, 0xD1, 0x39, 0xEC, 0x50, 0xC1, 0xD4, 0x25, 0x39, 0xB2, 0x90, 0x11, 0x4E, 0x95, 0xCB, 0x19, 0xEB, 0xCA, 0x0F, 0xB5, 0xFA, 0xC7, 0xB0, 0xE2, 0xD7, 0xE0, 0x71, 0xC3, 0xE5, 0x55, 0x33, 0x9E, 0x5C, 0xDC, 0x4D, 0x3B, 0x51, 0x11, 0x0D, 0x31, 0x78, 0x96, 0xCA, 0xD7, 0x18, 0x58, 0xEE, 0x00, 0xE9, 0x28, 0xF2, 0x68, 0x76, 0xD4, 0x57, 0xFE, 0x65, 0xB1, 0x4B, 0x49, 0x3F, 0xF6, 0xA6, 0x58, 0x4A, 0xC7, 0xFC, 0xC4, 0xBB, 0x61, 0xBC, 0x58, 0x8D, 0x55, 0x65, 0xE6, 0x0A, 0x79, 0x39, 0x41, 0xB8, 0x80, 0x61, 0xF7, 0x05, 0xC3, 0xFE, 0xD6, 0x8B, 0x09, 0x82, 0xC2, 0x5F, 0xA6, 0x56, 0xF9, 0xEE, 0x1D, 0x0E, 0x06, 0x3E, 0x9F, 0x3F, 0xF1, 0x93, 0x9A, 0x4F, 0xA2, 0xD5, 0x91, 0x87, 0x8A, 0xFE, 0xCF, 0xC3, 0xFC, 0x8A, 0xB1, 0xC4, 0x78, 0xE9, 0xD1, 0x1A, 0xF7, 0xB1, 0xD3, 0x20, 0xCB, 0x83, 0xBE, 0x03, 0xD5, 0xCA, 0xA5, 0x5E, 0x17, 0xA6, 0x91, 0x10, 0xD4, 0xBE, 0x23, 0xD6, 0x4B, 0x4F, 0x03, 0xA9, 0xAE
|
||||
};
|
||||
|
||||
// DEMO
|
||||
static const unsigned char demo_4_dev_hdrpub[0x100] =
|
||||
{
|
||||
0xB5, 0x11, 0x8D, 0x9E, 0x2D, 0xDB, 0x70, 0x6D, 0x6E, 0xEE, 0xAA, 0x21, 0xE0, 0x4E, 0x80, 0x0A, 0x96, 0x4A, 0x10, 0xD0, 0x9C, 0xD7, 0xD9, 0xD4, 0x94, 0x87, 0x72, 0xA2, 0xAF, 0x02, 0xA0, 0x05, 0x2E, 0xBF, 0x17, 0xEB, 0xFE, 0x5B, 0x9F, 0xB7, 0x0B, 0x1E, 0x3E, 0xF9, 0xAC, 0xBC, 0x7B, 0xB1, 0x56, 0x10, 0x24, 0x5F, 0x57, 0x2C, 0x08, 0xD0, 0x14, 0x79, 0x83, 0x84, 0x6A, 0x45, 0x25, 0xEB, 0xD9, 0xBE, 0x02, 0x21, 0xF7, 0x35, 0xC2, 0x74, 0x57, 0xC5, 0xAC, 0x34, 0x05, 0xC6, 0x9E, 0x82, 0xB8, 0xED, 0x78, 0xC4, 0x3B, 0xFD, 0x23, 0x59, 0x54, 0xD2, 0x0A, 0x0B, 0x5B, 0x25, 0xC0, 0x71, 0xC3, 0x84, 0x3A, 0xA7, 0xF9, 0x99, 0x86, 0xD8, 0xFE, 0x60, 0x10, 0x85, 0x77, 0x57, 0x76, 0x0C, 0x25, 0xE1, 0x18, 0x18, 0x3B, 0x83, 0xFD, 0x36, 0x7C, 0x84, 0x58, 0xC2, 0xC4, 0x68, 0x4F, 0xD1, 0xD7, 0x0A, 0x88, 0xFD, 0xCA, 0x97, 0xA1, 0xE5, 0xCE, 0x72, 0x63, 0xCF, 0x74, 0xD0, 0x20, 0xD9, 0xDE, 0x3F, 0xBB, 0x11, 0xF9, 0x21, 0xAB, 0x3F, 0x54, 0x41, 0xA7, 0xAA, 0xCA, 0xFC, 0xE1, 0x1A, 0x8C, 0x12, 0xC9, 0x39, 0x13, 0x5A, 0x81, 0x29, 0x49, 0xE8, 0xFB, 0x48, 0xC9, 0x4D, 0x50, 0x87, 0xAE, 0x51, 0xFB, 0x94, 0xFC, 0xF0, 0x9C, 0x70, 0x1C, 0xE8, 0x6E, 0x44, 0x53, 0x1E, 0x2F, 0x27, 0x5C, 0xB8, 0xEC, 0xBE, 0xFC, 0xD9, 0x98, 0x6A, 0x08, 0xD0, 0x5C, 0x4D, 0x78, 0x2D, 0x4D, 0x07, 0xAD, 0x5E, 0xB8, 0x51, 0x40, 0xE2, 0x2A, 0x7F, 0xB1, 0x54, 0x47, 0x5C, 0x99, 0x12, 0xC2, 0x6D, 0x5E, 0xED, 0x25, 0x30, 0x6A, 0x99, 0xC5, 0x0D, 0x65, 0x83, 0x68, 0x3A, 0xFD, 0x82, 0x59, 0x0D, 0xCE, 0x0B, 0x49, 0xBE, 0x17, 0x46, 0x51, 0xA9, 0xB6, 0x54, 0xE1, 0x18, 0xBD, 0x49, 0xE6, 0x7F
|
||||
};
|
||||
|
||||
static const unsigned char demo_4_dev_hdrpvt[0x100] =
|
||||
{
|
||||
0x1D, 0x7B, 0x79, 0x32, 0xAB, 0x46, 0xD2, 0xBC, 0x8E, 0xD6, 0x7F, 0x8F, 0x3A, 0x85, 0xAD, 0xA5, 0x8B, 0xA9, 0x0D, 0xA9, 0xDA, 0x0F, 0xEF, 0x61, 0x04, 0xBA, 0x35, 0x39, 0x36, 0x03, 0xD8, 0x68, 0x5F, 0x9F, 0x2F, 0xD6, 0xF6, 0x38, 0x96, 0xFD, 0xE7, 0xEA, 0x89, 0xD8, 0x7F, 0x7E, 0xC5, 0x29, 0x2F, 0xD9, 0x3B, 0x02, 0xE7, 0x1F, 0xBD, 0x63, 0x9C, 0x21, 0xD8, 0xFF, 0x43, 0x8A, 0x74, 0xCD, 0x3D, 0x4C, 0x09, 0xEE, 0xDB, 0xE0, 0xBE, 0x03, 0xD1, 0x92, 0xD7, 0x22, 0x35, 0x5A, 0x8C, 0xCE, 0xBE, 0x2B, 0xB4, 0x81, 0x47, 0x3F, 0x45, 0x75, 0x33, 0x31, 0x6B, 0xFF, 0x43, 0x5D, 0x17, 0x43, 0xAE, 0xD1, 0x25, 0xF7, 0xD9, 0xD5, 0x5C, 0xB6, 0x92, 0x5C, 0xB3, 0xF3, 0xF7, 0x65, 0x9F, 0x4C, 0x05, 0x12, 0xEC, 0xA8, 0x6D, 0x70, 0x65, 0x57, 0x6C, 0xD8, 0xE3, 0xD6, 0xFA, 0xC1, 0xFD, 0x54, 0xE8, 0x34, 0x67, 0x4D, 0x0A, 0x14, 0x2F, 0xA3, 0xD4, 0x81, 0x8C, 0xC3, 0xD0, 0x8B, 0x09, 0x08, 0x90, 0x70, 0x68, 0xA0, 0x0E, 0xD1, 0x0B, 0xAA, 0x71, 0xEC, 0x9A, 0x1A, 0x83, 0xFF, 0xA1, 0x70, 0xEB, 0xAC, 0xF2, 0xE9, 0x80, 0xA1, 0xB8, 0x20, 0x31, 0x83, 0xF5, 0x37, 0x01, 0x72, 0x06, 0x50, 0x05, 0x3F, 0x14, 0xF9, 0x29, 0x48, 0x84, 0xA0, 0x0E, 0xF7, 0xB8, 0x1D, 0xA3, 0x36, 0x5A, 0x78, 0x6D, 0x83, 0x90, 0x27, 0xE3, 0x50, 0x49, 0x2F, 0x65, 0xE5, 0x61, 0xED, 0x65, 0xBE, 0xEA, 0x34, 0xA6, 0x6A, 0xEF, 0x49, 0xB4, 0xE0, 0xBC, 0xC2, 0xA5, 0xB8, 0xEB, 0xA9, 0x2F, 0xBA, 0x26, 0x76, 0xB2, 0x5A, 0x3A, 0x3B, 0xFD, 0xAD, 0xFB, 0xE4, 0x79, 0xE2, 0x85, 0x54, 0x5B, 0xAB, 0x1F, 0x0A, 0xE5, 0x8B, 0x77, 0x3A, 0x10, 0x98, 0x26, 0x74, 0xC8, 0xB0, 0x82, 0xB1, 0xF9, 0x8F, 0x68, 0x59
|
||||
};
|
||||
|
||||
static const unsigned char demo_4_dev_acexsig[0x100] =
|
||||
{
|
||||
0xD3, 0x7D, 0x42, 0xBA, 0x6A, 0x1E, 0xD8, 0x07, 0x3C, 0x4A, 0xC4, 0xCD, 0x8C, 0x68, 0x3D, 0xCD, 0xCD, 0xBD, 0x9D, 0xCE, 0xB5, 0x2A, 0xF9, 0x63, 0x3D, 0xA9, 0x54, 0x0A, 0x2E, 0x4C, 0xE1, 0x60, 0x4B, 0xD0, 0xC9, 0xEB, 0xEF, 0x31, 0x65, 0x70, 0xB9, 0x0E, 0x06, 0x3B, 0x3D, 0x42, 0x4C, 0x6E, 0x8D, 0x2C, 0xD4, 0x71, 0x29, 0x76, 0xB7, 0xDD, 0x8C, 0xDA, 0xE7, 0xE3, 0x96, 0xA7, 0xAA, 0xF8, 0xCA, 0x05, 0xE8, 0xA7, 0x0A, 0xDD, 0x01, 0x49, 0xBD, 0xF1, 0xA5, 0xE8, 0x16, 0x22, 0xEE, 0x47, 0x1F, 0xEF, 0x28, 0x48, 0x87, 0xA9, 0x2D, 0xFC, 0x4E, 0xD5, 0xA5, 0x98, 0xB1, 0xFE, 0x1B, 0xEB, 0xA9, 0x06, 0x3C, 0x76, 0xD9, 0xAA, 0x0E, 0x9C, 0x60, 0xFC, 0xE9, 0x77, 0x9D, 0x7F, 0x67, 0xAC, 0xF5, 0xC7, 0x49, 0x12, 0xFD, 0x76, 0xAC, 0xD2, 0x54, 0xDB, 0x73, 0x41, 0x10, 0x1F, 0x04, 0x3F, 0xD0, 0x6F, 0xE0, 0x80, 0x24, 0xCC, 0xEE, 0xBF, 0x25, 0x9D, 0x0D, 0x5A, 0x2A, 0x1C, 0xC5, 0xD4, 0xE3, 0x5D, 0x3A, 0xC1, 0x86, 0xD3, 0xD4, 0x52, 0x1C, 0x4C, 0xBF, 0x31, 0xEB, 0x54, 0xCA, 0x4C, 0x06, 0x50, 0x52, 0x87, 0xD4, 0x9D, 0x4A, 0x4B, 0x22, 0xE1, 0x4A, 0xE9, 0x4D, 0x05, 0xA8, 0x57, 0xEC, 0xF8, 0x90, 0xF8, 0x58, 0xC3, 0x8B, 0x3A, 0x0F, 0x88, 0x36, 0xF4, 0xE5, 0x44, 0x10, 0x80, 0x68, 0x86, 0x1D, 0xAE, 0x90, 0x20, 0x03, 0x22, 0x2D, 0x44, 0xBF, 0xAB, 0x2B, 0xA1, 0x14, 0xAD, 0x6B, 0x40, 0x57, 0xDB, 0xBB, 0xDA, 0x09, 0x4C, 0x51, 0x26, 0x9B, 0xE3, 0xD9, 0xF9, 0xE1, 0xBC, 0xF1, 0xF1, 0xCD, 0x30, 0xB4, 0xF5, 0x39, 0xD0, 0xBC, 0xF7, 0x98, 0x05, 0xAF, 0xA8, 0x33, 0x4B, 0xC1, 0x16, 0x0F, 0xF2, 0xC2, 0x79, 0x96, 0xEC, 0xBE, 0xA9, 0xF5, 0x55, 0x7C, 0x82, 0x95, 0x73
|
||||
};
|
||||
|
||||
// DLP
|
||||
static const unsigned char dlp_4_dev_hdrpub[0x100] =
|
||||
{
|
||||
0xB3, 0x16, 0x68, 0xF1, 0xED, 0x59, 0xC8, 0x7F, 0xC6, 0x50, 0x21, 0xFE, 0x36, 0x7C, 0x55, 0xE7, 0x07, 0xF9, 0x1D, 0x1B, 0xF5, 0xB1, 0x2A, 0x6B, 0x3A, 0xDE, 0x2D, 0x4C, 0x51, 0xCD, 0x4C, 0x9F, 0xEE, 0x1D, 0xE4, 0xE8, 0xF0, 0xFD, 0x09, 0x8E, 0x0F, 0x92, 0x5F, 0xDB, 0x9C, 0x5C, 0x15, 0x55, 0x1A, 0x4D, 0x04, 0x8C, 0xB0, 0xA4, 0x88, 0x97, 0xC4, 0xD5, 0x92, 0x04, 0x42, 0x33, 0x84, 0x81, 0x06, 0xD6, 0xF2, 0x17, 0xDE, 0x83, 0x17, 0x50, 0xD0, 0x47, 0x61, 0x14, 0x0D, 0xB7, 0xC7, 0xA0, 0xC1, 0x8B, 0x82, 0x47, 0x13, 0xEE, 0x76, 0xA2, 0xA3, 0x8D, 0xCE, 0x55, 0xC1, 0xF3, 0x7A, 0xEA, 0x91, 0xE1, 0xB9, 0x2F, 0x8F, 0x9B, 0xC3, 0x7B, 0x51, 0x2F, 0xE7, 0xAD, 0x93, 0x9C, 0xFD, 0xDF, 0x19, 0xC8, 0x6C, 0x24, 0xC2, 0xE2, 0x91, 0x97, 0x1F, 0xEB, 0x4B, 0xD4, 0x46, 0x6C, 0x06, 0x93, 0xAF, 0xF5, 0x5E, 0x8F, 0x77, 0x25, 0xC4, 0x28, 0xC0, 0x82, 0x4A, 0x78, 0xE9, 0x14, 0x08, 0xC3, 0xC3, 0x58, 0x24, 0x44, 0x2D, 0x2B, 0xA7, 0xEE, 0x28, 0xEF, 0x1B, 0x6D, 0xAA, 0x9C, 0xED, 0x7F, 0x35, 0xCE, 0x86, 0x5C, 0x6B, 0x8A, 0x23, 0xD3, 0x9D, 0x05, 0x8F, 0xD2, 0x41, 0x93, 0x1D, 0x1D, 0x7E, 0xB0, 0x46, 0x23, 0x63, 0x07, 0xEA, 0x5F, 0x26, 0xE3, 0x81, 0x27, 0xB3, 0x95, 0xB1, 0x93, 0x59, 0xD4, 0x1A, 0xB8, 0x73, 0xD0, 0x09, 0x95, 0x2B, 0xE8, 0x8B, 0xE2, 0x73, 0x5F, 0x34, 0xB9, 0x98, 0x82, 0xF0, 0x11, 0xC6, 0x8F, 0x12, 0x4D, 0x09, 0x57, 0x10, 0x97, 0x22, 0x0E, 0xC8, 0x7D, 0x40, 0xC1, 0x9D, 0x12, 0x1F, 0x71, 0xFE, 0x1E, 0x1A, 0x8C, 0x3F, 0x56, 0xAC, 0x43, 0xC3, 0x66, 0x0C, 0x81, 0xAE, 0xC1, 0x8F, 0x68, 0xFF, 0x87, 0x07, 0x3C, 0xCD, 0x0A, 0x23, 0xDE, 0xBA, 0x9B
|
||||
};
|
||||
|
||||
static const unsigned char dlp_4_dev_hdrpvt[0x100] =
|
||||
{
|
||||
0x77, 0xC2, 0x7A, 0xB7, 0x9E, 0x13, 0xB6, 0x62, 0xCC, 0x09, 0x76, 0x51, 0xFB, 0xB9, 0xB5, 0xF0, 0x63, 0x82, 0x91, 0x96, 0xCA, 0xFC, 0x88, 0xF3, 0x60, 0x50, 0x87, 0x56, 0x4C, 0x35, 0xD0, 0x11, 0xFB, 0x38, 0x7E, 0x85, 0xCF, 0xF2, 0x46, 0xDB, 0x7B, 0x4A, 0x55, 0x54, 0x15, 0x01, 0xF7, 0x3A, 0x0B, 0xF6, 0x89, 0x1E, 0x54, 0x5A, 0x13, 0x05, 0xFB, 0x19, 0x1F, 0x26, 0x3D, 0xE7, 0x19, 0xAA, 0xF7, 0x19, 0xF2, 0x97, 0x47, 0xB3, 0xBE, 0x79, 0xCA, 0x6E, 0x91, 0x5A, 0xC9, 0xB9, 0xA6, 0x83, 0xB8, 0x2A, 0x45, 0x1A, 0xA7, 0x17, 0x86, 0xBA, 0x48, 0x49, 0x62, 0x3C, 0x33, 0x11, 0x51, 0x97, 0x5F, 0xAA, 0xE5, 0x1E, 0x0B, 0x19, 0x0C, 0xE6, 0x80, 0x6A, 0x5A, 0xB1, 0xD6, 0xCE, 0xDB, 0x6E, 0xC0, 0x5D, 0x29, 0x04, 0x84, 0x56, 0xE3, 0x29, 0x7E, 0xAC, 0xE8, 0xEE, 0xB1, 0x91, 0x37, 0xEB, 0x98, 0x9C, 0xBD, 0x02, 0x6A, 0x78, 0x61, 0xB0, 0x79, 0x1A, 0x9F, 0x30, 0x86, 0xF6, 0x71, 0x5A, 0x5A, 0x12, 0xA1, 0x9E, 0xA1, 0x68, 0x03, 0xE5, 0x95, 0xA8, 0x38, 0x58, 0x87, 0x08, 0x57, 0x35, 0x32, 0x47, 0x3B, 0xFC, 0x02, 0x6F, 0xCE, 0x55, 0x61, 0xA3, 0x2A, 0x6B, 0x2F, 0xF8, 0xEE, 0x8D, 0xFA, 0x43, 0x33, 0x02, 0x63, 0x47, 0x02, 0x78, 0x5A, 0x7F, 0x64, 0x07, 0x92, 0xB7, 0x7C, 0x09, 0x7C, 0xFE, 0x2D, 0x1C, 0xFC, 0x77, 0x9F, 0x19, 0x20, 0xDD, 0x6D, 0x4C, 0xFE, 0x49, 0x09, 0x47, 0xCA, 0x9B, 0x1C, 0x8C, 0x1F, 0x37, 0xAC, 0x14, 0x85, 0x56, 0xC0, 0xFD, 0xD6, 0x01, 0xB3, 0x40, 0xA3, 0x1A, 0x32, 0x78, 0xA0, 0xDD, 0x21, 0x75, 0xBF, 0x24, 0xD2, 0x93, 0x85, 0xED, 0x22, 0xAD, 0x99, 0x91, 0x87, 0x4A, 0xEC, 0xC0, 0x6C, 0x71, 0x00, 0x76, 0x08, 0x23, 0xA2, 0xF3, 0xCF, 0x61
|
||||
};
|
||||
|
||||
static const unsigned char dlp_4_dev_acexsig[0x100] =
|
||||
{
|
||||
0xAC, 0xE2, 0xA7, 0xC3, 0x00, 0xDE, 0xE8, 0xE9, 0xE0, 0x03, 0xB3, 0x54, 0x08, 0xA8, 0xF8, 0x3A, 0x2E, 0xD8, 0x10, 0x6B, 0xEC, 0xDC, 0x4E, 0xEE, 0x62, 0x10, 0x71, 0x49, 0xD4, 0x43, 0xB1, 0x0E, 0x6B, 0x8C, 0xD7, 0x54, 0xD5, 0x62, 0x28, 0x3F, 0xAA, 0xDE, 0xA9, 0x7D, 0xED, 0x37, 0x7C, 0xE7, 0x89, 0x0B, 0x02, 0xB2, 0x72, 0x4B, 0x17, 0xDB, 0xE2, 0xD3, 0x7C, 0x94, 0x12, 0x3F, 0x2E, 0xA1, 0x08, 0x99, 0xCC, 0x7F, 0x93, 0xE6, 0x38, 0xC9, 0x37, 0x84, 0xD7, 0x11, 0x9D, 0x02, 0x4D, 0x66, 0xB4, 0x70, 0x9F, 0xD8, 0xC6, 0xDD, 0xD5, 0x13, 0x52, 0xF0, 0xA6, 0x78, 0x8C, 0x8E, 0x15, 0xA0, 0xA1, 0xF3, 0xC4, 0xC3, 0x48, 0x45, 0xA5, 0xBE, 0xC9, 0x7A, 0x8B, 0xD3, 0x95, 0xA5, 0x4C, 0xF1, 0xB3, 0x0C, 0x6C, 0x76, 0xA7, 0x57, 0xA1, 0x77, 0xDF, 0x2F, 0xC8, 0x06, 0xA6, 0x0D, 0x1A, 0x09, 0xE4, 0x38, 0x64, 0x07, 0xBE, 0x6A, 0xD2, 0xA0, 0xC0, 0xEC, 0x09, 0x64, 0x9F, 0x0D, 0x93, 0x0C, 0x89, 0xA2, 0x71, 0xD6, 0xC6, 0xC2, 0x54, 0x79, 0x2A, 0xA4, 0x31, 0x28, 0x24, 0x1A, 0xF3, 0x56, 0x78, 0x63, 0x99, 0x97, 0xA5, 0xCE, 0x8F, 0x52, 0x7A, 0x79, 0x51, 0xEE, 0x4C, 0x8B, 0x00, 0x9D, 0x5C, 0x3E, 0xD5, 0xAA, 0x24, 0x9C, 0x94, 0xC6, 0xA3, 0x99, 0x1B, 0x2D, 0xD4, 0xFF, 0xB4, 0x25, 0x73, 0x13, 0x33, 0x9F, 0x03, 0x6F, 0x1E, 0x75, 0xC4, 0x70, 0xF4, 0x07, 0x4F, 0x18, 0xFE, 0xBD, 0x8F, 0x2C, 0x9B, 0x33, 0xD4, 0x30, 0xA7, 0x18, 0x4A, 0xF1, 0xA4, 0xDD, 0x78, 0x41, 0xA0, 0xB8, 0x02, 0x8D, 0x51, 0x96, 0xBE, 0xE7, 0x17, 0x94, 0x66, 0x65, 0x27, 0xF7, 0x69, 0x48, 0x7E, 0xA9, 0x08, 0x71, 0x20, 0x76, 0xB7, 0x8E, 0xD2, 0xBF, 0x5C, 0x7E, 0x5E, 0x06, 0x45, 0xAB, 0x7E, 0x2E
|
||||
};
|
||||
#endif
|
||||
@@ -0,0 +1,85 @@
|
||||
#ifndef _DESC_PRESETS_H_
|
||||
#define _DESC_PRESETS_H_
|
||||
|
||||
/* CTR_SDK 1 (1.2.0) */
|
||||
// DependencyList
|
||||
static const unsigned char sdk1_dep_list[0x180] =
|
||||
{
|
||||
0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// APP
|
||||
static const unsigned char app_1_acex_data[0x200] =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
// DLP
|
||||
static const unsigned char dlp_1_acex_data[0x200] =
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
/* CTR_SDK 2 (2.3.4) */
|
||||
static const unsigned char sdk2_dep_list[0x180] =
|
||||
{
|
||||
0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// APP
|
||||
static const unsigned char app_2_acex_data[0x200] =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
// DLP
|
||||
static const unsigned char dlp_2_acex_data[0x200] =
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
/* CTR_SDK 4/5 (4.2.8) */
|
||||
// DependencyList
|
||||
static const unsigned char sdk4_dep_list[0x180] =
|
||||
{
|
||||
0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x33, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x37, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// SD APP
|
||||
static const unsigned char app_4_acex_data[0x200] =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
// EC App
|
||||
static const unsigned char ecapp_4_acex_data[0x200] =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x20, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
|
||||
// DEMO
|
||||
static const unsigned char demo_4_acex_data[0x200] =
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
// DLP
|
||||
static const unsigned char dlp_4_acex_data[0x200] =
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
/* SDK 7 (7.1.0) */
|
||||
static const unsigned char sdk7_dep_list[0x180] =
|
||||
{
|
||||
0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x38, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x33, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x37, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// APP
|
||||
static const unsigned char app_7_acex_data[0x200] =
|
||||
{
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x41, 0x00, 0x00, 0x00, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x61, 0x63, 0x74, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x27, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,38 @@
|
||||
#ifndef _DESC_PROD_SIGDATA_H_
|
||||
#define _DESC_PROD_SIGDATA_H_
|
||||
|
||||
/* CTR_SDK 4/5 (4.2.8) */
|
||||
// APP
|
||||
static const unsigned char app_4_prod_hdrpub[0x100] = // app_4_prod_hdrpub
|
||||
{
|
||||
0xCF, 0x00, 0x9C, 0xB3, 0x20, 0xA0, 0x32, 0x47, 0x65, 0x89, 0xE0, 0xA0, 0x40, 0xC5, 0x57, 0x03, 0xA5, 0xF6, 0x8E, 0x66, 0xF5, 0x20, 0x28, 0xEE, 0xA7, 0x44, 0x3E, 0x8E, 0x4F, 0xC0, 0xC9, 0xD3, 0xE4, 0x3A, 0x0B, 0x31, 0xEC, 0x8F, 0xCC, 0x8D, 0x4C, 0xA6, 0x14, 0x49, 0x14, 0xBE, 0x05, 0xC1, 0xB4, 0x22, 0xAD, 0xCE, 0x1D, 0xCD, 0x29, 0x7B, 0x45, 0x16, 0xE5, 0xB9, 0xD6, 0xD2, 0x7A, 0xD0, 0x63, 0xCE, 0x69, 0xB2, 0xCA, 0xB8, 0x6D, 0x10, 0x9B, 0x99, 0x62, 0xF9, 0x45, 0xC0, 0x2E, 0xB5, 0xA1, 0xCD, 0x6B, 0xAF, 0x77, 0x9B, 0xEF, 0xD8, 0x56, 0x48, 0x75, 0x34, 0x02, 0x6E, 0xBA, 0xBF, 0x30, 0x54, 0xBF, 0x33, 0x4D, 0xB1, 0x36, 0xDC, 0x2A, 0xCD, 0x68, 0x81, 0x8C, 0x4F, 0xCB, 0xC2, 0xA2, 0x1D, 0x6E, 0xB0, 0xC0, 0x02, 0xF5, 0xF8, 0x1C, 0x6C, 0xB4, 0xC9, 0xD6, 0x90, 0x27, 0x50, 0xCA, 0x61, 0xE4, 0x1E, 0xA6, 0x1E, 0x43, 0x94, 0x01, 0x81, 0xC3, 0x69, 0xD0, 0xE2, 0x2C, 0xD7, 0x86, 0x1B, 0x8B, 0x69, 0x4D, 0xF0, 0xF1, 0x54, 0x24, 0x20, 0x91, 0xDD, 0x87, 0x12, 0x0A, 0x23, 0x98, 0x09, 0x63, 0xFD, 0xB4, 0x00, 0x69, 0x06, 0xD2, 0xF1, 0xC3, 0xE7, 0x9D, 0xCC, 0x87, 0x99, 0x01, 0x20, 0xDA, 0xD6, 0xA4, 0x24, 0x58, 0x9A, 0x62, 0x52, 0xF0, 0x30, 0x98, 0x6C, 0x08, 0x90, 0xB4, 0xA6, 0xE4, 0x79, 0x47, 0xF3, 0x1D, 0x58, 0x86, 0x4D, 0x9B, 0xA3, 0xE8, 0xFC, 0x1A, 0x63, 0xC3, 0x2F, 0xDF, 0xD3, 0xC6, 0x3B, 0x8E, 0xDA, 0xFB, 0xEA, 0x6D, 0xE3, 0x92, 0x14, 0xC8, 0x21, 0x2C, 0xE3, 0xF2, 0xE3, 0x31, 0x2E, 0xF6, 0x73, 0x27, 0xE8, 0xF2, 0xD5, 0x38, 0xB7, 0x04, 0x46, 0xA7, 0xBE, 0x92, 0x14, 0x66, 0x1E, 0x8D, 0x88, 0xF7, 0xC0, 0x60, 0xB5, 0x7F, 0xF3, 0xCE, 0x43
|
||||
};
|
||||
|
||||
static const unsigned char app_4_prod_acexsig[0x100] = // app_4_prod_acexsig
|
||||
{
|
||||
0x04, 0xE3, 0xD1, 0xD2, 0x32, 0xF4, 0x04, 0xE5, 0x79, 0x67, 0x1E, 0x74, 0xD8, 0x1B, 0x8F, 0x6C, 0xEB, 0xE2, 0xFE, 0x1B, 0xCE, 0xAB, 0x92, 0x03, 0xF0, 0x3C, 0xF5, 0x31, 0x07, 0xCE, 0x8E, 0x47, 0xB2, 0xE8, 0x52, 0x8F, 0xFF, 0xA7, 0x1B, 0xE1, 0xFF, 0x58, 0x5E, 0x99, 0xBA, 0x71, 0x90, 0x87, 0x01, 0x92, 0xE8, 0xD0, 0x67, 0x6E, 0x29, 0xD3, 0x1E, 0xA6, 0x22, 0x8F, 0x52, 0xAD, 0x6B, 0xB1, 0xB6, 0xC0, 0xC6, 0x44, 0x5D, 0x41, 0xD8, 0xCE, 0x3A, 0xEB, 0x04, 0x5A, 0x8C, 0x4D, 0x03, 0x9F, 0x31, 0xDC, 0x4E, 0x37, 0xEF, 0x7B, 0x42, 0x02, 0x19, 0x6A, 0x33, 0x60, 0xEF, 0xB9, 0x01, 0x11, 0xAC, 0x82, 0x10, 0xFD, 0x79, 0xD8, 0x2D, 0x5F, 0x42, 0xDE, 0xEC, 0x38, 0x79, 0xF6, 0x70, 0x84, 0x5A, 0xA8, 0x83, 0x58, 0xEF, 0x57, 0x2A, 0x04, 0x1E, 0x9B, 0xAF, 0xB3, 0xCC, 0x67, 0x62, 0xD1, 0x9B, 0xB0, 0xA4, 0x3C, 0x16, 0xB8, 0x0B, 0xC1, 0x7B, 0xE9, 0x39, 0x96, 0x32, 0xF5, 0xC4, 0xA0, 0xAB, 0xE8, 0xEA, 0x2F, 0x2D, 0x83, 0xF4, 0x8C, 0x62, 0xA3, 0x03, 0xDC, 0x6E, 0xAD, 0x9C, 0x46, 0x56, 0xD6, 0xF5, 0xDD, 0xB1, 0x95, 0x47, 0xE9, 0xAB, 0x40, 0x28, 0x87, 0x2B, 0x97, 0x42, 0x1A, 0x71, 0x9F, 0xB7, 0x7D, 0x45, 0x4A, 0x2B, 0xF6, 0xF7, 0xA8, 0x01, 0x14, 0x40, 0x77, 0x14, 0x49, 0x2B, 0x5D, 0x84, 0xA5, 0xC4, 0xA8, 0x10, 0xCD, 0x4B, 0x85, 0x34, 0x58, 0x74, 0x99, 0xD2, 0x44, 0x26, 0x37, 0xC7, 0x7A, 0x7A, 0x60, 0x85, 0x77, 0x73, 0xE9, 0x75, 0xB1, 0x6B, 0xDA, 0x43, 0x02, 0xAD, 0xD2, 0xC6, 0x7F, 0x53, 0xC4, 0xD3, 0x0F, 0x1D, 0xA0, 0x6F, 0xD8, 0x3B, 0xAF, 0xFF, 0x94, 0xF6, 0x27, 0x27, 0x7A, 0xEF, 0xF3, 0x96, 0xA5, 0x29, 0x4A, 0x47, 0xB1, 0x09, 0x2D, 0x34, 0xF5
|
||||
};
|
||||
|
||||
// EC APP
|
||||
static const unsigned char ecapp_4_prod_hdrpub[0x100] = // ecapp_4_prod_hdrpub
|
||||
{
|
||||
0xE1, 0xF2, 0xF8, 0x92, 0xEC, 0x5D, 0xD9, 0xB2, 0x38, 0xCE, 0x52, 0x72, 0x10, 0x3A, 0x51, 0xB2, 0x47, 0xD9, 0xC7, 0x00, 0xF9, 0xEB, 0xE2, 0x1E, 0xE8, 0x53, 0x2F, 0xFF, 0xB0, 0x0D, 0x9E, 0x1B, 0x21, 0x48, 0x0B, 0xBF, 0x53, 0x48, 0x93, 0x9E, 0x20, 0x55, 0xF2, 0x8F, 0xFE, 0x5E, 0x0D, 0xE6, 0xBF, 0xDD, 0xF5, 0xE6, 0xDF, 0x95, 0xA6, 0x5B, 0x38, 0x81, 0x49, 0x1E, 0xE9, 0x77, 0xB1, 0x96, 0xEA, 0xAA, 0x83, 0x18, 0x09, 0x2F, 0x77, 0x59, 0x16, 0x0B, 0xA9, 0xF1, 0xE8, 0xE8, 0x3A, 0x05, 0xEA, 0x35, 0x4F, 0x1D, 0xD4, 0xF9, 0xC5, 0x1A, 0xA2, 0x9E, 0xF7, 0xBD, 0x3B, 0x90, 0xDA, 0x80, 0xA9, 0xA3, 0xED, 0xFC, 0xE3, 0xBF, 0x7A, 0xF1, 0x43, 0x67, 0x5F, 0x35, 0x24, 0xD1, 0x4B, 0xCF, 0x1F, 0x59, 0xF5, 0xF4, 0x5E, 0x88, 0xDE, 0x3D, 0x19, 0xDD, 0x5E, 0x04, 0xB2, 0x39, 0xB3, 0x29, 0x32, 0xBA, 0xA3, 0x1C, 0x18, 0x75, 0x01, 0xE0, 0xC9, 0x22, 0x23, 0xA1, 0x95, 0x04, 0xA6, 0x0F, 0xFB, 0x5D, 0x25, 0xC2, 0x88, 0x21, 0x5F, 0xFD, 0x13, 0xFE, 0x9F, 0x06, 0xE6, 0x5E, 0x53, 0x69, 0x1A, 0x15, 0xD0, 0xAB, 0xBE, 0x16, 0xC5, 0x01, 0x52, 0xEA, 0x87, 0x5F, 0xFE, 0xE6, 0xC3, 0xD1, 0x4F, 0xB9, 0xC3, 0x6B, 0xBD, 0x7D, 0x4E, 0x1D, 0xA9, 0xCD, 0xD8, 0x89, 0x1B, 0x0E, 0x64, 0x97, 0x57, 0x7E, 0x23, 0xF4, 0x85, 0xD0, 0xE9, 0x68, 0x00, 0xBF, 0x7E, 0x8B, 0xB2, 0x42, 0xED, 0x9B, 0xDD, 0xD8, 0x62, 0x13, 0x26, 0x93, 0xF8, 0x66, 0x0B, 0x32, 0x30, 0x8A, 0x9C, 0xF0, 0x7A, 0x7E, 0xD2, 0x04, 0x5D, 0xF1, 0xF2, 0xB2, 0x4A, 0xF2, 0x18, 0xF4, 0xAF, 0xA4, 0x34, 0x06, 0xE7, 0x09, 0x77, 0x01, 0x8F, 0xEE, 0x17, 0x27, 0x89, 0x9B, 0xF0, 0x76, 0x00, 0x25, 0x01, 0x09, 0xC1, 0x51
|
||||
};
|
||||
|
||||
static const unsigned char ecapp_4_prod_acexsig[0x100] = // ecapp_4_prod_acexsig
|
||||
{
|
||||
0x6F, 0x5C, 0xA2, 0xD4, 0xDB, 0x21, 0x69, 0x54, 0xFE, 0x63, 0x55, 0x4C, 0x18, 0x86, 0xFF, 0x47, 0x73, 0x9B, 0x3A, 0x6B, 0xF3, 0x63, 0x47, 0x7E, 0x76, 0x86, 0x3B, 0xF1, 0xC6, 0x05, 0xE4, 0x4B, 0x8B, 0x61, 0xF3, 0x06, 0x02, 0x9B, 0x1B, 0xD1, 0x48, 0xCC, 0x51, 0xAF, 0x78, 0xE5, 0x58, 0xEE, 0xC4, 0x93, 0x83, 0xC2, 0xC9, 0x91, 0xD4, 0x4E, 0x00, 0xAD, 0xA8, 0x12, 0x40, 0x77, 0x20, 0xF8, 0xED, 0x11, 0xC1, 0x1D, 0x71, 0x14, 0x75, 0x1D, 0xB6, 0x89, 0xCC, 0xE1, 0x38, 0x3B, 0x8E, 0xAD, 0xA5, 0x17, 0x88, 0x90, 0xC1, 0xBE, 0x95, 0xBB, 0x0F, 0x0B, 0x12, 0xF9, 0x9E, 0xA9, 0x4F, 0x16, 0x34, 0x06, 0x2D, 0xFD, 0x1B, 0x51, 0x92, 0xE1, 0xD3, 0x7D, 0x6B, 0x31, 0xF0, 0xB4, 0xC0, 0x75, 0x91, 0x75, 0x2A, 0x0C, 0x99, 0x46, 0x2F, 0x4B, 0x34, 0xF3, 0x72, 0x10, 0x04, 0x23, 0x62, 0xC8, 0x94, 0xAD, 0x06, 0xC7, 0x69, 0x2A, 0x78, 0x3A, 0xCE, 0x8B, 0xE0, 0x16, 0x7D, 0x28, 0x35, 0xB2, 0xE1, 0x71, 0x49, 0x1C, 0x55, 0xD7, 0xA8, 0x6D, 0xCB, 0xA6, 0xF3, 0xB9, 0x35, 0xEA, 0x9D, 0xB0, 0x04, 0xE8, 0xB5, 0xEC, 0x15, 0xC6, 0xB1, 0x01, 0x69, 0xFB, 0x01, 0x87, 0x58, 0x83, 0xCC, 0xF5, 0x91, 0xC3, 0x3C, 0x2D, 0x7E, 0xAF, 0x43, 0xB9, 0xCD, 0x95, 0x20, 0xF9, 0x8F, 0x6F, 0x39, 0xDE, 0x95, 0x7B, 0x3F, 0xAD, 0x56, 0xF3, 0x07, 0xA3, 0x52, 0x12, 0x0F, 0x56, 0xA4, 0xF7, 0xAC, 0x55, 0xC2, 0x2F, 0x01, 0x0E, 0xFD, 0x26, 0xC9, 0x06, 0x8B, 0xCB, 0x6A, 0x4A, 0xE3, 0xF4, 0x58, 0x04, 0xAB, 0x64, 0x02, 0x99, 0xB9, 0xC5, 0xDA, 0x1F, 0x96, 0xEA, 0xEE, 0xB0, 0x33, 0xFD, 0xE9, 0x74, 0x90, 0x48, 0x7B, 0x88, 0xDE, 0x72, 0x57, 0x4C, 0x69, 0x47, 0x89, 0x03, 0xD6, 0x6B, 0x22, 0xFF
|
||||
};
|
||||
|
||||
/* SDK 7 (7.1.0) */
|
||||
// APP
|
||||
static const unsigned char app_7_prod_hdrpub[0x100] =
|
||||
{
|
||||
0x9B, 0x3B, 0x52, 0x2D, 0x61, 0xF5, 0x0D, 0x14, 0x96, 0x09, 0x7A, 0x66, 0xC9, 0x86, 0x4C, 0x51, 0x61, 0x7D, 0xF8, 0x9B, 0xFD, 0xB0, 0x3E, 0x44, 0xC5, 0x0D, 0xC2, 0x6B, 0x6C, 0x66, 0x63, 0x3E, 0xE7, 0xC8, 0x04, 0xCB, 0x06, 0xC8, 0x35, 0xC5, 0x6D, 0xDB, 0x38, 0x36, 0xC5, 0x54, 0x32, 0xF0, 0x60, 0x11, 0x44, 0x9F, 0xD9, 0xFA, 0x6A, 0x43, 0xE1, 0x79, 0x56, 0xBF, 0xCF, 0xDD, 0xA8, 0x35, 0x15, 0x23, 0x51, 0xF9, 0x4B, 0xDA, 0x1A, 0xD9, 0x9D, 0x28, 0xF6, 0xCC, 0x1D, 0x53, 0x00, 0xC0, 0x3C, 0x13, 0x32, 0xBC, 0x7F, 0x75, 0x82, 0xCD, 0x79, 0xEF, 0x65, 0xBC, 0xCA, 0x98, 0x31, 0x0A, 0x7B, 0xEF, 0x18, 0xD8, 0xF3, 0x8D, 0x3A, 0x10, 0x22, 0xA0, 0xF2, 0x8D, 0xA5, 0xA8, 0xBE, 0xA0, 0x62, 0xEC, 0xE2, 0xC7, 0x6C, 0xCF, 0x06, 0x6B, 0xA7, 0xB5, 0xB8, 0x8C, 0xD5, 0x8E, 0xEF, 0xE3, 0x42, 0xC9, 0xAD, 0x44, 0x46, 0x3A, 0x4E, 0x77, 0x63, 0x02, 0xB4, 0x4E, 0xB4, 0x42, 0x65, 0x1D, 0x68, 0x98, 0x37, 0x7A, 0x27, 0x87, 0x31, 0xBE, 0x48, 0xFA, 0x4E, 0xD3, 0x85, 0xA6, 0xD6, 0xD2, 0x2D, 0xCD, 0x10, 0xC9, 0x13, 0x59, 0x12, 0x48, 0x14, 0x67, 0x3E, 0x40, 0xD3, 0xF8, 0x60, 0xA0, 0xBD, 0x77, 0x31, 0x76, 0x78, 0x85, 0x55, 0x53, 0x16, 0xF1, 0xB9, 0xFF, 0x7F, 0x3D, 0x9A, 0xF1, 0x33, 0x1E, 0x67, 0x8F, 0x6B, 0x4A, 0x7A, 0x79, 0x54, 0x8B, 0x43, 0xB5, 0xC2, 0xAF, 0xB8, 0x75, 0x11, 0xDE, 0x4D, 0x34, 0x6A, 0xD6, 0x5A, 0x3B, 0x48, 0x1F, 0x41, 0x9D, 0xF4, 0x58, 0x90, 0x67, 0xA8, 0x71, 0xD4, 0x09, 0x67, 0xF7, 0x55, 0xEF, 0xD3, 0x7C, 0x7D, 0x2F, 0x76, 0x84, 0x70, 0x6E, 0xAA, 0x75, 0x7D, 0xA9, 0x95, 0x42, 0xEF, 0x28, 0x29, 0x48, 0xCD, 0x79, 0xA8, 0x16, 0xB6, 0xB5
|
||||
};
|
||||
|
||||
static const unsigned char app_7_prod_acexsig[0x100] =
|
||||
{
|
||||
0x06, 0xDD, 0x68, 0x17, 0xAA, 0x40, 0x3A, 0x75, 0xD2, 0xCF, 0xA2, 0x5A, 0xC8, 0x1B, 0x74, 0x9D, 0x91, 0xCD, 0x38, 0x4E, 0xCA, 0x19, 0x60, 0x8E, 0x39, 0x71, 0x6C, 0xB9, 0xF9, 0x9F, 0x68, 0x44, 0xCF, 0x33, 0x94, 0x54, 0x72, 0xCC, 0xC6, 0x33, 0x96, 0x9F, 0x12, 0x07, 0xE9, 0x38, 0x87, 0x70, 0x11, 0x51, 0xFD, 0xBF, 0xD9, 0x2D, 0xFA, 0x3F, 0x70, 0x42, 0x75, 0x39, 0xE3, 0x97, 0x85, 0xAF, 0x7B, 0xC5, 0x87, 0x9B, 0x0B, 0xF9, 0xE4, 0x1C, 0xC5, 0x6B, 0x44, 0x2A, 0x10, 0x14, 0x86, 0xAA, 0xFE, 0x9E, 0x5B, 0x1D, 0x15, 0xBA, 0x8C, 0x34, 0xA2, 0xAF, 0x14, 0xD0, 0xD4, 0x0E, 0x7B, 0x3A, 0xD5, 0x3C, 0x53, 0xDB, 0x7C, 0xBE, 0x44, 0x58, 0x79, 0x42, 0x23, 0x3A, 0x77, 0xA3, 0x2C, 0xB9, 0xEB, 0x62, 0x19, 0x94, 0x2B, 0xA0, 0x67, 0x94, 0xC6, 0xB2, 0x90, 0xC6, 0x61, 0xFD, 0x43, 0xEC, 0xEA, 0x27, 0x7E, 0xA6, 0xB1, 0xED, 0xA9, 0x67, 0xED, 0x56, 0x91, 0x90, 0xF9, 0x32, 0x4E, 0xC3, 0x29, 0x5A, 0x84, 0x4C, 0xAB, 0x99, 0x75, 0x40, 0x8E, 0x19, 0xD9, 0x12, 0xD1, 0x06, 0x2D, 0xD0, 0x2C, 0xD9, 0x6C, 0x41, 0x35, 0x64, 0xDB, 0x80, 0x63, 0xB2, 0x01, 0xF8, 0x29, 0xAB, 0xF5, 0x70, 0x79, 0x4E, 0x0F, 0xFA, 0x23, 0x20, 0x2E, 0x04, 0x75, 0x48, 0x15, 0x9B, 0x71, 0xD5, 0x85, 0x09, 0x67, 0x7D, 0xAC, 0x6A, 0xFA, 0xC0, 0x16, 0xAF, 0x58, 0x26, 0xCD, 0x6F, 0x1F, 0xB8, 0xF5, 0x8D, 0xD1, 0x7D, 0x3D, 0x70, 0x2F, 0x08, 0xB8, 0x23, 0x61, 0x24, 0xAE, 0x94, 0x31, 0xA3, 0xBD, 0x1E, 0x18, 0xD7, 0x82, 0x92, 0xDD, 0x11, 0x79, 0x7D, 0x1F, 0xEC, 0x03, 0x08, 0x82, 0xCC, 0x52, 0x62, 0xC9, 0x27, 0x2D, 0x08, 0xD5, 0x6B, 0x4E, 0x86, 0x2E, 0x3F, 0x50, 0x5C, 0xA3, 0xC1, 0xDF, 0xF5
|
||||
};
|
||||
#endif
|
||||
+135
-43
@@ -1,47 +1,31 @@
|
||||
#ifndef _KEYS_DEBUG_H_
|
||||
#define _KEYS_DEBUG_H_
|
||||
#ifndef _DPKI_H_
|
||||
#define _DPKI_H_
|
||||
|
||||
static const unsigned char system_fixed_aesKey[16] = //system_fixed_aesKey
|
||||
#ifdef PKI_LEGACY
|
||||
#include "dpki_legacy.h"
|
||||
#endif
|
||||
|
||||
// AES KEYS
|
||||
static const unsigned char ctr_unfixed_ncch_keyX_dpki[2][16] = // Dummy
|
||||
{
|
||||
0x52, 0x7C, 0xE6, 0x30, 0xA9, 0xCA, 0x30, 0x5F,
|
||||
0x36, 0x96, 0xF3, 0xCD, 0xE9, 0x54, 0x19, 0x4B
|
||||
{0x82, 0xAD, 0xED, 0xC7, 0xBA, 0x0A, 0x3F, 0x3D, 0x5F, 0xDD, 0x30, 0x0F, 0x0E, 0x9B, 0xE1, 0x5B} , // Normal
|
||||
{0xE5, 0x70, 0x6F, 0x65, 0x6A, 0xF4, 0xD9, 0x3F, 0x1E, 0x2F, 0x29, 0x3F, 0x16, 0x15, 0x4E, 0xD8} , // 7.X new Crypto
|
||||
};
|
||||
|
||||
static const unsigned char ctr_aes_common_key_dev0[16] = //ctr_aes_common_key_dev0
|
||||
static const unsigned char ctr_fixed_ncch_key_dpki[2][16] =
|
||||
{
|
||||
0x55, 0xA3, 0xF8, 0x72, 0xBD, 0xC8, 0x0C, 0x55,
|
||||
0x5A, 0x65, 0x43, 0x81, 0x13, 0x9E, 0x15, 0x3B
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} , // NormalFixedKey
|
||||
{0x52, 0x7C, 0xE6, 0x30, 0xA9, 0xCA, 0x30, 0x5F, 0x36, 0x96, 0xF3, 0xCD, 0xE9, 0x54, 0x19, 0x4B} , // systemFixedKey
|
||||
};
|
||||
|
||||
static const unsigned char ctr_aes_common_key_dev1[16] = //ctr_aes_common_key_dev1
|
||||
static const unsigned char ctr_common_etd_key_dpki[2][16] =
|
||||
{
|
||||
0x44, 0x34, 0xED, 0x14, 0x82, 0x0C, 0xA1, 0xEB,
|
||||
0xAB, 0x82, 0xC1, 0x6E, 0x7B, 0xEF, 0x0C, 0x25
|
||||
};
|
||||
|
||||
static const unsigned char common_dpki_aesKey[16] = //common_dpki_aesKey a.k.a. DSi DevCommonKey
|
||||
{
|
||||
0xA1, 0x60, 0x4A, 0x6A, 0x71, 0x23, 0xB5, 0x29,
|
||||
0xAE, 0x8B, 0xEC, 0x32, 0xC8, 0x16, 0xFC, 0xAA
|
||||
};
|
||||
|
||||
//ECC Keys
|
||||
|
||||
static const unsigned char xs_dpki_eccPubKey[60] = //xs_dpki_eccPubKey
|
||||
{
|
||||
0x01, 0xD5, 0xA2, 0x3C, 0xE8, 0xE9, 0xDF, 0x8C,
|
||||
0x0A, 0xA5, 0xAA, 0xE1, 0x76, 0xE1, 0x24, 0x7C,
|
||||
0x90, 0x97, 0xA6, 0xFE, 0x2A, 0xD3, 0x8C, 0xB4,
|
||||
0xDE, 0x74, 0x32, 0xDE, 0x5B, 0x84, 0x01, 0xAC,
|
||||
0xB2, 0x13, 0x71, 0x9D, 0x4B, 0x9C, 0xEB, 0xD4,
|
||||
0x13, 0xC2, 0x27, 0x66, 0xC5, 0x5F, 0x83, 0x97,
|
||||
0xC4, 0x83, 0xA3, 0x9E, 0x3B, 0xFC, 0xE8, 0xA9,
|
||||
0xB5, 0x10, 0x3A, 0x7B
|
||||
{0x55, 0xA3, 0xF8, 0x72, 0xBD, 0xC8, 0x0C, 0x55, 0x5A, 0x65, 0x43, 0x81, 0x13, 0x9E, 0x15, 0x3B} , // 0 - eShop Titles
|
||||
{0x44, 0x34, 0xED, 0x14, 0x82, 0x0C, 0xA1, 0xEB, 0xAB, 0x82, 0xC1, 0x6E, 0x7B, 0xEF, 0x0C, 0x25} , // 1 - System Titles
|
||||
};
|
||||
|
||||
//RSA Keys
|
||||
|
||||
static const unsigned char dev_cert_root_rsa_pubk[0x200] =
|
||||
static const unsigned char root_dpki_rsa_pub[0x200] =
|
||||
{
|
||||
0xD0, 0x1F, 0xE1, 0x00, 0xD4, 0x35, 0x56, 0xB2,
|
||||
0x4B, 0x56, 0xDA, 0xE9, 0x71, 0xB5, 0xA5, 0xD3,
|
||||
@@ -109,7 +93,7 @@ static const unsigned char dev_cert_root_rsa_pubk[0x200] =
|
||||
0x65, 0x9A, 0xC7, 0x39, 0x5A, 0xB4, 0xF3, 0x29
|
||||
};
|
||||
|
||||
static const unsigned char cpA_dpki_rsa_privExp[256] = //cpA_dpki_rsa_privExp
|
||||
static const unsigned char cpA_dpki_rsa_priv[0x100] =
|
||||
{
|
||||
0x28, 0xCE, 0xDC, 0x39, 0x02, 0x7F, 0x3E, 0x8E,
|
||||
0xAA, 0xB7, 0x59, 0x11, 0xE0, 0x68, 0xBF, 0x80,
|
||||
@@ -145,7 +129,7 @@ static const unsigned char cpA_dpki_rsa_privExp[256] = //cpA_dpki_rsa_privExp
|
||||
0x1F, 0x82, 0xB8, 0x91, 0x71, 0x11, 0xB2, 0xC1
|
||||
};
|
||||
|
||||
static const unsigned char cpA_dpki_rsa_pubMod[256] = //cpA_dpki_rsa_pubMod
|
||||
static const unsigned char cpA_dpki_rsa_pub[0x100] =
|
||||
{
|
||||
0xAA, 0x7F, 0x93, 0x80, 0x28, 0x9B, 0xE8, 0x98,
|
||||
0x63, 0x10, 0x7A, 0xE1, 0x0C, 0x59, 0x2C, 0x2F,
|
||||
@@ -181,7 +165,7 @@ static const unsigned char cpA_dpki_rsa_pubMod[256] = //cpA_dpki_rsa_pubMod
|
||||
0x3D, 0xE2, 0x3D, 0x96, 0xE7, 0x09, 0xD9, 0x77
|
||||
};
|
||||
|
||||
static const unsigned char xs9_dpki_rsa_privExp[256] = //xs9_dpki_rsa_privExp
|
||||
static const unsigned char xs9_dpki_rsa_priv[0x100] =
|
||||
{
|
||||
0x74, 0xCB, 0xCF, 0x1E, 0xD0, 0x2D, 0xD4, 0xF9,
|
||||
0xE0, 0x05, 0xCE, 0x9C, 0x66, 0x3D, 0xE3, 0x62,
|
||||
@@ -217,7 +201,7 @@ static const unsigned char xs9_dpki_rsa_privExp[256] = //xs9_dpki_rsa_privExp
|
||||
0x89, 0xC5, 0x7D, 0x89, 0xDE, 0x2B, 0x4E, 0x01
|
||||
};
|
||||
|
||||
static const unsigned char xs9_dpki_rsa_pubMod[256] = //xs9_dpki_rsa_pubMod
|
||||
static const unsigned char xs9_dpki_rsa_pub[0x100] =
|
||||
{
|
||||
0xC0, 0x84, 0x4C, 0xEB, 0x7E, 0xB0, 0xCF, 0xF0,
|
||||
0xAE, 0xB7, 0x77, 0x69, 0x85, 0x93, 0xE4, 0x99,
|
||||
@@ -253,7 +237,7 @@ static const unsigned char xs9_dpki_rsa_pubMod[256] = //xs9_dpki_rsa_pubMod
|
||||
0xB8, 0x78, 0x87, 0x97, 0x7F, 0x66, 0x2C, 0x5F
|
||||
};
|
||||
|
||||
static const unsigned char DevNcsdCfa_privExp[256] = //DevNcsdCfa_privExp
|
||||
static const unsigned char dev_ncsd_cfa_priv[0x100] =
|
||||
{
|
||||
0x32, 0x36, 0x43, 0xC2, 0xB3, 0x1A, 0x7E, 0x13,
|
||||
0xAB, 0xA2, 0xB6, 0x8B, 0x4F, 0x05, 0xA7, 0xA6,
|
||||
@@ -289,7 +273,7 @@ static const unsigned char DevNcsdCfa_privExp[256] = //DevNcsdCfa_privExp
|
||||
0xE8, 0xD9, 0x2C, 0x2A, 0x21, 0x69, 0xE4, 0xC1
|
||||
};
|
||||
|
||||
static const unsigned char DevNcsdCfa_pubMod[256] = //DevNcsdCfa_pubMod
|
||||
static const unsigned char dev_ncsd_cfa_pub[0x100] =
|
||||
{
|
||||
0xB9, 0x0C, 0xC4, 0xC6, 0x78, 0xF8, 0x6E, 0x30,
|
||||
0x05, 0x28, 0xC1, 0xCB, 0xD2, 0xCF, 0xA7, 0x80,
|
||||
@@ -325,7 +309,7 @@ static const unsigned char DevNcsdCfa_pubMod[256] = //DevNcsdCfa_pubMod
|
||||
0x3C, 0x38, 0x24, 0xBE, 0xF5, 0x8A, 0xB5, 0xF5
|
||||
};
|
||||
|
||||
static const unsigned char AccessDesc_privExp[256] = //AccessDesc_privExp
|
||||
static const unsigned char dev_acex_priv[0x100] =
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
@@ -361,7 +345,7 @@ static const unsigned char AccessDesc_privExp[256] = //AccessDesc_privExp
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char AccessDesc_pubMod[256] = //AccessDesc_pubMod
|
||||
static const unsigned char dev_acex_pub[0x100] =
|
||||
{
|
||||
0xF4, 0x3C, 0x45, 0x82, 0xFB, 0xF8, 0x90, 0x5D,
|
||||
0x07, 0x02, 0x9F, 0x2A, 0x98, 0x8B, 0x63, 0xB7,
|
||||
@@ -397,7 +381,79 @@ static const unsigned char AccessDesc_pubMod[256] = //AccessDesc_pubMod
|
||||
0x29, 0x78, 0xBF, 0x2A, 0x3C, 0x3B, 0xB6, 0xB1
|
||||
};
|
||||
|
||||
static const unsigned char CrrDevKey_privExp[256] = //CrrDevKey_privExp
|
||||
static const unsigned char dev_crr_cert_pub[0x100] =
|
||||
{
|
||||
0xC5, 0xF7, 0x09, 0x80, 0x5F, 0xDA, 0xDC, 0xBD,
|
||||
0x46, 0x07, 0x52, 0xAA, 0x6D, 0xCD, 0x72, 0xB2,
|
||||
0x50, 0x09, 0x77, 0x47, 0x8A, 0x4F, 0x09, 0x2A,
|
||||
0xE2, 0x91, 0xB4, 0x5F, 0x04, 0x97, 0x51, 0x75,
|
||||
0xC9, 0x19, 0x6F, 0x95, 0xBB, 0x23, 0x14, 0x7D,
|
||||
0x34, 0xDF, 0x77, 0x78, 0x07, 0xE8, 0xD1, 0x10,
|
||||
0x11, 0xAF, 0xCE, 0x02, 0xB8, 0x73, 0xA9, 0xFB,
|
||||
0x64, 0xB7, 0x65, 0x87, 0xE5, 0x67, 0xDD, 0x67,
|
||||
0x37, 0x75, 0xFD, 0x0F, 0xE2, 0x97, 0xBC, 0x79,
|
||||
0xA8, 0xCC, 0xF9, 0xFA, 0x18, 0xB2, 0x62, 0x4D,
|
||||
0xF7, 0x53, 0x6B, 0x9C, 0x0E, 0x1A, 0xAB, 0x90,
|
||||
0xE6, 0x52, 0x86, 0xC8, 0x1C, 0x92, 0x2C, 0x61,
|
||||
0x53, 0xA9, 0x01, 0xDA, 0x43, 0x93, 0xD0, 0x42,
|
||||
0x2E, 0xDD, 0xD5, 0x4C, 0x8C, 0x4C, 0xE8, 0x91,
|
||||
0x56, 0xEC, 0xEE, 0x12, 0x70, 0x0B, 0x64, 0xF0,
|
||||
0x0A, 0xD6, 0xAF, 0xF8, 0x60, 0xC2, 0xA8, 0x26,
|
||||
0x7A, 0xC8, 0xBA, 0x55, 0x9A, 0xA1, 0x44, 0xFD,
|
||||
0x09, 0x47, 0x26, 0xA0, 0xC1, 0x99, 0x9E, 0xF1,
|
||||
0x24, 0xDF, 0xA3, 0xC2, 0xBB, 0xFF, 0x07, 0x45,
|
||||
0xD9, 0xD6, 0xA4, 0xC0, 0xFF, 0x6C, 0x6C, 0x78,
|
||||
0x7B, 0x6D, 0x70, 0x8C, 0x74, 0x44, 0xB0, 0x95,
|
||||
0xE6, 0xC6, 0x66, 0x5E, 0x7E, 0xBE, 0x71, 0xC5,
|
||||
0x91, 0x34, 0x73, 0xA7, 0xD4, 0x4C, 0x0D, 0xFC,
|
||||
0xA9, 0x21, 0x49, 0x94, 0x92, 0xA1, 0x6A, 0x4D,
|
||||
0x30, 0xA3, 0xD6, 0x9F, 0x6C, 0x60, 0x40, 0x0C,
|
||||
0xEE, 0xEB, 0xF8, 0x99, 0x22, 0xE1, 0x6F, 0xFC,
|
||||
0x3C, 0x96, 0x23, 0xAA, 0x11, 0x34, 0x00, 0x4E,
|
||||
0xFC, 0x2D, 0x60, 0x41, 0x45, 0xE3, 0x5D, 0x78,
|
||||
0x06, 0xB1, 0xF1, 0xC3, 0x07, 0xB9, 0xD3, 0x47,
|
||||
0xD0, 0xF1, 0x8C, 0x26, 0x33, 0x1F, 0x6B, 0x46,
|
||||
0xDD, 0xF3, 0xE3, 0x84, 0x64, 0xA7, 0xF1, 0x53,
|
||||
0x11, 0xE1, 0x53, 0x4E, 0x99, 0xDB, 0xAC, 0x53
|
||||
};
|
||||
|
||||
static const unsigned char dev_crr_cert[0x100] =
|
||||
{
|
||||
0x96, 0x5C, 0xBE, 0x5E, 0xEF, 0x08, 0x0B, 0x29,
|
||||
0xEF, 0x95, 0x12, 0xA4, 0x80, 0x36, 0x47, 0xD5,
|
||||
0x8F, 0xEC, 0xD0, 0xCB, 0x00, 0x4C, 0x29, 0xDC,
|
||||
0x5E, 0x87, 0xCF, 0x87, 0x66, 0x4B, 0x94, 0xDE,
|
||||
0xF0, 0xF6, 0x95, 0x19, 0x13, 0xF4, 0x29, 0xC7,
|
||||
0x89, 0x55, 0x91, 0x2E, 0x3B, 0x17, 0x1C, 0x86,
|
||||
0x61, 0x03, 0x03, 0xDC, 0x6A, 0x3E, 0x33, 0xD4,
|
||||
0x7A, 0xEA, 0xF9, 0x14, 0x82, 0x50, 0xF9, 0x3F,
|
||||
0xAD, 0xCF, 0x9F, 0xB8, 0xE0, 0xAD, 0xF6, 0x40,
|
||||
0x0F, 0xE6, 0x41, 0x7D, 0x18, 0xB4, 0xC2, 0x1A,
|
||||
0x1F, 0xA6, 0x2F, 0x51, 0x40, 0x5F, 0x0A, 0x4B,
|
||||
0x57, 0x4B, 0x73, 0xC2, 0x6A, 0xB9, 0x73, 0x18,
|
||||
0x5A, 0x9E, 0xC3, 0x90, 0x7D, 0xCC, 0x5B, 0xEC,
|
||||
0x46, 0x6D, 0x93, 0x09, 0xB6, 0xF0, 0x84, 0x64,
|
||||
0x46, 0x12, 0x77, 0x7C, 0x87, 0x25, 0xEB, 0x4C,
|
||||
0xAE, 0x83, 0xB8, 0x25, 0x6E, 0xF7, 0x7D, 0x45,
|
||||
0xDF, 0xF6, 0x4A, 0x32, 0x9B, 0x8E, 0x32, 0xC6,
|
||||
0xCF, 0x63, 0x37, 0x92, 0x7D, 0x01, 0xDD, 0xE9,
|
||||
0x71, 0x37, 0x0C, 0x2E, 0xB7, 0x83, 0xB7, 0x7C,
|
||||
0x43, 0x37, 0x20, 0x34, 0xF1, 0xAF, 0x78, 0x4A,
|
||||
0xB0, 0x84, 0xE0, 0x4C, 0x67, 0x54, 0xA8, 0x75,
|
||||
0x12, 0xE5, 0x27, 0x38, 0x45, 0xFF, 0x49, 0x9D,
|
||||
0xF3, 0xFC, 0x3F, 0xCE, 0x73, 0x44, 0xE3, 0x28,
|
||||
0xD0, 0xD6, 0x00, 0x1F, 0x46, 0xF9, 0x64, 0x3B,
|
||||
0xDC, 0xEE, 0x30, 0xA8, 0x63, 0x05, 0xB0, 0xF1,
|
||||
0xA6, 0x4B, 0x21, 0x34, 0x2A, 0xEE, 0xBA, 0x1C,
|
||||
0x89, 0x0B, 0x80, 0xB8, 0x00, 0xC7, 0x40, 0xCB,
|
||||
0x66, 0x69, 0x44, 0x27, 0x01, 0xAC, 0x08, 0xC3,
|
||||
0x97, 0xC5, 0x37, 0xE4, 0x8B, 0xAA, 0x41, 0xB1,
|
||||
0xEE, 0x48, 0xE0, 0xA7, 0xD6, 0x6F, 0x8A, 0xF5,
|
||||
0x40, 0x90, 0xD4, 0x2D, 0x81, 0xD4, 0xED, 0x9D,
|
||||
0xCA, 0x03, 0xFE, 0x35, 0xB3, 0x66, 0xAF, 0x82
|
||||
};
|
||||
|
||||
static const unsigned char dev_crr_priv[0x100] =
|
||||
{
|
||||
0x8D, 0x27, 0x29, 0x6B, 0xC7, 0xA7, 0xED, 0xCD,
|
||||
0x94, 0x2D, 0x36, 0x5E, 0x86, 0xA8, 0x26, 0xE7,
|
||||
@@ -433,7 +489,7 @@ static const unsigned char CrrDevKey_privExp[256] = //CrrDevKey_privExp
|
||||
0xF7, 0x01, 0x65, 0xF6, 0x2D, 0x36, 0x6E, 0x71
|
||||
};
|
||||
|
||||
static const unsigned char CrrDevKey_pubMod[256] = //CrrDevKey_pubMod
|
||||
static const unsigned char dev_crr_pub[0x100] =
|
||||
{
|
||||
0xE2, 0xAD, 0xA6, 0xEA, 0xCA, 0xA3, 0xE8, 0xCC,
|
||||
0xA9, 0x70, 0x1D, 0x2E, 0x23, 0x4B, 0xC6, 0x55,
|
||||
@@ -469,6 +525,42 @@ static const unsigned char CrrDevKey_pubMod[256] = //CrrDevKey_pubMod
|
||||
0xDA, 0x65, 0xE7, 0x6E, 0xEF, 0x2E, 0xF5, 0x67
|
||||
};
|
||||
|
||||
static const unsigned char dev_firm_pub[0x100] =
|
||||
{
|
||||
0xC1, 0x1E, 0x84, 0xE4, 0xDA, 0xD7, 0xED, 0xC8,
|
||||
0xA5, 0xD9, 0xCB, 0x0B, 0xE9, 0x3B, 0x9D, 0xBC,
|
||||
0x15, 0x69, 0xF7, 0x95, 0xF6, 0x8F, 0xB7, 0x91,
|
||||
0x24, 0x19, 0xBE, 0x8F, 0xFE, 0xBB, 0xC1, 0x1D,
|
||||
0x09, 0xF0, 0xE3, 0x78, 0xA2, 0x0C, 0xC0, 0x0B,
|
||||
0x8E, 0xCD, 0xBA, 0x0E, 0x69, 0x4C, 0x61, 0x4A,
|
||||
0xBD, 0x13, 0xEA, 0xE2, 0x23, 0xE4, 0x0B, 0x62,
|
||||
0x1F, 0x9B, 0x63, 0x1B, 0x31, 0x34, 0xB7, 0x12,
|
||||
0x73, 0x64, 0x6B, 0x4E, 0x60, 0x41, 0x0A, 0x3D,
|
||||
0x54, 0x86, 0xFA, 0x49, 0xEC, 0x2D, 0x77, 0xAD,
|
||||
0x1D, 0xBC, 0x48, 0xE7, 0xFB, 0x07, 0xEF, 0x48,
|
||||
0xC3, 0xBE, 0xC3, 0xD6, 0xE1, 0x5B, 0x3D, 0xCD,
|
||||
0x5E, 0x6B, 0x46, 0x08, 0x6A, 0x3A, 0x0E, 0xAE,
|
||||
0x25, 0x49, 0x44, 0xA5, 0x40, 0x0D, 0x94, 0x53,
|
||||
0x18, 0xA4, 0x8F, 0x57, 0x8E, 0xF4, 0xCD, 0xB4,
|
||||
0xD3, 0x4E, 0xE7, 0x15, 0x9B, 0x11, 0x95, 0x85,
|
||||
0x00, 0xC4, 0x92, 0x94, 0xB8, 0xBE, 0xFE, 0xCB,
|
||||
0xB7, 0x50, 0xA0, 0xBE, 0x8A, 0xF5, 0xFD, 0xC8,
|
||||
0x0E, 0x4B, 0xA9, 0x41, 0x13, 0x62, 0x48, 0xCD,
|
||||
0x1A, 0xF3, 0xC8, 0x6B, 0xA5, 0xA0, 0xDF, 0xF1,
|
||||
0x9D, 0x3D, 0xFD, 0xE4, 0xD1, 0x7C, 0x1F, 0x00,
|
||||
0x0D, 0x99, 0x72, 0x6B, 0xA3, 0x05, 0x7F, 0x86,
|
||||
0x38, 0xBE, 0x4D, 0x5E, 0xAB, 0x93, 0xDF, 0xF3,
|
||||
0xEE, 0xA1, 0x9F, 0x22, 0x50, 0xA8, 0x7F, 0x31,
|
||||
0xAA, 0x2B, 0x03, 0x71, 0x9B, 0x14, 0xC4, 0x30,
|
||||
0x88, 0x42, 0x6F, 0xD5, 0x2C, 0x7B, 0x03, 0x64,
|
||||
0x3B, 0x14, 0xEC, 0x46, 0x33, 0xCC, 0x2C, 0x95,
|
||||
0x9F, 0x5C, 0x7B, 0x83, 0xC5, 0x67, 0xDD, 0x7C,
|
||||
0xA1, 0x2D, 0xD6, 0xEC, 0x17, 0x0B, 0x23, 0xC7,
|
||||
0xB1, 0x9A, 0x72, 0xBA, 0x78, 0xCB, 0x39, 0x68,
|
||||
0x5C, 0xB6, 0xB4, 0x61, 0xE1, 0x98, 0xCF, 0x1D,
|
||||
0x69, 0xF9, 0xD7, 0xB0, 0xA0, 0x5E, 0x9C, 0xEB
|
||||
};
|
||||
|
||||
//Certificates
|
||||
static const unsigned char ca4_dpki_cert[0x400] =
|
||||
{
|
||||
+201
File diff suppressed because one or more lines are too long
@@ -21,7 +21,9 @@ ElfSegment** GetSegments(u16 *SegmentNum, ElfContext *elf, char **Names, u32 Nam
|
||||
int GetElfContext(ElfContext *elf, u8 *ElfFile);
|
||||
int GetElfSectionEntries(ElfContext *elf, u8 *ElfFile);
|
||||
int GetElfProgramEntries(ElfContext *elf, u8 *ElfFile);
|
||||
#ifdef DEBUG
|
||||
void PrintElfContext(ElfContext *elf, u8 *ElfFile);
|
||||
#endif
|
||||
int ReadElfHdr(ElfContext *elf, u8 *ElfFile);
|
||||
|
||||
int CreateElfSegments(ElfContext *elf, u8 *ElfFile);
|
||||
@@ -61,11 +63,13 @@ u64 GetELFProgramEntryAlignment(u16 Index, ElfContext *elf, u8 *ElfFile);
|
||||
int BuildExeFsCode(ncch_settings *ncchset)
|
||||
{
|
||||
int result = 0;
|
||||
if(ncchset->ComponentFilePtrs.plainregion){ // Import PlainRegion from file
|
||||
if(ncchset->options.IsCfa)
|
||||
return result;
|
||||
if(ncchset->componentFilePtrs.plainregion){ // Import PlainRegion from file
|
||||
result = ImportPlainRegionFromFile(ncchset);
|
||||
if(result) return result;
|
||||
}
|
||||
if(!ncchset->Options.IsBuildingCodeSection){ // Import ExeFs Code from file and return
|
||||
if(!ncchset->options.IsBuildingCodeSection){ // Import ExeFs Code from file and return
|
||||
result = ImportExeFsCodeBinaryFromFile(ncchset);
|
||||
return result;
|
||||
}
|
||||
@@ -74,9 +78,9 @@ int BuildExeFsCode(ncch_settings *ncchset)
|
||||
printf("[DEBUG] Import ELF\n");
|
||||
#endif
|
||||
/* Import ELF */
|
||||
u8 *ElfFile = malloc(ncchset->ComponentFilePtrs.elf_size);
|
||||
u8 *ElfFile = malloc(ncchset->componentFilePtrs.elfSize);
|
||||
if(!ElfFile) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
ReadFile_64(ElfFile,ncchset->ComponentFilePtrs.elf_size,0,ncchset->ComponentFilePtrs.elf);
|
||||
ReadFile_64(ElfFile,ncchset->componentFilePtrs.elfSize,0,ncchset->componentFilePtrs.elf);
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] Create ELF Context\n");
|
||||
@@ -90,17 +94,13 @@ int BuildExeFsCode(ncch_settings *ncchset)
|
||||
if(result) goto finish;
|
||||
|
||||
/* Setting Page Size */
|
||||
elf->PageSize = GetPageSize(ncchset);
|
||||
elf->pageSize = GetPageSize(ncchset);
|
||||
|
||||
if(!ncchset->ComponentFilePtrs.plainregion){
|
||||
if(!ncchset->componentFilePtrs.plainregion){
|
||||
result = ImportPlainRegionFromElf(elf,ElfFile,ncchset);
|
||||
if(result) goto finish;
|
||||
}
|
||||
|
||||
#ifdef ELF_DEBUG
|
||||
PrintElfContext(elf,ElfFile);
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
PrintElfContext(elf,ElfFile);
|
||||
#endif
|
||||
@@ -128,74 +128,74 @@ finish:
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] Free Segment Header/Sections\n");
|
||||
#endif
|
||||
for(int i = 0; i < elf->ActiveSegments; i++){
|
||||
for(int i = 0; i < elf->activeSegments; i++){
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] %d\n",i);
|
||||
#endif
|
||||
free(elf->Segments[i].Sections);
|
||||
free(elf->segments[i].sections);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] Free others\n");
|
||||
#endif
|
||||
free(ElfFile);
|
||||
free(elf->Sections);
|
||||
free(elf->ProgramHeaders);
|
||||
free(elf->Segments);
|
||||
free(elf->sections);
|
||||
free(elf->programHeaders);
|
||||
free(elf->segments);
|
||||
free(elf);
|
||||
return result;
|
||||
}
|
||||
|
||||
int ImportPlainRegionFromFile(ncch_settings *ncchset)
|
||||
{
|
||||
ncchset->Sections.PlainRegion.size = align_value(ncchset->ComponentFilePtrs.plainregion_size,ncchset->Options.MediaSize);
|
||||
ncchset->Sections.PlainRegion.buffer = malloc(ncchset->Sections.PlainRegion.size);
|
||||
if(!ncchset->Sections.PlainRegion.buffer) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
ReadFile_64(ncchset->Sections.PlainRegion.buffer,ncchset->ComponentFilePtrs.plainregion_size,0,ncchset->ComponentFilePtrs.plainregion);
|
||||
ncchset->sections.plainRegion.size = align_value(ncchset->componentFilePtrs.plainregionSize,ncchset->options.mediaSize);
|
||||
ncchset->sections.plainRegion.buffer = malloc(ncchset->sections.plainRegion.size);
|
||||
if(!ncchset->sections.plainRegion.buffer) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
ReadFile_64(ncchset->sections.plainRegion.buffer,ncchset->componentFilePtrs.plainregionSize,0,ncchset->componentFilePtrs.plainregion);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ImportExeFsCodeBinaryFromFile(ncch_settings *ncchset)
|
||||
{
|
||||
u32 size = ncchset->ComponentFilePtrs.code_size;
|
||||
u32 size = ncchset->componentFilePtrs.codeSize;
|
||||
u8 *buffer = malloc(size);
|
||||
if(!buffer) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
ReadFile_64(buffer,size,0,ncchset->ComponentFilePtrs.code);
|
||||
ReadFile_64(buffer,size,0,ncchset->componentFilePtrs.code);
|
||||
|
||||
ncchset->ExeFs_Sections.Code.size = ncchset->ComponentFilePtrs.code_size;
|
||||
ncchset->ExeFs_Sections.Code.buffer = malloc(ncchset->ExeFs_Sections.Code.size);
|
||||
if(!ncchset->ExeFs_Sections.Code.buffer) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
ReadFile_64(ncchset->ExeFs_Sections.Code.buffer,ncchset->ExeFs_Sections.Code.size,0,ncchset->ComponentFilePtrs.code);
|
||||
if(ncchset->Options.CompressCode){
|
||||
ncchset->exefsSections.code.size = ncchset->componentFilePtrs.codeSize;
|
||||
ncchset->exefsSections.code.buffer = malloc(ncchset->exefsSections.code.size);
|
||||
if(!ncchset->exefsSections.code.buffer) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
ReadFile_64(ncchset->exefsSections.code.buffer,ncchset->exefsSections.code.size,0,ncchset->componentFilePtrs.code);
|
||||
if(ncchset->options.CompressCode){
|
||||
u32 new_len;
|
||||
ncchset->ExeFs_Sections.Code.buffer = BLZ_Code(buffer,size,&new_len,BLZ_NORMAL);
|
||||
ncchset->ExeFs_Sections.Code.size = new_len;
|
||||
ncchset->exefsSections.code.buffer = BLZ_Code(buffer,size,&new_len,BLZ_NORMAL);
|
||||
ncchset->exefsSections.code.size = new_len;
|
||||
free(buffer);
|
||||
}
|
||||
else{
|
||||
ncchset->ExeFs_Sections.Code.size = size;
|
||||
ncchset->ExeFs_Sections.Code.buffer = buffer;
|
||||
ncchset->exefsSections.code.size = size;
|
||||
ncchset->exefsSections.code.buffer = buffer;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 GetPageSize(ncch_settings *ncchset)
|
||||
{
|
||||
if(ncchset->yaml_set->Option.PageSize)
|
||||
return strtoul(ncchset->yaml_set->Option.PageSize,NULL,10);
|
||||
if(ncchset->rsfSet->Option.PageSize)
|
||||
return strtoul(ncchset->rsfSet->Option.PageSize,NULL,10);
|
||||
return 0x1000;
|
||||
}
|
||||
|
||||
u32 SizeToPage(u32 memorySize, ElfContext *elf)
|
||||
{
|
||||
return align_value(memorySize,elf->PageSize)/elf->PageSize;
|
||||
return align_value(memorySize,elf->pageSize)/elf->pageSize;
|
||||
}
|
||||
|
||||
|
||||
int GetBSS_SizeFromElf(ElfContext *elf, u8 *ElfFile, ncch_settings *ncchset)
|
||||
{
|
||||
for(int i = 0; i < elf->SectionTableEntryCount; i++){
|
||||
if(IsBss(&elf->Sections[i])) {
|
||||
ncchset->CodeDetails.BSS_Size = elf->Sections[i].Size;
|
||||
for(int i = 0; i < elf->sectionTableEntryCount; i++){
|
||||
if(IsBss(&elf->sections[i])) {
|
||||
ncchset->codeDetails.bssSize = elf->sections[i].size;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -204,16 +204,16 @@ int GetBSS_SizeFromElf(ElfContext *elf, u8 *ElfFile, ncch_settings *ncchset)
|
||||
|
||||
int ImportPlainRegionFromElf(ElfContext *elf, u8 *ElfFile, ncch_settings *ncchset) // Doesn't work same as N makerom
|
||||
{
|
||||
if(!ncchset->yaml_set->PlainRegionNum) return 0;
|
||||
u16 *Index = malloc(sizeof(u16)*ncchset->yaml_set->PlainRegionNum);
|
||||
if(!ncchset->rsfSet->PlainRegionNum) return 0;
|
||||
u16 *Index = malloc(sizeof(u16)*ncchset->rsfSet->PlainRegionNum);
|
||||
|
||||
/* Getting Index Values for each section */
|
||||
for(int i = 0; i < ncchset->yaml_set->PlainRegionNum; i++){
|
||||
Index[i] = GetElfSectionIndexFromName(ncchset->yaml_set->PlainRegion[i],elf,ElfFile);
|
||||
for(int i = 0; i < ncchset->rsfSet->PlainRegionNum; i++){
|
||||
Index[i] = GetElfSectionIndexFromName(ncchset->rsfSet->PlainRegion[i],elf,ElfFile);
|
||||
}
|
||||
|
||||
// Eliminating Duplicated Sections
|
||||
for(int i = ncchset->yaml_set->PlainRegionNum - 1; i >= 0; i--){
|
||||
for(int i = ncchset->rsfSet->PlainRegionNum - 1; i >= 0; i--){
|
||||
for(int j = i-1; j >= 0; j--){
|
||||
if(Index[i] == Index[j]) Index[i] = 0;
|
||||
}
|
||||
@@ -221,21 +221,21 @@ int ImportPlainRegionFromElf(ElfContext *elf, u8 *ElfFile, ncch_settings *ncchse
|
||||
|
||||
/* Calculating Total Size of Data */
|
||||
u64 TotalSize = 0;
|
||||
for(int i = 0; i < ncchset->yaml_set->PlainRegionNum; i++){
|
||||
TotalSize += elf->Sections[Index[i]].Size;
|
||||
for(int i = 0; i < ncchset->rsfSet->PlainRegionNum; i++){
|
||||
TotalSize += elf->sections[Index[i]].size;
|
||||
}
|
||||
|
||||
/* Creating Output Buffer */
|
||||
ncchset->Sections.PlainRegion.size = align_value(TotalSize,ncchset->Options.MediaSize);
|
||||
ncchset->Sections.PlainRegion.buffer = malloc(ncchset->Sections.PlainRegion.size);
|
||||
if(!ncchset->Sections.PlainRegion.buffer) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
memset(ncchset->Sections.PlainRegion.buffer,0,ncchset->Sections.PlainRegion.size);
|
||||
ncchset->sections.plainRegion.size = align_value(TotalSize,ncchset->options.mediaSize);
|
||||
ncchset->sections.plainRegion.buffer = malloc(ncchset->sections.plainRegion.size);
|
||||
if(!ncchset->sections.plainRegion.buffer) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
memset(ncchset->sections.plainRegion.buffer,0,ncchset->sections.plainRegion.size);
|
||||
|
||||
/* Storing Sections */
|
||||
u64 pos = 0;
|
||||
for(int i = 0; i < ncchset->yaml_set->PlainRegionNum; i++){
|
||||
memcpy((ncchset->Sections.PlainRegion.buffer+pos),elf->Sections[Index[i]].Ptr,elf->Sections[Index[i]].Size);
|
||||
pos += elf->Sections[Index[i]].Size;
|
||||
for(int i = 0; i < ncchset->rsfSet->PlainRegionNum; i++){
|
||||
memcpy((ncchset->sections.plainRegion.buffer+pos),elf->sections[Index[i]].ptr,elf->sections[Index[i]].size);
|
||||
pos += elf->sections[Index[i]].size;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -250,53 +250,53 @@ int CreateExeFsCode(ElfContext *elf, u8 *ElfFile, ncch_settings *ncchset)
|
||||
CodeSegment Data;
|
||||
memset(&Data,0,sizeof(CodeSegment));
|
||||
|
||||
int result = CreateCodeSegmentFromElf(&Text,elf,ElfFile,ncchset->yaml_set->ExeFs.Text,ncchset->yaml_set->ExeFs.TextNum);
|
||||
int result = CreateCodeSegmentFromElf(&Text,elf,ElfFile,ncchset->rsfSet->ExeFs.Text,ncchset->rsfSet->ExeFs.TextNum);
|
||||
if(result) return result;
|
||||
result = CreateCodeSegmentFromElf(&RO,elf,ElfFile,ncchset->yaml_set->ExeFs.ReadOnly,ncchset->yaml_set->ExeFs.ReadOnlyNum);
|
||||
result = CreateCodeSegmentFromElf(&RO,elf,ElfFile,ncchset->rsfSet->ExeFs.ReadOnly,ncchset->rsfSet->ExeFs.ReadOnlyNum);
|
||||
if(result) return result;
|
||||
result = CreateCodeSegmentFromElf(&Data,elf,ElfFile,ncchset->yaml_set->ExeFs.ReadWrite,ncchset->yaml_set->ExeFs.ReadWriteNum);
|
||||
result = CreateCodeSegmentFromElf(&Data,elf,ElfFile,ncchset->rsfSet->ExeFs.ReadWrite,ncchset->rsfSet->ExeFs.ReadWriteNum);
|
||||
if(result) return result;
|
||||
|
||||
/* Allocating Buffer for ExeFs Code */
|
||||
u32 size = (Text.MaxPageNum + RO.MaxPageNum + Data.MaxPageNum)*elf->PageSize;
|
||||
u32 size = (Text.maxPageNum + RO.maxPageNum + Data.maxPageNum)*elf->pageSize;
|
||||
u8 *code = malloc(size);
|
||||
|
||||
/* Writing Code into Buffer */
|
||||
u8 *TextPos = (code + 0);
|
||||
u8 *ROPos = (code + Text.MaxPageNum*elf->PageSize);
|
||||
u8 *DataPos = (code + (Text.MaxPageNum + RO.MaxPageNum)*elf->PageSize);
|
||||
if(Text.Size) memcpy(TextPos,Text.Data,Text.Size);
|
||||
if(RO.Size) memcpy(ROPos,RO.Data,RO.Size);
|
||||
if(Data.Size) memcpy(DataPos,Data.Data,Data.Size);
|
||||
u8 *ROPos = (code + Text.maxPageNum*elf->pageSize);
|
||||
u8 *DataPos = (code + (Text.maxPageNum + RO.maxPageNum)*elf->pageSize);
|
||||
if(Text.size) memcpy(TextPos,Text.data,Text.size);
|
||||
if(RO.size) memcpy(ROPos,RO.data,RO.size);
|
||||
if(Data.size) memcpy(DataPos,Data.data,Data.size);
|
||||
|
||||
|
||||
/* Compressing If needed */
|
||||
if(ncchset->Options.CompressCode){
|
||||
if(ncchset->options.CompressCode){
|
||||
u32 new_len;
|
||||
ncchset->ExeFs_Sections.Code.buffer = BLZ_Code(code,size,&new_len,BLZ_NORMAL);
|
||||
ncchset->ExeFs_Sections.Code.size = new_len;
|
||||
ncchset->exefsSections.code.buffer = BLZ_Code(code,size,&new_len,BLZ_NORMAL);
|
||||
ncchset->exefsSections.code.size = new_len;
|
||||
free(code);
|
||||
}
|
||||
else{
|
||||
ncchset->ExeFs_Sections.Code.size = size;
|
||||
ncchset->ExeFs_Sections.Code.buffer = code;
|
||||
ncchset->exefsSections.code.size = size;
|
||||
ncchset->exefsSections.code.buffer = code;
|
||||
}
|
||||
|
||||
/* Setting CodeSegment Data and freeing original buffers */
|
||||
ncchset->CodeDetails.TextAddress = Text.Address;
|
||||
ncchset->CodeDetails.TextMaxPages = Text.MaxPageNum;
|
||||
ncchset->CodeDetails.TextSize = Text.Size;
|
||||
if(Text.Size) free(Text.Data);
|
||||
ncchset->codeDetails.textAddress = Text.address;
|
||||
ncchset->codeDetails.textMaxPages = Text.maxPageNum;
|
||||
ncchset->codeDetails.textSize = Text.size;
|
||||
if(Text.size) free(Text.data);
|
||||
|
||||
ncchset->CodeDetails.ROAddress = RO.Address;
|
||||
ncchset->CodeDetails.ROMaxPages = RO.MaxPageNum;
|
||||
ncchset->CodeDetails.ROSize = RO.Size;
|
||||
if(RO.Size) free(RO.Data);
|
||||
ncchset->codeDetails.roAddress = RO.address;
|
||||
ncchset->codeDetails.roMaxPages = RO.maxPageNum;
|
||||
ncchset->codeDetails.roSize = RO.size;
|
||||
if(RO.size) free(RO.data);
|
||||
|
||||
ncchset->CodeDetails.DataAddress = Data.Address;
|
||||
ncchset->CodeDetails.DataMaxPages = Data.MaxPageNum;
|
||||
ncchset->CodeDetails.DataSize = Data.Size;
|
||||
if(Data.Size) free(Data.Data);
|
||||
ncchset->codeDetails.rwAddress = Data.address;
|
||||
ncchset->codeDetails.rwMaxPages = Data.maxPageNum;
|
||||
ncchset->codeDetails.rwSize = Data.size;
|
||||
if(Data.size) free(Data.data);
|
||||
|
||||
/* Return */
|
||||
return 0;
|
||||
@@ -308,8 +308,10 @@ int CreateCodeSegmentFromElf(CodeSegment *out, ElfContext *elf, u8 *ElfFile, cha
|
||||
memset(out,0,sizeof(CodeSegment));
|
||||
ElfSegment **ContinuousSegments = GetContinuousSegments(&ContinuousSegmentNum,elf,Names,NameNum);
|
||||
if (ContinuousSegments == NULL){
|
||||
if(!ContinuousSegmentNum) // Nothing Was Found
|
||||
if(!ContinuousSegmentNum){// Nothing Was Found
|
||||
//printf("Nothing was found\n");
|
||||
return 0;
|
||||
}
|
||||
else // Error with found segments
|
||||
return ELF_SEGMENTS_NOT_CONTINUOUS;
|
||||
}
|
||||
@@ -319,56 +321,56 @@ int CreateCodeSegmentFromElf(CodeSegment *out, ElfContext *elf, u8 *ElfFile, cha
|
||||
u32 memorySize = 0;
|
||||
for(int i = 0; i < ContinuousSegmentNum; i++){
|
||||
if (i==0){
|
||||
vAddr = ContinuousSegments[i]->VAddr;
|
||||
vAddr = ContinuousSegments[i]->vAddr;
|
||||
}
|
||||
else{ // Add rounded size from previous segment
|
||||
u32 num = ContinuousSegments[i]->VAddr - (vAddr + memorySize);
|
||||
u32 num = ContinuousSegments[i]->vAddr - (vAddr + memorySize);
|
||||
memorySize += num;
|
||||
}
|
||||
|
||||
memorySize += ContinuousSegments[i]->Header->SizeInMemory;
|
||||
for (int j = 0; j < ContinuousSegments[i]->SectionNum; j++){
|
||||
ElfSectionEntry *Section = &ContinuousSegments[i]->Sections[j];
|
||||
if (IsBss(Section) && j == (ContinuousSegments[i]->SectionNum-1))
|
||||
memorySize -= Section->Size;
|
||||
memorySize += ContinuousSegments[i]->header->sizeInMemory;
|
||||
for (int j = 0; j < ContinuousSegments[i]->sectionNum; j++){
|
||||
ElfSectionEntry *Section = &ContinuousSegments[i]->sections[j];
|
||||
if (IsBss(Section) && j == (ContinuousSegments[i]->sectionNum-1))
|
||||
memorySize -= Section->size;
|
||||
}
|
||||
}
|
||||
|
||||
// For Check
|
||||
#ifdef ELF_DEBUG
|
||||
#ifdef DEBUG
|
||||
printf("Address: 0x%x\n",vAddr);
|
||||
printf("Size: 0x%x\n",memorySize);
|
||||
#endif
|
||||
|
||||
out->Address = vAddr;
|
||||
out->Size = memorySize;
|
||||
out->MaxPageNum = SizeToPage(memorySize,elf);
|
||||
out->Data = malloc(memorySize);
|
||||
out->address = vAddr;
|
||||
out->size = memorySize;
|
||||
out->maxPageNum = SizeToPage(memorySize,elf);
|
||||
out->data = malloc(memorySize);
|
||||
|
||||
/* Writing Segment to Buffer */
|
||||
vAddr = 0;
|
||||
memorySize = 0;
|
||||
for(int i = 0; i < ContinuousSegmentNum; i++){
|
||||
if (i==0){
|
||||
vAddr = ContinuousSegments[i]->VAddr;
|
||||
vAddr = ContinuousSegments[i]->vAddr;
|
||||
}
|
||||
else{
|
||||
u32 num = ContinuousSegments[i]->VAddr - (vAddr + memorySize);
|
||||
u32 num = ContinuousSegments[i]->vAddr - (vAddr + memorySize);
|
||||
memorySize += num;
|
||||
}
|
||||
u32 size = 0;
|
||||
for (int j = 0; j < ContinuousSegments[i]->SectionNum; j++){
|
||||
ElfSectionEntry *Section = &ContinuousSegments[i]->Sections[j];
|
||||
for (int j = 0; j < ContinuousSegments[i]->sectionNum; j++){
|
||||
ElfSectionEntry *Section = &ContinuousSegments[i]->sections[j];
|
||||
if (!IsBss(Section)){
|
||||
u8 *pos = (out->Data + memorySize + size);
|
||||
memcpy(pos,Section->Ptr,Section->Size);
|
||||
size += Section->Size;
|
||||
u8 *pos = (out->data + (Section->address - ContinuousSegments[i]->vAddr));
|
||||
memcpy(pos,Section->ptr,Section->size);
|
||||
size += Section->size;
|
||||
}
|
||||
|
||||
else if (j == (ContinuousSegments[i]->SectionNum-1))
|
||||
memorySize -= Section->Size;
|
||||
else if (j == (ContinuousSegments[i]->sectionNum-1))
|
||||
memorySize -= Section->size;
|
||||
else
|
||||
size += Section->Size;
|
||||
size += Section->size;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -391,10 +393,10 @@ ElfSegment** GetContinuousSegments(u16 *ContinuousSegmentNum, ElfContext *elf, c
|
||||
return Segments;
|
||||
}
|
||||
|
||||
u32 vAddr = Segments[0]->VAddr + Segments[0]->Header->SizeInMemory;
|
||||
u32 vAddr = Segments[0]->vAddr + Segments[0]->header->sizeInMemory;
|
||||
for (int i = 1; i < SegmentNum; i++){
|
||||
if (Segments[i]->VAddr != (u32)align_value(vAddr,Segments[i]->Header->Alignment)){ //Each Segment must start after each other
|
||||
fprintf(stderr,"[ELF ERROR] %s segment and %s segment are not continuous\n", Segments[i]->Name, Segments[i - 1]->Name);
|
||||
if (Segments[i]->vAddr != (u32)align_value(vAddr,Segments[i]->header->alignment)){ //Each Segment must start after each other
|
||||
fprintf(stderr,"[ELF ERROR] %s segment and %s segment are not continuous\n", Segments[i]->name, Segments[i - 1]->name);
|
||||
free(Segments);
|
||||
*ContinuousSegmentNum = 0xffff; // Signify to function that an error occured
|
||||
return NULL;
|
||||
@@ -415,9 +417,9 @@ ElfSegment** GetSegments(u16 *SegmentNum, ElfContext *elf, char **Names, u32 Nam
|
||||
ElfSegment **Segments = malloc(sizeof(ElfSegment*)*NameNum);
|
||||
*SegmentNum = 0; // There can be a max of NameNum Segments, however, they might not all exist
|
||||
for (int i = 0; i < NameNum; i++){
|
||||
for(int j = 0; j < elf->ActiveSegments; j++){
|
||||
if(strcmp(Names[i],elf->Segments[j].Name) == 0){ // If there is a match, store Segment data pointer & increment index
|
||||
Segments[*SegmentNum] = &elf->Segments[j];
|
||||
for(int j = 0; j < elf->activeSegments; j++){
|
||||
if(strcmp(Names[i],elf->segments[j].name) == 0){ // If there is a match, store Segment data pointer & increment index
|
||||
Segments[*SegmentNum] = &elf->segments[j];
|
||||
*SegmentNum = *SegmentNum + 1;
|
||||
}
|
||||
}
|
||||
@@ -451,116 +453,118 @@ int GetElfContext(ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
int GetElfSectionEntries(ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
elf->Sections = malloc(sizeof(ElfSectionEntry)*elf->SectionTableEntryCount);
|
||||
if(!elf->Sections) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
elf->sections = malloc(sizeof(ElfSectionEntry)*elf->sectionTableEntryCount);
|
||||
if(!elf->sections) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
|
||||
for(int i = 0; i < elf->SectionTableEntryCount; i++){
|
||||
elf->Sections[i].Name = GetELFSectionEntryName(i,elf,ElfFile);
|
||||
elf->Sections[i].Type = GetELFSectionEntryType(i,elf,ElfFile);
|
||||
elf->Sections[i].Flags = GetELFSectionEntryFlags(i,elf,ElfFile);
|
||||
elf->Sections[i].Ptr = GetELFSectionEntry(i,elf,ElfFile);
|
||||
elf->Sections[i].OffsetInFile = GetELFSectionEntryFileOffset(i,elf,ElfFile);
|
||||
elf->Sections[i].Size = GetELFSectionEntrySize(i,elf,ElfFile);
|
||||
elf->Sections[i].Address = GetELFSectionEntryAddress(i,elf,ElfFile);
|
||||
elf->Sections[i].Alignment = GetELFSectionEntryAlignment(i,elf,ElfFile);
|
||||
for(int i = 0; i < elf->sectionTableEntryCount; i++){
|
||||
elf->sections[i].name = GetELFSectionEntryName(i,elf,ElfFile);
|
||||
elf->sections[i].type = GetELFSectionEntryType(i,elf,ElfFile);
|
||||
elf->sections[i].flags = GetELFSectionEntryFlags(i,elf,ElfFile);
|
||||
elf->sections[i].ptr = GetELFSectionEntry(i,elf,ElfFile);
|
||||
elf->sections[i].offsetInFile = GetELFSectionEntryFileOffset(i,elf,ElfFile);
|
||||
elf->sections[i].size = GetELFSectionEntrySize(i,elf,ElfFile);
|
||||
elf->sections[i].address = GetELFSectionEntryAddress(i,elf,ElfFile);
|
||||
elf->sections[i].alignment = GetELFSectionEntryAlignment(i,elf,ElfFile);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetElfProgramEntries(ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
elf->ProgramHeaders = malloc(sizeof(ElfProgramEntry)*elf->ProgramTableEntryCount);
|
||||
if(!elf->ProgramHeaders) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
elf->programHeaders = malloc(sizeof(ElfProgramEntry)*elf->programTableEntryCount);
|
||||
if(!elf->programHeaders) {fprintf(stderr,"[ELF ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
|
||||
for(int i = 0; i < elf->ProgramTableEntryCount; i++){
|
||||
elf->ProgramHeaders[i].Type = GetELFProgramEntryType(i,elf,ElfFile);
|
||||
elf->ProgramHeaders[i].Flags = GetELFProgramEntryFlags(i,elf,ElfFile);
|
||||
elf->ProgramHeaders[i].Ptr = GetELFProgramEntry(i,elf,ElfFile);
|
||||
elf->ProgramHeaders[i].OffsetInFile = GetELFProgramEntryFileOffset(i,elf,ElfFile);
|
||||
elf->ProgramHeaders[i].SizeInFile = GetELFProgramEntryFileSize(i,elf,ElfFile);
|
||||
elf->ProgramHeaders[i].PhysicalAddress = GetELFProgramEntryPAddress(i,elf,ElfFile);
|
||||
elf->ProgramHeaders[i].VirtualAddress = GetELFProgramEntryVAddress(i,elf,ElfFile);
|
||||
elf->ProgramHeaders[i].SizeInMemory = GetELFProgramEntryMemorySize(i,elf,ElfFile);
|
||||
elf->ProgramHeaders[i].Alignment = GetELFProgramEntryAlignment(i,elf,ElfFile);
|
||||
for(int i = 0; i < elf->programTableEntryCount; i++){
|
||||
elf->programHeaders[i].type = GetELFProgramEntryType(i,elf,ElfFile);
|
||||
elf->programHeaders[i].flags = GetELFProgramEntryFlags(i,elf,ElfFile);
|
||||
elf->programHeaders[i].ptr = GetELFProgramEntry(i,elf,ElfFile);
|
||||
elf->programHeaders[i].offsetInFile = GetELFProgramEntryFileOffset(i,elf,ElfFile);
|
||||
elf->programHeaders[i].sizeInFile = GetELFProgramEntryFileSize(i,elf,ElfFile);
|
||||
elf->programHeaders[i].physicalAddress = GetELFProgramEntryPAddress(i,elf,ElfFile);
|
||||
elf->programHeaders[i].virtualAddress = GetELFProgramEntryVAddress(i,elf,ElfFile);
|
||||
elf->programHeaders[i].sizeInMemory = GetELFProgramEntryMemorySize(i,elf,ElfFile);
|
||||
elf->programHeaders[i].alignment = GetELFProgramEntryAlignment(i,elf,ElfFile);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void PrintElfContext(ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
printf("[+] Basic Details\n");
|
||||
printf(" Class: %s\n",elf->Is64bit ? "64-bit" : "32-bit");
|
||||
printf(" Data: %s\n",elf->IsLittleEndian ? "Little Endian" : "Big Endian");
|
||||
printf("\n[+] Program Table Data\n");
|
||||
printf(" Offset: 0x%lx\n",elf->ProgramTableOffset);
|
||||
printf(" Size: 0x%x\n",elf->ProgramTableEntrySize);
|
||||
printf(" Count: 0x%x\n",elf->ProgramTableEntryCount);
|
||||
printf(" Offset: 0x%lx\n",elf->programTableOffset);
|
||||
printf(" Size: 0x%x\n",elf->programTableEntrySize);
|
||||
printf(" Count: 0x%x\n",elf->programTableEntryCount);
|
||||
printf("\n[+] Section Table Data\n");
|
||||
printf(" Offset: 0x%lx\n",elf->SectionTableOffset);
|
||||
printf(" Size: 0x%x\n",elf->SectionTableEntrySize);
|
||||
printf(" Count: 0x%x\n",elf->SectionTableEntryCount);
|
||||
printf(" Lable Index: 0x%x\n",elf->SectionHeaderNameEntryIndex);
|
||||
for(int i = 0; i < elf->ActiveSegments; i++){
|
||||
printf(" Segment [%d][%s]\n",i,elf->Segments[i].Name);
|
||||
printf(" > Size : 0x%x\n",elf->Segments[i].Header->SizeInFile);
|
||||
printf(" > Address : 0x%x\n",elf->Segments[i].VAddr);
|
||||
printf(" > Sections : %d\n",elf->Segments[i].SectionNum);
|
||||
for(int j = 0; j < elf->Segments[i].SectionNum; j++){
|
||||
printf(" > Section [%d][%s]\n",j,elf->Segments[i].Sections[j].Name);
|
||||
printf(" Offset: 0x%lx\n",elf->sectionTableOffset);
|
||||
printf(" Size: 0x%x\n",elf->sectionTableEntrySize);
|
||||
printf(" Count: 0x%x\n",elf->sectionTableEntryCount);
|
||||
printf(" Lable Index: 0x%x\n",elf->sectionHeaderNameEntryIndex);
|
||||
for(int i = 0; i < elf->activeSegments; i++){
|
||||
printf(" Segment [%d][%s]\n",i,elf->segments[i].name);
|
||||
printf(" > Size : 0x%x\n",elf->segments[i].header->sizeInFile);
|
||||
printf(" > Address : 0x%x\n",elf->segments[i].vAddr);
|
||||
printf(" > Sections : %d\n",elf->segments[i].sectionNum);
|
||||
for(int j = 0; j < elf->segments[i].sectionNum; j++){
|
||||
printf(" > Section [%d][%s]\n",j,elf->segments[i].sections[j].name);
|
||||
}
|
||||
|
||||
/*
|
||||
char outpath[100];
|
||||
memset(&outpath,0,100);
|
||||
sprintf(outpath,"%s.bin",elf->Sections[i].Name);
|
||||
sprintf(outpath,"%s.bin",elf->sections[i].name);
|
||||
chdir("elfsections");
|
||||
FILE *tmp = fopen(outpath,"wb");
|
||||
WriteBuffer(elf->Sections[i].Ptr,elf->Sections[i].Size,0,tmp);
|
||||
WriteBuffer(elf->sections[i].ptr,elf->sections[i].size,0,tmp);
|
||||
fclose(tmp);
|
||||
chdir("..");
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
int ReadElfHdr(ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(elf->Is64bit){
|
||||
elf_64_hdr *hdr = (elf_64_hdr*)ElfFile;
|
||||
|
||||
u16 Architecture = u8_to_u16(hdr->TargetArchitecture,elf->IsLittleEndian);
|
||||
u16 Type = u8_to_u16(hdr->Type,elf->IsLittleEndian);
|
||||
u16 Architecture = u8_to_u16(hdr->targetArchitecture,elf->IsLittleEndian);
|
||||
u16 Type = u8_to_u16(hdr->type,elf->IsLittleEndian);
|
||||
if(Architecture != elf_arm) return NOT_ARM_ELF;
|
||||
if(Type != elf_executeable) return NON_EXECUTABLE_ELF;
|
||||
|
||||
elf->ProgramTableOffset = u8_to_u64(hdr->ProgramHeaderTableOffset,elf->IsLittleEndian);
|
||||
elf->ProgramTableEntrySize = u8_to_u16(hdr->ProgramHeaderEntrySize,elf->IsLittleEndian);
|
||||
elf->ProgramTableEntryCount = u8_to_u16(hdr->ProgramHeaderEntryCount,elf->IsLittleEndian);
|
||||
elf->programTableOffset = u8_to_u64(hdr->programHeaderTableOffset,elf->IsLittleEndian);
|
||||
elf->programTableEntrySize = u8_to_u16(hdr->programHeaderEntrySize,elf->IsLittleEndian);
|
||||
elf->programTableEntryCount = u8_to_u16(hdr->programHeaderEntryCount,elf->IsLittleEndian);
|
||||
|
||||
elf->SectionTableOffset = u8_to_u64(hdr->SectionHeaderTableOffset,elf->IsLittleEndian);
|
||||
elf->SectionTableEntrySize = u8_to_u16(hdr->SectionTableEntrySize,elf->IsLittleEndian);
|
||||
elf->SectionTableEntryCount = u8_to_u16(hdr->SectionHeaderEntryCount,elf->IsLittleEndian);
|
||||
elf->sectionTableOffset = u8_to_u64(hdr->sectionHeaderTableOffset,elf->IsLittleEndian);
|
||||
elf->sectionTableEntrySize = u8_to_u16(hdr->sectionTableEntrySize,elf->IsLittleEndian);
|
||||
elf->sectionTableEntryCount = u8_to_u16(hdr->sectionHeaderEntryCount,elf->IsLittleEndian);
|
||||
|
||||
elf->SectionHeaderNameEntryIndex = u8_to_u16(hdr->SectionHeaderNameEntryIndex,elf->IsLittleEndian);
|
||||
elf->sectionHeaderNameEntryIndex = u8_to_u16(hdr->sectionHeaderNameEntryIndex,elf->IsLittleEndian);
|
||||
}
|
||||
else{
|
||||
elf_32_hdr *hdr = (elf_32_hdr*)ElfFile;
|
||||
|
||||
u16 Architecture = u8_to_u16(hdr->TargetArchitecture,elf->IsLittleEndian);
|
||||
u16 Type = u8_to_u16(hdr->Type,elf->IsLittleEndian);
|
||||
u16 Architecture = u8_to_u16(hdr->targetArchitecture,elf->IsLittleEndian);
|
||||
u16 Type = u8_to_u16(hdr->type,elf->IsLittleEndian);
|
||||
if(Architecture != elf_arm) return NOT_ARM_ELF;
|
||||
if(Type != elf_executeable) return NON_EXECUTABLE_ELF;
|
||||
|
||||
elf->ProgramTableOffset = u8_to_u32(hdr->ProgramHeaderTableOffset,elf->IsLittleEndian);
|
||||
elf->ProgramTableEntrySize = u8_to_u16(hdr->ProgramHeaderEntrySize,elf->IsLittleEndian);
|
||||
elf->ProgramTableEntryCount = u8_to_u16(hdr->ProgramHeaderEntryCount,elf->IsLittleEndian);
|
||||
elf->programTableOffset = u8_to_u32(hdr->programHeaderTableOffset,elf->IsLittleEndian);
|
||||
elf->programTableEntrySize = u8_to_u16(hdr->programHeaderEntrySize,elf->IsLittleEndian);
|
||||
elf->programTableEntryCount = u8_to_u16(hdr->programHeaderEntryCount,elf->IsLittleEndian);
|
||||
|
||||
elf->SectionTableOffset = u8_to_u32(hdr->SectionHeaderTableOffset,elf->IsLittleEndian);
|
||||
elf->SectionTableEntrySize = u8_to_u16(hdr->SectionTableEntrySize,elf->IsLittleEndian);
|
||||
elf->SectionTableEntryCount = u8_to_u16(hdr->SectionHeaderEntryCount,elf->IsLittleEndian);
|
||||
elf->sectionTableOffset = u8_to_u32(hdr->sectionHeaderTableOffset,elf->IsLittleEndian);
|
||||
elf->sectionTableEntrySize = u8_to_u16(hdr->sectionTableEntrySize,elf->IsLittleEndian);
|
||||
elf->sectionTableEntryCount = u8_to_u16(hdr->sectionHeaderEntryCount,elf->IsLittleEndian);
|
||||
|
||||
elf->SectionHeaderNameEntryIndex = u8_to_u16(hdr->SectionHeaderNameEntryIndex,elf->IsLittleEndian);
|
||||
elf->sectionHeaderNameEntryIndex = u8_to_u16(hdr->sectionHeaderNameEntryIndex,elf->IsLittleEndian);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -569,21 +573,21 @@ int ReadElfHdr(ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u8* GetELFSectionHeader(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->SectionTableEntryCount) return NULL;
|
||||
if(Index >= elf->sectionTableEntryCount) return NULL;
|
||||
|
||||
return (ElfFile + elf->SectionTableOffset + elf->SectionTableEntrySize*Index);
|
||||
return (ElfFile + elf->sectionTableOffset + elf->sectionTableEntrySize*Index);
|
||||
}
|
||||
|
||||
u8* GetELFSectionEntry(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->SectionTableEntryCount) return NULL;
|
||||
if(Index >= elf->sectionTableEntryCount) return NULL;
|
||||
|
||||
return (u8*) (ElfFile + GetELFSectionEntryFileOffset(Index,elf,ElfFile));
|
||||
}
|
||||
|
||||
char* GetELFSectionEntryName(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->SectionTableEntryCount) return 0;
|
||||
if(Index >= elf->sectionTableEntryCount) return 0;
|
||||
|
||||
u64 NameIndex = 0;
|
||||
if(elf->Is64bit){
|
||||
@@ -595,14 +599,14 @@ char* GetELFSectionEntryName(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
NameIndex = u8_to_u32(shdr->sh_name,elf->IsLittleEndian);
|
||||
}
|
||||
|
||||
u8 *NameTable = GetELFSectionEntry(elf->SectionHeaderNameEntryIndex,elf,ElfFile);
|
||||
u8 *NameTable = GetELFSectionEntry(elf->sectionHeaderNameEntryIndex,elf,ElfFile);
|
||||
|
||||
return (char*)(NameTable+NameIndex);
|
||||
}
|
||||
|
||||
u64 GetELFSectionEntryType(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->SectionTableEntryCount) return 0;
|
||||
if(Index >= elf->sectionTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_shdr *shdr = (elf_64_shdr*)GetELFSectionHeader(Index,elf,ElfFile);
|
||||
@@ -618,7 +622,7 @@ u64 GetELFSectionEntryType(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFSectionEntryFlags(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->SectionTableEntryCount) return 0;
|
||||
if(Index >= elf->sectionTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_shdr *shdr = (elf_64_shdr*)GetELFSectionHeader(Index,elf,ElfFile);
|
||||
@@ -634,7 +638,7 @@ u64 GetELFSectionEntryFlags(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFSectionEntryAddress(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->SectionTableEntryCount) return 0;
|
||||
if(Index >= elf->sectionTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_shdr *shdr = (elf_64_shdr*)GetELFSectionHeader(Index,elf,ElfFile);
|
||||
@@ -650,7 +654,7 @@ u64 GetELFSectionEntryAddress(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFSectionEntryFileOffset(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->SectionTableEntryCount) return 0;
|
||||
if(Index >= elf->sectionTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_shdr *shdr = (elf_64_shdr*)GetELFSectionHeader(Index,elf,ElfFile);
|
||||
@@ -666,7 +670,7 @@ u64 GetELFSectionEntryFileOffset(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFSectionEntrySize(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->SectionTableEntryCount) return 0;
|
||||
if(Index >= elf->sectionTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_shdr *shdr = (elf_64_shdr*)GetELFSectionHeader(Index,elf,ElfFile);
|
||||
@@ -682,7 +686,7 @@ u64 GetELFSectionEntrySize(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFSectionEntryAlignment(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->SectionTableEntryCount) return 0;
|
||||
if(Index >= elf->sectionTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_shdr *shdr = (elf_64_shdr*)GetELFSectionHeader(Index,elf,ElfFile);
|
||||
@@ -699,36 +703,36 @@ u64 GetELFSectionEntryAlignment(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u16 GetElfSectionIndexFromName(char *Name, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
for(int i = 0; i < elf->SectionTableEntryCount; i++){
|
||||
if(strcmp(Name,elf->Sections[i].Name) == 0) return i;
|
||||
for(int i = 0; i < elf->sectionTableEntryCount; i++){
|
||||
if(strcmp(Name,elf->sections[i].name) == 0) return i;
|
||||
}
|
||||
return 0; // Assuming 0 is always empty
|
||||
}
|
||||
|
||||
bool IsBss(ElfSectionEntry *Section)
|
||||
{
|
||||
if(Section->Type == 8 && Section->Flags == 3)
|
||||
if(Section->type == 8 && Section->flags == 3)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsData(ElfSectionEntry *Section)
|
||||
{
|
||||
if(Section->Type == 1 && Section->Flags == 3)
|
||||
if(Section->type == 1 && Section->flags == 3)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsRO(ElfSectionEntry *Section)
|
||||
{
|
||||
if(Section->Type == 1 && Section->Flags == 2)
|
||||
if(Section->type == 1 && Section->flags == 2)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsText(ElfSectionEntry *Section)
|
||||
{
|
||||
if(Section->Type == 1 && Section->Flags == 6)
|
||||
if(Section->type == 1 && Section->flags == 6)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -737,14 +741,14 @@ bool IsText(ElfSectionEntry *Section)
|
||||
|
||||
u8* GetELFProgramHeader(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return NULL;
|
||||
if(Index >= elf->programTableEntryCount) return NULL;
|
||||
|
||||
return (ElfFile + elf->ProgramTableOffset + elf->ProgramTableEntrySize*Index);
|
||||
return (ElfFile + elf->programTableOffset + elf->programTableEntrySize*Index);
|
||||
}
|
||||
|
||||
u8* GetELFProgramEntry(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return NULL;
|
||||
if(Index >= elf->programTableEntryCount) return NULL;
|
||||
|
||||
return (u8*) (ElfFile + GetELFProgramEntryFileOffset(Index,elf,ElfFile));
|
||||
|
||||
@@ -753,7 +757,7 @@ u8* GetELFProgramEntry(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFProgramEntryType(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return 0;
|
||||
if(Index >= elf->programTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_phdr *phdr = (elf_64_phdr*)GetELFProgramHeader(Index,elf,ElfFile);
|
||||
@@ -769,7 +773,7 @@ u64 GetELFProgramEntryType(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFProgramEntryFlags(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return 0;
|
||||
if(Index >= elf->programTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_phdr *phdr = (elf_64_phdr*)GetELFProgramHeader(Index,elf,ElfFile);
|
||||
@@ -785,7 +789,7 @@ u64 GetELFProgramEntryFlags(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFProgramEntryFileSize(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return 0;
|
||||
if(Index >= elf->programTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_phdr *phdr = (elf_64_phdr*)GetELFProgramHeader(Index,elf,ElfFile);
|
||||
@@ -801,7 +805,7 @@ u64 GetELFProgramEntryFileSize(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFProgramEntryFileOffset(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return 0;
|
||||
if(Index >= elf->programTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_phdr *phdr = (elf_64_phdr*)GetELFProgramHeader(Index,elf,ElfFile);
|
||||
@@ -817,7 +821,7 @@ u64 GetELFProgramEntryFileOffset(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFProgramEntryMemorySize(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return 0;
|
||||
if(Index >= elf->programTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_phdr *phdr = (elf_64_phdr*)GetELFProgramHeader(Index,elf,ElfFile);
|
||||
@@ -833,7 +837,7 @@ u64 GetELFProgramEntryMemorySize(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFProgramEntryVAddress(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return 0;
|
||||
if(Index >= elf->programTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_phdr *phdr = (elf_64_phdr*)GetELFProgramHeader(Index,elf,ElfFile);
|
||||
@@ -849,7 +853,7 @@ u64 GetELFProgramEntryVAddress(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFProgramEntryPAddress(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return 0;
|
||||
if(Index >= elf->programTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_phdr *phdr = (elf_64_phdr*)GetELFProgramHeader(Index,elf,ElfFile);
|
||||
@@ -866,7 +870,7 @@ u64 GetELFProgramEntryPAddress(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
u64 GetELFProgramEntryAlignment(u16 Index, ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
if(Index >= elf->ProgramTableEntryCount) return 0;
|
||||
if(Index >= elf->programTableEntryCount) return 0;
|
||||
|
||||
if(elf->Is64bit){
|
||||
elf_64_phdr *phdr = (elf_64_phdr*)GetELFProgramHeader(Index,elf,ElfFile);
|
||||
@@ -885,52 +889,60 @@ int CreateElfSegments(ElfContext *elf, u8 *ElfFile)
|
||||
{
|
||||
int num = 0;
|
||||
// Interate through Each Program Header
|
||||
elf->ActiveSegments = 0;
|
||||
elf->Segments = malloc(sizeof(ElfSegment)*elf->ProgramTableEntryCount);
|
||||
elf->activeSegments = 0;
|
||||
elf->segments = malloc(sizeof(ElfSegment)*elf->programTableEntryCount);
|
||||
ElfSegment *segment = malloc(sizeof(ElfSegment)); // Temporary Buffer
|
||||
for (int i = 0; i < elf->ProgramTableEntryCount; i++){
|
||||
if (elf->ProgramHeaders[i].SizeInMemory != 0 && elf->ProgramHeaders[i].Type == 1){
|
||||
for (int i = 0; i < elf->programTableEntryCount; i++){
|
||||
if (elf->programHeaders[i].sizeInMemory != 0 && elf->programHeaders[i].type == 1){
|
||||
memset(segment,0,sizeof(ElfSegment));
|
||||
|
||||
bool flag = false;
|
||||
u32 size = 0;
|
||||
u32 vAddr = elf->ProgramHeaders[i].VirtualAddress;
|
||||
u32 memorySize = elf->ProgramHeaders[i].SizeInMemory;
|
||||
u32 vAddr = elf->programHeaders[i].virtualAddress;
|
||||
u32 memorySize = elf->programHeaders[i].sizeInMemory;
|
||||
//printf("Segment Size in memory: 0x%x\n",memorySize);
|
||||
|
||||
u16 SectionInfoCapacity = 10;
|
||||
segment->SectionNum = 0;
|
||||
segment->Sections = malloc(sizeof(ElfSectionEntry)*SectionInfoCapacity);
|
||||
segment->sectionNum = 0;
|
||||
segment->sections = malloc(sizeof(ElfSectionEntry)*SectionInfoCapacity);
|
||||
|
||||
// Itterate Through Section Headers
|
||||
for (int j = num; j < elf->SectionTableEntryCount; j++){
|
||||
for (int j = num; j < elf->sectionTableEntryCount; j++){
|
||||
if (!flag){
|
||||
if (elf->Sections[j].Address != vAddr)
|
||||
if (elf->sections[j].address != vAddr)
|
||||
goto Skip;
|
||||
|
||||
while (j < (int)elf->Sections[j].Size && elf->Sections[j].Address == vAddr && !IsIgnoreSection(elf->Sections[j]))
|
||||
while (j < (int)elf->sections[j].size && elf->sections[j].address == vAddr && !IsIgnoreSection(elf->sections[j]))
|
||||
j++;
|
||||
|
||||
j--;
|
||||
|
||||
flag = true;
|
||||
segment->VAddr = elf->Sections[j].Address;
|
||||
segment->Name = elf->Sections[j].Name;
|
||||
segment->vAddr = elf->sections[j].address;
|
||||
segment->name = elf->sections[j].name;
|
||||
}
|
||||
|
||||
if(segment->SectionNum < SectionInfoCapacity)
|
||||
memcpy(&segment->Sections[segment->SectionNum],&elf->Sections[j],sizeof(ElfSectionEntry));
|
||||
if(segment->sectionNum < SectionInfoCapacity)
|
||||
memcpy(&segment->sections[segment->sectionNum],&elf->sections[j],sizeof(ElfSectionEntry));
|
||||
else{
|
||||
SectionInfoCapacity = SectionInfoCapacity*2;
|
||||
ElfSectionEntry *tmp = malloc(sizeof(ElfSectionEntry)*SectionInfoCapacity);
|
||||
for(int k = 0; k < segment->SectionNum; k++)
|
||||
memcpy(&tmp[k],&segment->Sections[k],sizeof(ElfSectionEntry));
|
||||
free(segment->Sections);
|
||||
segment->Sections = tmp;
|
||||
memcpy(&segment->Sections[segment->SectionNum],&elf->Sections[j],sizeof(ElfSectionEntry));
|
||||
for(int k = 0; k < segment->sectionNum; k++)
|
||||
memcpy(&tmp[k],&segment->sections[k],sizeof(ElfSectionEntry));
|
||||
free(segment->sections);
|
||||
segment->sections = tmp;
|
||||
memcpy(&segment->sections[segment->sectionNum],&elf->sections[j],sizeof(ElfSectionEntry));
|
||||
}
|
||||
segment->SectionNum++;
|
||||
segment->sectionNum++;
|
||||
|
||||
size += elf->Sections[j].Size;
|
||||
if(size == 0)
|
||||
size = elf->sections[j].size;
|
||||
else
|
||||
size = align_value(size,elf->sections[j].alignment) + elf->sections[j].size;
|
||||
|
||||
//printf("Section Name: %s",elf->sections[j].name);
|
||||
//printf(" 0x%lx",elf->sections[j].size);
|
||||
//printf(" (Total Size: 0x%x)\n",size);
|
||||
|
||||
if (size == memorySize)
|
||||
break;
|
||||
@@ -941,13 +953,13 @@ int CreateElfSegments(ElfContext *elf, u8 *ElfFile)
|
||||
}
|
||||
Skip: ;
|
||||
}
|
||||
if(segment->SectionNum){
|
||||
segment->Header = &elf->ProgramHeaders[i];
|
||||
memcpy(&elf->Segments[elf->ActiveSegments],segment,sizeof(ElfSegment));
|
||||
elf->ActiveSegments++;
|
||||
if(segment->sectionNum){
|
||||
segment->header = &elf->programHeaders[i];
|
||||
memcpy(&elf->segments[elf->activeSegments],segment,sizeof(ElfSegment));
|
||||
elf->activeSegments++;
|
||||
}
|
||||
else{
|
||||
free(segment->Sections);
|
||||
free(segment->sections);
|
||||
free(segment);
|
||||
fprintf(stderr,"[ELF ERROR] Program Header Has no corresponding Sections, ELF Cannot be proccessed\n");
|
||||
return ELF_SEGMENTS_NOT_FOUND;
|
||||
@@ -961,15 +973,15 @@ int CreateElfSegments(ElfContext *elf, u8 *ElfFile)
|
||||
|
||||
bool IsIgnoreSection(ElfSectionEntry info)
|
||||
{
|
||||
if (info.Address)
|
||||
if (info.address)
|
||||
return false;
|
||||
|
||||
if (info.Type != 1 && info.Type != 0)
|
||||
if (info.type != 1 && info.type != 0)
|
||||
return true;
|
||||
|
||||
char IgnoreSectionNames[7][20] = { ".debug_abbrev", ".debug_frame", ".debug_info", ".debug_line", ".debug_loc", ".debug_pubnames", ".comment" };
|
||||
for (int i = 0; i < 7; i++){
|
||||
if (strcmp(IgnoreSectionNames[i],info.Name) == 0)
|
||||
if (strcmp(IgnoreSectionNames[i],info.name) == 0)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -16,69 +16,69 @@ typedef enum
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *Name;
|
||||
u64 Type;
|
||||
u64 Flags;
|
||||
u8 *Ptr;
|
||||
u64 OffsetInFile;
|
||||
u64 Size;
|
||||
u64 Address;
|
||||
u64 Alignment;
|
||||
char *name;
|
||||
u64 type;
|
||||
u64 flags;
|
||||
u8 *ptr;
|
||||
u64 offsetInFile;
|
||||
u64 size;
|
||||
u64 address;
|
||||
u64 alignment;
|
||||
} ElfSectionEntry;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u64 Type;
|
||||
u64 Flags;
|
||||
u8 *Ptr;
|
||||
u64 OffsetInFile;
|
||||
u64 SizeInFile;
|
||||
u64 VirtualAddress;
|
||||
u64 PhysicalAddress;
|
||||
u64 SizeInMemory;
|
||||
u64 Alignment;
|
||||
u64 type;
|
||||
u64 flags;
|
||||
u8 *ptr;
|
||||
u64 offsetInFile;
|
||||
u64 sizeInFile;
|
||||
u64 virtualAddress;
|
||||
u64 physicalAddress;
|
||||
u64 sizeInMemory;
|
||||
u64 alignment;
|
||||
|
||||
} ElfProgramEntry;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *Name;
|
||||
u64 VAddr;
|
||||
char *name;
|
||||
u64 vAddr;
|
||||
|
||||
ElfProgramEntry *Header;
|
||||
u32 SectionNum;
|
||||
ElfSectionEntry *Sections;
|
||||
ElfProgramEntry *header;
|
||||
u32 sectionNum;
|
||||
ElfSectionEntry *sections;
|
||||
} ElfSegment;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u32 Address;
|
||||
u32 Size;
|
||||
u32 MaxPageNum;
|
||||
u8 *Data;
|
||||
u32 address;
|
||||
u32 size;
|
||||
u32 maxPageNum;
|
||||
u8 *data;
|
||||
} CodeSegment;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u32 PageSize;
|
||||
u32 pageSize;
|
||||
bool IsLittleEndian;
|
||||
bool Is64bit;
|
||||
|
||||
u64 ProgramTableOffset;
|
||||
u16 ProgramTableEntrySize;
|
||||
u16 ProgramTableEntryCount;
|
||||
u64 programTableOffset;
|
||||
u16 programTableEntrySize;
|
||||
u16 programTableEntryCount;
|
||||
|
||||
u64 SectionTableOffset;
|
||||
u16 SectionTableEntrySize;
|
||||
u16 SectionTableEntryCount;
|
||||
u64 sectionTableOffset;
|
||||
u16 sectionTableEntrySize;
|
||||
u16 sectionTableEntryCount;
|
||||
|
||||
u16 SectionHeaderNameEntryIndex;
|
||||
u16 sectionHeaderNameEntryIndex;
|
||||
|
||||
ElfSectionEntry *Sections;
|
||||
ElfProgramEntry *ProgramHeaders;
|
||||
ElfSectionEntry *sections;
|
||||
ElfProgramEntry *programHeaders;
|
||||
|
||||
u16 ActiveSegments;
|
||||
ElfSegment *Segments;
|
||||
u16 activeSegments;
|
||||
ElfSegment *segments;
|
||||
|
||||
} ElfContext;
|
||||
|
||||
|
||||
@@ -30,50 +30,51 @@ typedef enum
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 Magic[4];
|
||||
u8 BitFormat;
|
||||
u8 Endianness;
|
||||
u8 ELF_Version;
|
||||
u8 OS;
|
||||
u8 Padding_0[8];
|
||||
u8 Type[2];
|
||||
u8 TargetArchitecture[2];
|
||||
u8 Version[4];
|
||||
u8 EntryPoint[4];
|
||||
u8 ProgramHeaderTableOffset[4];
|
||||
u8 SectionHeaderTableOffset[4];
|
||||
u8 Flags[4];
|
||||
u8 HeaderSize[2];
|
||||
u8 ProgramHeaderEntrySize[2];
|
||||
u8 ProgramHeaderEntryCount[2];
|
||||
u8 SectionTableEntrySize[2];
|
||||
u8 SectionHeaderEntryCount[2];
|
||||
u8 SectionHeaderNameEntryIndex[2];
|
||||
u8 magic[4];
|
||||
u8 bitFormat;
|
||||
u8 endianness;
|
||||
u8 elfVersion;
|
||||
u8 os;
|
||||
u8 padding0[8];
|
||||
u8 type[2];
|
||||
u8 targetArchitecture[2];
|
||||
u8 version[4];
|
||||
u8 entryPoint[4];
|
||||
u8 programHeaderTableOffset[4];
|
||||
u8 sectionHeaderTableOffset[4];
|
||||
u8 flags[4];
|
||||
u8 headerSize[2];
|
||||
u8 programHeaderEntrySize[2];
|
||||
u8 programHeaderEntryCount[2];
|
||||
u8 sectionTableEntrySize[2];
|
||||
u8 sectionHeaderEntryCount[2];
|
||||
u8 sectionHeaderNameEntryIndex[2];
|
||||
} elf_32_hdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 Magic[4];
|
||||
u8 BitFormat;
|
||||
u8 Endianness;
|
||||
u8 ELF_Version;
|
||||
u8 OS;
|
||||
u8 Padding_0[8];
|
||||
u8 Type[2];
|
||||
u8 TargetArchitecture[2];
|
||||
u8 Version[4];
|
||||
u8 EntryPoint[8];
|
||||
u8 ProgramHeaderTableOffset[8];
|
||||
u8 SectionHeaderTableOffset[8];
|
||||
u8 Flags[4];
|
||||
u8 HeaderSize[2];
|
||||
u8 ProgramHeaderEntrySize[2];
|
||||
u8 ProgramHeaderEntryCount[2];
|
||||
u8 SectionTableEntrySize[2];
|
||||
u8 SectionHeaderEntryCount[2];
|
||||
u8 SectionHeaderNameEntryIndex[2];
|
||||
u8 magic[4];
|
||||
u8 bitFormat;
|
||||
u8 endianness;
|
||||
u8 elfVersion;
|
||||
u8 os;
|
||||
u8 padding0[8];
|
||||
u8 type[2];
|
||||
u8 targetArchitecture[2];
|
||||
u8 version[4];
|
||||
u8 entryPoint[8];
|
||||
u8 programHeaderTableOffset[8];
|
||||
u8 sectionHeaderTableOffset[8];
|
||||
u8 flags[4];
|
||||
u8 headerSize[2];
|
||||
u8 programHeaderEntrySize[2];
|
||||
u8 programHeaderEntryCount[2];
|
||||
u8 sectionTableEntrySize[2];
|
||||
u8 sectionHeaderEntryCount[2];
|
||||
u8 sectionHeaderNameEntryIndex[2];
|
||||
} elf_64_hdr;
|
||||
|
||||
/* taken from elf specs, will not follow global style */
|
||||
|
||||
/* Section header. */
|
||||
|
||||
@@ -96,9 +97,9 @@ typedef struct
|
||||
#define SHT_LOSUNW 0x6ffffffb /* Sun-specific low bound. */
|
||||
#define SHT_SUNW_COMDAT 0x6ffffffb
|
||||
#define SHT_SUNW_syminfo 0x6ffffffc
|
||||
#define SHT_GNU_verdef 0x6ffffffd /* Version definition section. */
|
||||
#define SHT_GNU_verneed 0x6ffffffe /* Version needs section. */
|
||||
#define SHT_GNU_versym 0x6fffffff /* Version symbol table. */
|
||||
#define SHT_GNU_verdef 0x6ffffffd /* titleVersion definition section. */
|
||||
#define SHT_GNU_verneed 0x6ffffffe /* titleVersion needs section. */
|
||||
#define SHT_GNU_versym 0x6fffffff /* titleVersion symbol table. */
|
||||
#define SHT_HISUNW 0x6fffffff /* Sun-specific high bound. */
|
||||
#define SHT_HIOS 0x6fffffff /* End OS-specific type */
|
||||
#define SHT_LOPROC 0x70000000 /* Start of processor-specific */
|
||||
|
||||
@@ -17,30 +17,30 @@ int BuildExeFs(ncch_settings *ncchset)
|
||||
ExeFs_BuildContext *ctx = malloc(sizeof(ExeFs_BuildContext));
|
||||
if(!ctx) {fprintf(stderr,"[EXEFS ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
InitialiseExeFSContext(ctx);
|
||||
ctx->media_unit = ncchset->Options.MediaSize;
|
||||
ctx->media_unit = ncchset->options.mediaSize;
|
||||
|
||||
/* Importing ExeFs */
|
||||
if(ncchset->ExeFs_Sections.Code.size)
|
||||
ImportToExeFSContext(ctx,".code",ncchset->ExeFs_Sections.Code.buffer,ncchset->ExeFs_Sections.Code.size);
|
||||
if(ncchset->ExeFs_Sections.Banner.size)
|
||||
ImportToExeFSContext(ctx,"banner",ncchset->ExeFs_Sections.Banner.buffer,ncchset->ExeFs_Sections.Banner.size);
|
||||
if(ncchset->ExeFs_Sections.Icon.size)
|
||||
ImportToExeFSContext(ctx,"icon",ncchset->ExeFs_Sections.Icon.buffer,ncchset->ExeFs_Sections.Icon.size);
|
||||
if(ncchset->Sections.Logo.size && ncchset->Options.IncludeExeFsLogo)
|
||||
ImportToExeFSContext(ctx,"logo",ncchset->Sections.Logo.buffer,ncchset->Sections.Logo.size);
|
||||
if(ncchset->exefsSections.code.size)
|
||||
ImportToExeFSContext(ctx,".code",ncchset->exefsSections.code.buffer,ncchset->exefsSections.code.size);
|
||||
if(ncchset->exefsSections.banner.size)
|
||||
ImportToExeFSContext(ctx,"banner",ncchset->exefsSections.banner.buffer,ncchset->exefsSections.banner.size);
|
||||
if(ncchset->exefsSections.icon.size)
|
||||
ImportToExeFSContext(ctx,"icon",ncchset->exefsSections.icon.buffer,ncchset->exefsSections.icon.size);
|
||||
if(ncchset->sections.logo.size && ncchset->options.IncludeExeFsLogo)
|
||||
ImportToExeFSContext(ctx,"logo",ncchset->sections.logo.buffer,ncchset->sections.logo.size);
|
||||
|
||||
/* Allocating Memory for ExeFs */
|
||||
ncchset->Sections.ExeFs.size = PredictExeFS_Size(ctx);
|
||||
ncchset->Sections.ExeFs.buffer = malloc(ncchset->Sections.ExeFs.size);
|
||||
if(!ncchset->Sections.ExeFs.buffer){
|
||||
ncchset->sections.exeFs.size = PredictExeFS_Size(ctx);
|
||||
ncchset->sections.exeFs.buffer = malloc(ncchset->sections.exeFs.size);
|
||||
if(!ncchset->sections.exeFs.buffer){
|
||||
printf("[EXEFS ERROR] Could Not Allocate Memory for ExeFS\n");
|
||||
return Fail;
|
||||
}
|
||||
memset(ncchset->Sections.ExeFs.buffer,0,ncchset->Sections.ExeFs.size);
|
||||
memset(ncchset->sections.exeFs.buffer,0,ncchset->sections.exeFs.size);
|
||||
|
||||
/* Generating Header, and writing sections to buffer */
|
||||
GenerateExeFS_Header(ctx,ncchset->Sections.ExeFs.buffer);
|
||||
ImportDatatoExeFS(ctx,ncchset->Sections.ExeFs.buffer);
|
||||
GenerateExeFS_Header(ctx,ncchset->sections.exeFs.buffer);
|
||||
ImportDatatoExeFS(ctx,ncchset->sections.exeFs.buffer);
|
||||
|
||||
/* Finish */
|
||||
FreeExeFSContext(ctx);
|
||||
|
||||
+642
-528
File diff suppressed because it is too large
Load Diff
+105
-104
@@ -10,23 +10,23 @@ typedef enum
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ExeFsCodeCompress = 1,
|
||||
Compress = 1,
|
||||
RetailSDAppFlag = 2,
|
||||
} SystemInfoFlags_Flagbitmask;
|
||||
} system_info_flags;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
memtype_APPLICATION = 1,
|
||||
memtype_SYSTEM = 2,
|
||||
memtype_BASE = 3
|
||||
} MemoryTypeName;
|
||||
} memory_type;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
processtype_DEFAULT = -1,
|
||||
processtype_SYSTEM = 0,
|
||||
processtype_APPLICATION = 1
|
||||
} ProcessTypeName;
|
||||
} process_type;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -34,65 +34,65 @@ typedef enum
|
||||
resrc_limit_SYS_APPLET,
|
||||
resrc_limit_LIB_APPLET,
|
||||
resrc_limit_OTHER
|
||||
} ResourceLimitCategoryName;
|
||||
} resource_limit_category;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
othcap_PERMIT_DEBUG,
|
||||
othcap_FORCE_DEBUG,
|
||||
othcap_CAN_USE_NON_ALPHABET_AND_NUMBER,
|
||||
othcap_CAN_WRITE_SHARED_PAGE,
|
||||
othcap_CAN_USE_PRIVILEGE_PRIORITY,
|
||||
othcap_PERMIT_MAIN_FUNCTION_ARGUMENT,
|
||||
othcap_CAN_SHARE_DEVICE_MEMORY,
|
||||
othcap_RUNNABLE_ON_SLEEP,
|
||||
othcap_SPECIAL_MEMORY_ARRANGE = 12,
|
||||
} OtherCapabilities_Flagbitmask;
|
||||
othcap_PERMIT_DEBUG = (1 << 0),
|
||||
othcap_FORCE_DEBUG = (1 << 1),
|
||||
othcap_CAN_USE_NON_ALPHABET_AND_NUMBER = (1 << 2),
|
||||
othcap_CAN_WRITE_SHARED_PAGE = (1 << 3),
|
||||
othcap_CAN_USE_PRIVILEGE_PRIORITY = (1 << 4),
|
||||
othcap_PERMIT_MAIN_FUNCTION_ARGUMENT = (1 << 5),
|
||||
othcap_CAN_SHARE_DEVICE_MEMORY = (1 << 6),
|
||||
othcap_RUNNABLE_ON_SLEEP = (1 << 7),
|
||||
othcap_SPECIAL_MEMORY_ARRANGE = (1 << 12),
|
||||
} other_capabilities_flags;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
fsaccess_CATEGORY_SYSTEM_APPLICATION,
|
||||
fsaccess_CATEGORY_HARDWARE_CHECK,
|
||||
fsaccess_CATEGORY_FILE_SYSTEM_TOOL,
|
||||
fsaccess_DEBUG,
|
||||
fsaccess_TWL_CARD_BACKUP,
|
||||
fsaccess_TWL_NAND_DATA,
|
||||
fsaccess_BOSS,
|
||||
fsaccess_DIRECT_SDMC,
|
||||
fsaccess_CORE,
|
||||
fsaccess_CTR_NAND_RO,
|
||||
fsaccess_CTR_NAND_RW,
|
||||
fsaccess_CTR_NAND_RO_WRITE,
|
||||
fsaccess_CATEGORY_SYSTEM_SETTINGS,
|
||||
fsaccess_CARD_BOARD,
|
||||
fsaccess_EXPORT_IMPORT_IVS,
|
||||
fsaccess_DIRECT_SDMC_WRITE,
|
||||
fsaccess_SWITCH_CLEANUP,
|
||||
fsaccess_SAVE_DATA_MOVE,
|
||||
fsaccess_SHOP,
|
||||
fsaccess_SHELL,
|
||||
fsaccess_CATEGORY_HOME_MENU
|
||||
} FileSystemAccess;
|
||||
fsaccess_CATEGORY_SYSTEM_APPLICATION = (1 << 0), // 0x00000001
|
||||
fsaccess_CATEGORY_HARDWARE_CHECK = (1 << 1), // 0x00000002
|
||||
fsaccess_CATEGORY_FILE_SYSTEM_TOOL = (1 << 2), // 0x00000004
|
||||
fsaccess_DEBUG = (1 << 3), // 0x00000008
|
||||
fsaccess_TWL_CARD_BACKUP = (1 << 4), // 0x00000010
|
||||
fsaccess_TWL_NAND_DATA = (1 << 5), // 0x00000020
|
||||
fsaccess_BOSS = (1 << 6), // 0x00000040
|
||||
fsaccess_DIRECT_SDMC = (1 << 7), // 0x00000080
|
||||
fsaccess_CORE = (1 << 8), // 0x00000100
|
||||
fsaccess_CTR_NAND_RO = (1 << 9), // 0x00000200
|
||||
fsaccess_CTR_NAND_RW = (1 << 10), // 0x00000400
|
||||
fsaccess_CTR_NAND_RO_WRITE = (1 << 11), // 0x00000800
|
||||
fsaccess_CATEGORY_SYSTEM_SETTINGS = (1 << 12), // 0x00001000
|
||||
fsaccess_CARD_BOARD = (1 << 13), // 0x00002000
|
||||
fsaccess_EXPORT_IMPORT_IVS = (1 << 14), // 0x00004000
|
||||
fsaccess_DIRECT_SDMC_WRITE = (1 << 15), // 0x00008000
|
||||
fsaccess_SWITCH_CLEANUP = (1 << 16), // 0x00010000
|
||||
fsaccess_SAVE_DATA_MOVE = (1 << 17), // 0x00020000
|
||||
fsaccess_SHOP = (1 << 18), // 0x00040000
|
||||
fsaccess_SHELL = (1 << 19), // 0x00080000
|
||||
fsaccess_CATEGORY_HOME_MENU = (1 << 20), // 0x00100000
|
||||
} file_system_access;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
attribute_NOT_USE_ROMFS,
|
||||
attribute_USE_EXTENDED_SAVEDATA_ACCESS_CONTROL
|
||||
} AttributeName;
|
||||
attribute_NOT_USE_ROMFS = (1 << 0),
|
||||
attribute_USE_EXTENDED_SAVEDATA_ACCESS_CONTROL = (1 << 1),
|
||||
} attribute_name;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
arm9cap_FS_MOUNT_NAND,
|
||||
arm9cap_FS_MOUNT_NAND_RO_WRITE,
|
||||
arm9cap_FS_MOUNT_TWLN,
|
||||
arm9cap_FS_MOUNT_WNAND,
|
||||
arm9cap_FS_MOUNT_CARD_SPI,
|
||||
arm9cap_USE_SDIF3,
|
||||
arm9cap_CREATE_SEED,
|
||||
arm9cap_USE_CARD_SPI,
|
||||
arm9cap_SD_APPLICATION,
|
||||
arm9cap_USE_DIRECT_SDMC
|
||||
} Arm9Capability;
|
||||
arm9cap_FS_MOUNT_NAND = (1 << 0),
|
||||
arm9cap_FS_MOUNT_NAND_RO_WRITE = (1 << 1),
|
||||
arm9cap_FS_MOUNT_TWLN = (1 << 2),
|
||||
arm9cap_FS_MOUNT_WNAND = (1 << 3),
|
||||
arm9cap_FS_MOUNT_CARD_SPI = (1 << 4),
|
||||
arm9cap_USE_SDIF3 = (1 << 5),
|
||||
arm9cap_CREATE_SEED = (1 << 6),
|
||||
arm9cap_USE_CARD_SPI = (1 << 7),
|
||||
arm9cap_SD_APPLICATION = (1 << 8),
|
||||
arm9cap_USE_DIRECT_SDMC = (1 << 9),
|
||||
} arm9_capability;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -103,48 +103,48 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 Address[4]; // le u32
|
||||
u8 NumMaxPages[4]; // le u32
|
||||
u8 CodeSize[4]; // le u32
|
||||
u8 address[4]; // le u32
|
||||
u8 numMaxPages[4]; // le u32
|
||||
u8 codeSize[4]; // le u32
|
||||
} exhdr_CodeSegmentInfo;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 Name[8];
|
||||
exhdr_SystemInfoFlags Flags;
|
||||
exhdr_CodeSegmentInfo TextSectionInfo;
|
||||
u8 StackSize[4]; // le u32
|
||||
exhdr_CodeSegmentInfo ReadOnlySectionInfo;
|
||||
u8 Reserved[4];
|
||||
exhdr_CodeSegmentInfo DataSectionInfo;
|
||||
u8 BssSize[4]; // le u32
|
||||
u8 name[8];
|
||||
exhdr_SystemInfoFlags flags;
|
||||
exhdr_CodeSegmentInfo textSectionInfo;
|
||||
u8 stackSize[4]; // le u32
|
||||
exhdr_CodeSegmentInfo readOnlySectionInfo;
|
||||
u8 padding0[4];
|
||||
exhdr_CodeSegmentInfo dataSectionInfo;
|
||||
u8 bssSize[4]; // le u32
|
||||
} exhdr_CodeSetInfo;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 SaveDataSize[8];
|
||||
u8 JumpId[8];
|
||||
u8 Reserved[0x30];
|
||||
u8 savedataSize[8];
|
||||
u8 jumpId[8];
|
||||
u8 padding0[0x30];
|
||||
} exhdr_SystemInfo;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 ExtSaveDataId[8];
|
||||
u8 SystemSaveDataId[8];
|
||||
u8 StorageAccessableUniqueIds[8];
|
||||
u8 AccessInfo[7];
|
||||
u8 OtherAttributes;
|
||||
u8 extSavedataId[8];
|
||||
u8 systemSavedataId[8];
|
||||
u8 storageAccessableUniqueIds[8];
|
||||
u8 accessInfo[7];
|
||||
u8 otherAttributes;
|
||||
} exhdr_StorageInfo;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 ProgramId[8];
|
||||
u8 Flags[8];
|
||||
u8 ResourceLimitDescriptor[16][2];
|
||||
exhdr_StorageInfo StorageInfo;
|
||||
u8 ServiceAccessControl[32][8]; // Those char[8] svc handles
|
||||
u8 Reserved1[0x1f];
|
||||
u8 ResourceLimitCategory;
|
||||
u8 programId[8];
|
||||
u8 flags[8];
|
||||
u8 resourceLimitDescriptor[16][2];
|
||||
exhdr_StorageInfo storageInfo;
|
||||
u8 serviceAccessControl[32][8]; // Those char[8] svc handles
|
||||
u8 padding0[0x1f];
|
||||
u8 resourceLimitCategory;
|
||||
} exhdr_ARM11SystemLocalCapabilities;
|
||||
|
||||
typedef struct
|
||||
@@ -179,55 +179,56 @@ typedef struct
|
||||
{
|
||||
// systemcontrol info {
|
||||
// coreinfo {
|
||||
exhdr_CodeSetInfo CodeSetInfo;
|
||||
u8 DependencyList[0x30][8];
|
||||
exhdr_CodeSetInfo codeSetInfo;
|
||||
u8 dependencyList[0x30][8];
|
||||
// }
|
||||
exhdr_SystemInfo SystemInfo;
|
||||
exhdr_SystemInfo systemInfo;
|
||||
// }
|
||||
// accesscontrolinfo {
|
||||
exhdr_ARM11SystemLocalCapabilities ARM11SystemLocalCapabilities;
|
||||
exhdr_ARM11KernelCapabilities ARM11KernelCapabilities;
|
||||
exhdr_ARM9AccessControlInfo ARM9AccessControlInfo;
|
||||
exhdr_ARM11SystemLocalCapabilities arm11SystemLocalCapabilities;
|
||||
exhdr_ARM11KernelCapabilities arm11KernelCapabilities;
|
||||
exhdr_ARM9AccessControlInfo arm9AccessControlInfo;
|
||||
// }
|
||||
struct {
|
||||
u8 signature[0x100];
|
||||
u8 ncchpubkeymodulus[0x100];
|
||||
exhdr_ARM11SystemLocalCapabilities ARM11SystemLocalCapabilities;
|
||||
exhdr_ARM11KernelCapabilities ARM11KernelCapabilities;
|
||||
exhdr_ARM9AccessControlInfo ARM9AccessControlInfo;
|
||||
} AccessDescriptor;
|
||||
} ExtendedHeader_Struct;
|
||||
u8 ncchRsaPubKey[0x100];
|
||||
exhdr_ARM11SystemLocalCapabilities arm11SystemLocalCapabilities;
|
||||
exhdr_ARM11KernelCapabilities arm11KernelCapabilities;
|
||||
exhdr_ARM9AccessControlInfo arm9AccessControlInfo;
|
||||
} accessDescriptor;
|
||||
} extended_hdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
keys_struct *keys;
|
||||
rsf_settings *yaml;
|
||||
bool UseAccessDescPreset;
|
||||
rsf_settings *rsf;
|
||||
bool useAccessDescPreset;
|
||||
|
||||
/* Output */
|
||||
ExtendedHeader_Struct *ExHdr; // is the exheader output buffer ptr(in ncchset) cast as exheader struct ptr;
|
||||
extended_hdr *exHdr; // is the exheader output buffer ptr(in ncchset) cast as exheader struct ptr;
|
||||
} exheader_settings;
|
||||
|
||||
#endif
|
||||
/* ExHeader Signature Functions */
|
||||
int SignAccessDesc(ExtendedHeader_Struct *ExHdr, keys_struct *keys);
|
||||
int CheckAccessDescSignature(ExtendedHeader_Struct *ExHdr, keys_struct *keys);
|
||||
int SignAccessDesc(extended_hdr *ExHdr, keys_struct *keys);
|
||||
int CheckaccessDescSignature(extended_hdr *ExHdr, keys_struct *keys);
|
||||
|
||||
/* ExHeader Build Functions */
|
||||
int BuildExHeader(ncch_settings *ncchset);
|
||||
|
||||
/* ExHeader Binary Print Functions */
|
||||
void exhdr_Print_ServiceAccessControl(ExtendedHeader_Struct *hdr);
|
||||
void exhdr_Print_ServiceAccessControl(extended_hdr *hdr);
|
||||
|
||||
/* ExHeader Binary Read Functions */
|
||||
u8* GetAccessDescSig_frm_exhdr(ExtendedHeader_Struct *hdr);
|
||||
u8* GetNcchHdrPubKey_frm_exhdr(ExtendedHeader_Struct *hdr);
|
||||
u8* GetAccessDesc_frm_exhdr(ExtendedHeader_Struct *hdr);
|
||||
u16 GetRemasterVersion_frm_exhdr(ExtendedHeader_Struct *hdr);
|
||||
u64 GetSaveDataSize_frm_exhdr(ExtendedHeader_Struct *hdr);
|
||||
int GetDependancyList_frm_exhdr(u8 *Dest,ExtendedHeader_Struct *hdr);
|
||||
int GetCoreVersion_frm_exhdr(u8 *Dest, ExtendedHeader_Struct *hdr);
|
||||
u8* GetAccessDescSig_frm_exhdr(extended_hdr *hdr);
|
||||
u8* GetNcchHdrPubKey_frm_exhdr(extended_hdr *hdr);
|
||||
u8* GetAccessDesc_frm_exhdr(extended_hdr *hdr);
|
||||
u16 GetRemasterVersion_frm_exhdr(extended_hdr *hdr);
|
||||
u64 GetSaveDataSize_frm_exhdr(extended_hdr *hdr);
|
||||
int GetDependencyList_frm_exhdr(u8 *Dest,extended_hdr *hdr);
|
||||
int GetCoreVersion_frm_exhdr(u8 *Dest, extended_hdr *hdr);
|
||||
|
||||
/* ExHeader Settings Read from Yaml */
|
||||
int GetSaveDataSize_yaml(u64 *SaveDataSize, user_settings *usrset);
|
||||
int GetRemasterVersion_yaml(u16 *RemasterVersion, user_settings *usrset);
|
||||
int GetSaveDataSize_rsf(u64 *SaveDataSize, user_settings *usrset);
|
||||
int GetSaveDataSizeFromString(u64 *out, char *string);
|
||||
int GetRemasterVersion_rsf(u16 *RemasterVersion, user_settings *usrset);
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
#ifndef _KEYS_COMMON_H_
|
||||
#define _KEYS_COMMON_H_
|
||||
|
||||
// AES KEYS
|
||||
static const unsigned char zeros_fixed_aesKey[16] = //zeros_fixed_aesKey
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// RSA KEYS
|
||||
static const unsigned char Dummy_rsa_privExp[256] = //Dummy_rsa_privExp
|
||||
{
|
||||
0xE3, 0xC6, 0x76, 0x57, 0x2E, 0xCB, 0xA5, 0xE6,
|
||||
0x0C, 0x01, 0xBD, 0x5C, 0x32, 0x2D, 0x90, 0xE0,
|
||||
0xFF, 0x9A, 0x80, 0xE8, 0x66, 0x8D, 0x84, 0xDC,
|
||||
0xF7, 0x75, 0x5F, 0x3F, 0x98, 0x7C, 0x97, 0x40,
|
||||
0x20, 0x21, 0xB7, 0x24, 0xC0, 0x61, 0x2D, 0x83,
|
||||
0xB0, 0x91, 0x8E, 0xE3, 0xC2, 0xD0, 0x2C, 0xA1,
|
||||
0x2C, 0x99, 0x4F, 0x48, 0xF7, 0x4E, 0x13, 0xD3,
|
||||
0x01, 0x71, 0x25, 0x9B, 0x3C, 0x75, 0x7C, 0xC4,
|
||||
0xE5, 0x89, 0x7E, 0xDA, 0xF9, 0x99, 0x5C, 0x83,
|
||||
0xE4, 0xDD, 0x36, 0x62, 0x5B, 0x0E, 0x12, 0x91,
|
||||
0xD6, 0x39, 0x45, 0x69, 0x62, 0x20, 0xCA, 0xF4,
|
||||
0xBA, 0x6B, 0x28, 0x1A, 0x7C, 0xBF, 0xB9, 0x97,
|
||||
0x37, 0x46, 0xC2, 0x7A, 0xCF, 0x10, 0x68, 0xC2,
|
||||
0xC9, 0xF1, 0x48, 0xDA, 0x8A, 0x2F, 0x4C, 0xBC,
|
||||
0x3B, 0x1C, 0xB8, 0x8F, 0x04, 0x7F, 0xFD, 0x9D,
|
||||
0xE2, 0x0A, 0xD2, 0x09, 0x39, 0xC7, 0xD9, 0x81,
|
||||
0x59, 0x17, 0x73, 0xB2, 0xEC, 0xEB, 0x36, 0x67,
|
||||
0xA5, 0xA8, 0xD5, 0x71, 0xD9, 0x38, 0x6A, 0xD1,
|
||||
0x28, 0xB9, 0x46, 0x85, 0x3A, 0x81, 0x85, 0x4E,
|
||||
0x55, 0xA7, 0x74, 0x79, 0xBB, 0xC5, 0x97, 0xF7,
|
||||
0xEF, 0xE0, 0x81, 0x20, 0xE0, 0xEA, 0x45, 0x8F,
|
||||
0xED, 0x70, 0x8E, 0xD6, 0xFF, 0x49, 0xCF, 0x7F,
|
||||
0xF2, 0xFF, 0x22, 0x20, 0x3F, 0xE9, 0x92, 0x99,
|
||||
0xDE, 0x81, 0xD6, 0x27, 0xF7, 0xB8, 0x3A, 0x1D,
|
||||
0x4F, 0xA2, 0x50, 0xFB, 0xA5, 0xE7, 0x98, 0x08,
|
||||
0xB5, 0x2B, 0xA2, 0x94, 0xA9, 0x17, 0x1A, 0xA8,
|
||||
0x34, 0xF6, 0x5E, 0x24, 0x2D, 0x40, 0x2F, 0xCB,
|
||||
0x3C, 0xB0, 0xF8, 0x7E, 0x84, 0xB4, 0x87, 0x82,
|
||||
0x19, 0xAF, 0x87, 0xB6, 0xFA, 0xA9, 0x67, 0x27,
|
||||
0x07, 0x28, 0xBA, 0x2E, 0xA5, 0x8E, 0xDD, 0xE5,
|
||||
0xD4, 0xFD, 0x06, 0x09, 0xDF, 0xBD, 0x87, 0x95,
|
||||
0x95, 0x25, 0x05, 0x5E, 0xB2, 0x00, 0x18, 0x41
|
||||
};
|
||||
|
||||
static const unsigned char Dummy_rsa_pubMod[256] = //Dummy_rsa_pubMod
|
||||
{
|
||||
0xE6, 0x64, 0x06, 0x6C, 0x49, 0x6B, 0xEC, 0xEE,
|
||||
0x59, 0xAE, 0x11, 0x92, 0xF1, 0x03, 0x43, 0x87,
|
||||
0x8E, 0xEB, 0x4D, 0x70, 0xA9, 0x71, 0xB4, 0x6D,
|
||||
0x25, 0x19, 0x02, 0x4A, 0x9E, 0x4D, 0xA3, 0x10,
|
||||
0xFD, 0xB2, 0x27, 0x56, 0xA3, 0xFB, 0xDD, 0xE5,
|
||||
0xE4, 0x4E, 0xE0, 0x62, 0x8F, 0xC3, 0x2E, 0xEE,
|
||||
0x8F, 0x9D, 0x4D, 0x6E, 0x00, 0xDB, 0x88, 0x49,
|
||||
0xA2, 0xFC, 0x30, 0xFE, 0x94, 0xF3, 0x06, 0x92,
|
||||
0x75, 0x61, 0x11, 0x1D, 0x24, 0x07, 0xE9, 0x12,
|
||||
0xB6, 0xB1, 0x57, 0xF5, 0xDC, 0x01, 0xF7, 0x54,
|
||||
0xBF, 0xC3, 0xAC, 0x8C, 0x73, 0x2C, 0x73, 0x17,
|
||||
0x8E, 0xBF, 0x2F, 0x68, 0x3C, 0x61, 0x75, 0x32,
|
||||
0x15, 0x39, 0x93, 0xDD, 0xBA, 0x12, 0x42, 0xD3,
|
||||
0x25, 0x85, 0xFA, 0xA6, 0x4B, 0xAF, 0x81, 0x4B,
|
||||
0xCA, 0xD2, 0x9C, 0xF1, 0x3D, 0x37, 0xAE, 0xB9,
|
||||
0xFD, 0x77, 0x59, 0x78, 0xB9, 0x32, 0x95, 0x19,
|
||||
0xD1, 0x47, 0xE1, 0xC6, 0xE1, 0x16, 0x13, 0x5D,
|
||||
0xCC, 0x99, 0x31, 0x63, 0xAD, 0xBB, 0xA5, 0x4F,
|
||||
0xE4, 0x41, 0x67, 0xFD, 0x7F, 0x1E, 0xA8, 0x9A,
|
||||
0x35, 0x65, 0xEB, 0xC4, 0x4D, 0xD4, 0xC4, 0x29,
|
||||
0x0F, 0x40, 0x95, 0xFD, 0x8A, 0x30, 0x67, 0x79,
|
||||
0xFB, 0xD4, 0x76, 0x6F, 0xD1, 0xDE, 0x8C, 0x72,
|
||||
0x32, 0x05, 0x97, 0x5A, 0x26, 0x0D, 0x37, 0xCA,
|
||||
0x12, 0x2C, 0xDC, 0x14, 0x3F, 0xD3, 0x59, 0x00,
|
||||
0x66, 0xD2, 0x8E, 0xF5, 0x6E, 0x22, 0x08, 0x63,
|
||||
0x59, 0xB5, 0x3F, 0xBB, 0x3A, 0x4D, 0xD4, 0xD1,
|
||||
0xC1, 0x21, 0xA7, 0x4D, 0x02, 0x96, 0x08, 0xF5,
|
||||
0x2B, 0x11, 0xE5, 0x85, 0xD2, 0x6E, 0x91, 0xD6,
|
||||
0x8F, 0x77, 0x72, 0xEF, 0x37, 0xE3, 0x79, 0x19,
|
||||
0xA9, 0xEE, 0x58, 0x5D, 0x52, 0x9B, 0x2D, 0x47,
|
||||
0x7D, 0x27, 0xB8, 0xC3, 0x76, 0xCA, 0xDA, 0xC2,
|
||||
0xF4, 0xFC, 0xF4, 0x53, 0x7C, 0xD8, 0x43, 0x87
|
||||
};
|
||||
#endif
|
||||
@@ -1,21 +1,22 @@
|
||||
#include "lib.h"
|
||||
|
||||
// KeyData
|
||||
#include "keys_common.h"
|
||||
#include "keys_retail.h"
|
||||
#include "tpki.h" // Test PKI
|
||||
#ifndef PUBLIC_BUILD
|
||||
#include "keys_debug.h"
|
||||
#include "ppki.h" // Production PKI
|
||||
#include "dpki.h" // Development PKI
|
||||
#endif
|
||||
|
||||
// Private Prototypes
|
||||
int SetRsaKeySet(u8 **PrivDest, u8 *PrivSource, u8 **PubDest, u8 *PubSource);
|
||||
int SetUnFixedKey(keys_struct *keys, u8 *UnFixedKey);
|
||||
void InitCommonKeySlots(keys_struct *keys);
|
||||
int SetunFixedKey(keys_struct *keys, u8 *unFixedKey);
|
||||
void InitcommonKeySlots(keys_struct *keys);
|
||||
|
||||
FILE* keyset_OpenFile(char *dir, char *name, bool FileRequired);
|
||||
|
||||
int SetTIK_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod);
|
||||
int SetTMD_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod);
|
||||
int SetCFA_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod);
|
||||
int SetCCI_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod);
|
||||
int Set_CCI_CFA_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod);
|
||||
int SetAccessDesc_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod);
|
||||
int SetCXI_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod);
|
||||
|
||||
@@ -28,111 +29,407 @@ int SetTmdCert(keys_struct *keys, u8 *Cert);
|
||||
void InitKeys(keys_struct *keys)
|
||||
{
|
||||
memset(keys,0,sizeof(keys_struct));
|
||||
InitCommonKeySlots(keys);
|
||||
InitcommonKeySlots(keys);
|
||||
keys->rsa.cxiHdrPub = malloc(RSA_2048_KEY_SIZE);
|
||||
keys->rsa.cxiHdrPvt = malloc(RSA_2048_KEY_SIZE);
|
||||
keys->aes.supportUnFixedKeys = false;
|
||||
keys->aes.unFixedKey0 = malloc(16);
|
||||
keys->aes.unFixedKey1 = malloc(16);
|
||||
}
|
||||
|
||||
void SetKeys(keys_struct *keys)
|
||||
void PrintBadKeySize(char *path, u32 size)
|
||||
{
|
||||
if(keys->keyset == keyset_RETAIL){
|
||||
fprintf(stderr,"[KEYSET ERROR] %s is has invalid size (0x%x)\n",path,size);
|
||||
}
|
||||
|
||||
int SetKeys(keys_struct *keys)
|
||||
{
|
||||
if(keys->keyset == pki_TEST){ // Ergo False Sign
|
||||
/* AES Keys */
|
||||
// CIA
|
||||
//SetCommonKey(keys,(u8*)zeros_fixed_aesKey,1);
|
||||
SetCurrentCommonKey(keys,1);
|
||||
//SetcommonKey(keys,(u8*)zeros_aesKey,1);
|
||||
if(keys->aes.currentCommonKey > 0xff)
|
||||
SetcurrentCommonKey(keys,0);
|
||||
|
||||
// NCCH
|
||||
keys->aes.NormalKey = (u8*)zeros_fixed_aesKey;
|
||||
SetSystemFixedKey(keys,(u8*)system_fixed_aesKey);
|
||||
keys->aes.normalKey = (u8*)zeros_aesKey;
|
||||
|
||||
/* RSA Keys */
|
||||
keys->rsa.FalseSign = true;
|
||||
keys->rsa.isFalseSign = true;
|
||||
// CIA
|
||||
SetTIK_RsaKey(keys,(u8*)Dummy_rsa_privExp,(u8*)Dummy_rsa_pubMod);
|
||||
SetTMD_RsaKey(keys,(u8*)Dummy_rsa_privExp,(u8*)Dummy_rsa_pubMod);
|
||||
// CFA
|
||||
SetCFA_RsaKey(keys,(u8*)Dummy_rsa_privExp,(u8*)Dummy_rsa_pubMod);
|
||||
// CCI
|
||||
SetCCI_RsaKey(keys,(u8*)Dummy_rsa_privExp,(u8*)Dummy_rsa_pubMod);
|
||||
SetTIK_RsaKey(keys,(u8*)tpki_rsa_privExp,(u8*)tpki_rsa_pubMod);
|
||||
SetTMD_RsaKey(keys,(u8*)tpki_rsa_privExp,(u8*)tpki_rsa_pubMod);
|
||||
// CCI/CFA
|
||||
Set_CCI_CFA_RsaKey(keys,(u8*)tpki_rsa_privExp,(u8*)tpki_rsa_pubMod);
|
||||
// CXI
|
||||
SetAccessDesc_RsaKey(keys,(u8*)Dummy_rsa_privExp,(u8*)Dummy_rsa_pubMod);
|
||||
SetAccessDesc_RsaKey(keys,(u8*)tpki_rsa_privExp,(u8*)tpki_rsa_pubMod);
|
||||
|
||||
/* Certs */
|
||||
SetCaCert(keys,(u8*)ca3_dpki_cert);
|
||||
SetTikCert(keys,(u8*)xsC_dpki_cert);
|
||||
SetTmdCert(keys,(u8*)cpB_dpki_cert);
|
||||
SetCaCert(keys,(u8*)ca3_tpki_cert);
|
||||
SetTikCert(keys,(u8*)xsC_tpki_cert);
|
||||
SetTmdCert(keys,(u8*)cpB_tpki_cert);
|
||||
}
|
||||
#ifndef PUBLIC_BUILD
|
||||
else if(keys->keyset == keyset_DEBUG){
|
||||
/* AES Keys */
|
||||
// CIA
|
||||
SetCommonKey(keys,(u8*)ctr_aes_common_key_dev0,0);
|
||||
SetCommonKey(keys,(u8*)ctr_aes_common_key_dev1,1);
|
||||
SetCurrentCommonKey(keys,0);
|
||||
else if(keys->keyset == pki_CUSTOM){
|
||||
int keydir_pathlen = strlen(keys->keydir);
|
||||
char *path = NULL;
|
||||
#ifdef _WIN32
|
||||
char slash = '\\';
|
||||
#else
|
||||
char slash = '/';
|
||||
#endif
|
||||
if(keys->keydir[keydir_pathlen-1] != slash){
|
||||
path = malloc(sizeof(char)*(keydir_pathlen+1));
|
||||
memset(path,0,sizeof(char)*(keydir_pathlen+1));
|
||||
sprintf(path,"%s%c",keys->keydir,slash);
|
||||
}
|
||||
else{
|
||||
path = malloc(sizeof(char)*(keydir_pathlen));
|
||||
memset(path,0,sizeof(char)*(keydir_pathlen));
|
||||
sprintf(path,"%s",keys->keydir);
|
||||
}
|
||||
|
||||
FILE *fp = NULL;
|
||||
|
||||
// NCCH
|
||||
keys->aes.NormalKey = (u8*)zeros_fixed_aesKey;
|
||||
SetSystemFixedKey(keys,(u8*)system_fixed_aesKey);
|
||||
keys->aes.normalKey = (u8*)zeros_aesKey;
|
||||
fp = keyset_OpenFile(path,"systemfixed.aesKey",false);
|
||||
if(fp){
|
||||
keys->aes.systemFixedKey = malloc(16);
|
||||
fread(keys->aes.systemFixedKey,16,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
// commonKeys
|
||||
char common_key_name[30];
|
||||
for(int i = 0; i < 256; i++){
|
||||
memset(common_key_name,0,sizeof(char)*30);
|
||||
sprintf(common_key_name,"common_etd_%d.aesKey",i);
|
||||
fp = keyset_OpenFile(path,common_key_name,false);
|
||||
if(fp){
|
||||
keys->aes.commonKey[i] = malloc(16);
|
||||
fread(keys->aes.commonKey[i],16,1,fp);
|
||||
if(keys->aes.currentCommonKey > 0xff)
|
||||
SetcurrentCommonKey(keys,i);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
// Certs
|
||||
fp = keyset_OpenFile(path,"ca_cpki.cert",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
keys->certs.caCert = malloc(size);
|
||||
fread(keys->certs.caCert,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
fp = keyset_OpenFile(path,"xs_cpki.cert",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
keys->certs.xsCert = malloc(size);
|
||||
fread(keys->certs.xsCert,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
fp = keyset_OpenFile(path,"cp_cpki.cert",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
keys->certs.cpCert = malloc(size);
|
||||
fread(keys->certs.cpCert,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
// RSA Keys
|
||||
fp = keyset_OpenFile(path,"cp_cpki.rsaPubKey",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
if(size != RSA_2048_KEY_SIZE){
|
||||
PrintBadKeySize("cp_cpki.rsaPubKey",size);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
keys->rsa.cpPub = malloc(size);
|
||||
fread(keys->rsa.cpPub,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
fp = keyset_OpenFile(path,"cp_cpki.rsaPvtKey",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
if(size != RSA_2048_KEY_SIZE){
|
||||
PrintBadKeySize("cp_cpki.rsaPvtKey",size);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
keys->rsa.cpPvt = malloc(size);
|
||||
fread(keys->rsa.cpPvt,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
fp = keyset_OpenFile(path,"xs_cpki.rsaPubKey",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
if(size != RSA_2048_KEY_SIZE){
|
||||
PrintBadKeySize("xs_cpki.rsaPubKey",size);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
keys->rsa.xsPub = malloc(size);
|
||||
fread(keys->rsa.xsPub,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
fp = keyset_OpenFile(path,"xs_cpki.rsaPvtKey",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
if(size != RSA_2048_KEY_SIZE){
|
||||
PrintBadKeySize("xs_cpki.rsaPvtKey",size);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
keys->rsa.xsPvt = malloc(size);
|
||||
fread(keys->rsa.xsPvt,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
fp = keyset_OpenFile(path,"ncsd_cfa.rsaPubKey",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
if(size != RSA_2048_KEY_SIZE){
|
||||
PrintBadKeySize("ncsd_cfa.rsaPubKey",size);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
keys->rsa.cciCfaPub = malloc(size);
|
||||
fread(keys->rsa.cciCfaPub,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
fp = keyset_OpenFile(path,"ncsd_cfa.rsaPvtKey",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
if(size != RSA_2048_KEY_SIZE){
|
||||
PrintBadKeySize("ncsd_cfa.rsaPvtKey",size);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
keys->rsa.cciCfaPvt = malloc(size);
|
||||
fread(keys->rsa.cciCfaPvt,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
fp = keyset_OpenFile(path,"acex.rsaPubKey",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
if(size != RSA_2048_KEY_SIZE){
|
||||
PrintBadKeySize("acex.rsaPubKey",size);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
keys->rsa.acexPub = malloc(size);
|
||||
fread(keys->rsa.acexPub,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
fp = keyset_OpenFile(path,"acex.rsaPvtKey",true);
|
||||
if(fp){
|
||||
u32 size = GetFileSize_u32(fp);
|
||||
if(size != RSA_2048_KEY_SIZE){
|
||||
PrintBadKeySize("acex.rsaPvtKey",size);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
keys->rsa.acexPvt = malloc(size);
|
||||
fread(keys->rsa.acexPvt,size,1,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stdout,"[DEBUG] Set Keys, free path now\n");
|
||||
#endif
|
||||
|
||||
free(path);
|
||||
#ifdef DEBUG
|
||||
fprintf(stdout,"[DEBUG] freed path\n");
|
||||
#endif
|
||||
}
|
||||
#ifndef PUBLIC_BUILD
|
||||
else if(keys->keyset == pki_DEVELOPMENT){
|
||||
/* AES Keys */
|
||||
// CIA
|
||||
for(int i = 0; i < 2; i++){
|
||||
SetcommonKey(keys,(u8*)ctr_common_etd_key_dpki[i],i);
|
||||
}
|
||||
if(keys->aes.currentCommonKey > 0xff)
|
||||
SetcurrentCommonKey(keys,0);
|
||||
|
||||
// NCCH
|
||||
keys->aes.normalKey = (u8*)ctr_fixed_ncch_key_dpki[0];
|
||||
SetsystemFixedKey(keys,(u8*)ctr_fixed_ncch_key_dpki[1]);
|
||||
keys->aes.supportUnFixedKeys = true;
|
||||
keys->aes.ncchKeyX0 = (u8*)ctr_unfixed_ncch_keyX_dpki[0];
|
||||
keys->aes.ncchKeyX1 = (u8*)ctr_unfixed_ncch_keyX_dpki[1];
|
||||
|
||||
/* RSA Keys */
|
||||
// CIA
|
||||
SetTIK_RsaKey(keys,(u8*)xs9_dpki_rsa_privExp,(u8*)xs9_dpki_rsa_pubMod);
|
||||
SetTMD_RsaKey(keys,(u8*)cpA_dpki_rsa_privExp,(u8*)cpA_dpki_rsa_pubMod);
|
||||
// CFA
|
||||
SetCFA_RsaKey(keys,(u8*)DevNcsdCfa_privExp,(u8*)DevNcsdCfa_pubMod);
|
||||
// CCI
|
||||
SetCCI_RsaKey(keys,(u8*)DevNcsdCfa_privExp,(u8*)DevNcsdCfa_pubMod);
|
||||
SetTIK_RsaKey(keys,(u8*)xs9_dpki_rsa_priv,(u8*)xs9_dpki_rsa_pub);
|
||||
SetTMD_RsaKey(keys,(u8*)cpA_dpki_rsa_priv,(u8*)cpA_dpki_rsa_pub);
|
||||
// CCI/CFA
|
||||
Set_CCI_CFA_RsaKey(keys,(u8*)dev_ncsd_cfa_priv,(u8*)dev_ncsd_cfa_pub);
|
||||
// CXI
|
||||
SetAccessDesc_RsaKey(keys,(u8*)AccessDesc_privExp,(u8*)AccessDesc_pubMod);
|
||||
SetAccessDesc_RsaKey(keys,(u8*)dev_acex_priv,(u8*)dev_acex_pub);
|
||||
|
||||
/* Certs */
|
||||
SetCaCert(keys,(u8*)ca4_dpki_cert);
|
||||
SetTikCert(keys,(u8*)xs9_dpki_cert);
|
||||
SetTmdCert(keys,(u8*)cpA_dpki_cert);
|
||||
}
|
||||
else if(keys->keyset == pki_PRODUCTION){
|
||||
/* AES Keys */
|
||||
// CIA
|
||||
for(int i = 0; i < 6; i++){
|
||||
keys->aes.commonKey[i] = AesKeyScrambler((u8*)ctr_common_etd_keyX_ppki,(u8*)ctr_common_etd_keyY_ppki[i]);
|
||||
}
|
||||
SetcurrentCommonKey(keys,1);
|
||||
|
||||
// NCCH
|
||||
keys->aes.normalKey = (u8*)zeros_aesKey;
|
||||
/*
|
||||
keys->aes.supportUnFixedKeys = true;
|
||||
keys->aes.ncchKeyX0 = (u8*)ctr_unfixed_ncch_keyX_ppki[0];
|
||||
keys->aes.ncchKeyX1 = (u8*)ctr_unfixed_ncch_keyX_ppki[1];
|
||||
*/
|
||||
|
||||
/* RSA Keys */
|
||||
// CIA
|
||||
SetTIK_RsaKey(keys,(u8*)xsC_ppki_rsa_priv,(u8*)xsC_ppki_rsa_pub);
|
||||
SetTMD_RsaKey(keys,(u8*)cpB_ppki_rsa_priv,(u8*)cpB_ppki_rsa_pub);
|
||||
// CCI/CFA
|
||||
Set_CCI_CFA_RsaKey(keys,(u8*)prod_ncsd_cfa_priv,(u8*)prod_ncsd_cfa_pub);
|
||||
// CXI
|
||||
SetAccessDesc_RsaKey(keys,(u8*)prod_acex_priv,(u8*)prod_acex_pub);
|
||||
|
||||
/* Certs */
|
||||
SetCaCert(keys,(u8*)ca3_ppki_cert);
|
||||
SetTikCert(keys,(u8*)xsC_ppki_cert);
|
||||
SetTmdCert(keys,(u8*)cpB_ppki_cert);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
fprintf(stdout,"[DEBUG] Checking if access desc\n");
|
||||
#endif
|
||||
// Checking if AccessDesc can be signed
|
||||
u8 *tmp = malloc(0x100);
|
||||
memset(tmp,0,0x100);
|
||||
if(memcmp(tmp,keys->rsa.AccessDesc_Priv,0x100) == 0)
|
||||
keys->rsa.RequiresPresignedDesc = true;
|
||||
if(memcmp(tmp,keys->rsa.acexPvt,0x100) == 0)
|
||||
keys->rsa.requiresPresignedDesc = true;
|
||||
else
|
||||
keys->rsa.RequiresPresignedDesc = false;
|
||||
keys->rsa.requiresPresignedDesc = false;
|
||||
|
||||
free(tmp);
|
||||
|
||||
return;
|
||||
|
||||
if(keys->dumpkeys)
|
||||
{
|
||||
printf("[+] Keys\n");
|
||||
|
||||
printf(" > eTicket Common Keys\n");
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
if(keys->aes.commonKey[i])
|
||||
{
|
||||
printf(" [0x%02x] ",i);
|
||||
memdump(stdout,"",keys->aes.commonKey[i],16);
|
||||
}
|
||||
}
|
||||
printf(" > Fixed NCCH Keys\n");
|
||||
memdump(stdout," [Normal] ",keys->aes.normalKey,16);
|
||||
if(keys->aes.systemFixedKey)
|
||||
memdump(stdout," [System] ",keys->aes.systemFixedKey,16);
|
||||
printf(" > TIK RSA Keys\n");
|
||||
memdump(stdout," [PUB] ",keys->rsa.xsPub,0x100);
|
||||
memdump(stdout," [PVT] ",keys->rsa.xsPvt,0x100);
|
||||
printf(" > TMD RSA Keys\n");
|
||||
memdump(stdout," [PUB] ",keys->rsa.cpPub,0x100);
|
||||
memdump(stdout," [PVT] ",keys->rsa.cpPvt,0x100);
|
||||
printf(" > AcexDesc RSA Keys\n");
|
||||
memdump(stdout," [PUB] ",keys->rsa.acexPub,0x100);
|
||||
memdump(stdout," [PVT] ",keys->rsa.acexPvt,0x100);
|
||||
printf(" > NcsdCfa RSA Keys\n");
|
||||
memdump(stdout," [PUB] ",keys->rsa.cciCfaPub,0x100);
|
||||
memdump(stdout," [PVT] ",keys->rsa.cciCfaPvt,0x100);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stdout,"[DEBUG] Done setting keys\n");
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE* keyset_OpenFile(char *dir, char *name, bool FileRequired)
|
||||
{
|
||||
int file_path_len = sizeof(char)*(strlen(dir)+strlen(name)+1);
|
||||
char *file_path = malloc(file_path_len);
|
||||
memset(file_path,0,file_path_len);
|
||||
|
||||
sprintf(file_path,"%s%s",dir,name);
|
||||
|
||||
FILE *fp = fopen(file_path,"rb");
|
||||
|
||||
if(!fp && FileRequired)
|
||||
fprintf(stderr,"[KEYSET ERROR] Failed to open: %s\n",file_path);
|
||||
|
||||
free(file_path);
|
||||
return fp;
|
||||
}
|
||||
|
||||
void FreeKeys(keys_struct *keys)
|
||||
{
|
||||
// AES
|
||||
if(keys->aes.CommonKey){
|
||||
if(keys->aes.commonKey){
|
||||
for(int i = 0; i < 256; i++){
|
||||
free(keys->aes.CommonKey[i]);
|
||||
free(keys->aes.commonKey[i]);
|
||||
}
|
||||
}
|
||||
free(keys->aes.CommonKey);
|
||||
free(keys->aes.SystemFixedKey);
|
||||
free(keys->aes.UnFixedKey);
|
||||
free(keys->aes.commonKey);
|
||||
free(keys->aes.systemFixedKey);
|
||||
free(keys->aes.unFixedKey0);
|
||||
free(keys->aes.unFixedKey1);
|
||||
|
||||
// RSA
|
||||
free(keys->rsa.TIK_Priv);
|
||||
free(keys->rsa.TIK_Pub);
|
||||
free(keys->rsa.TMD_Priv);
|
||||
free(keys->rsa.TMD_Pub);
|
||||
free(keys->rsa.xsPvt);
|
||||
free(keys->rsa.xsPub);
|
||||
free(keys->rsa.cpPvt);
|
||||
free(keys->rsa.cpPub);
|
||||
|
||||
free(keys->rsa.CFA_Priv);
|
||||
free(keys->rsa.CFA_Pub);
|
||||
free(keys->rsa.cciCfaPvt);
|
||||
free(keys->rsa.cciCfaPub);
|
||||
|
||||
free(keys->rsa.CCI_Priv);
|
||||
free(keys->rsa.CCI_Pub);
|
||||
|
||||
free(keys->rsa.AccessDesc_Priv);
|
||||
free(keys->rsa.AccessDesc_Pub);
|
||||
free(keys->rsa.acexPvt);
|
||||
free(keys->rsa.acexPub);
|
||||
free(keys->rsa.cxiHdrPub);
|
||||
free(keys->rsa.cxiHdrPvt);
|
||||
|
||||
// Certs
|
||||
free(keys->certs.ca_cert);
|
||||
free(keys->certs.tik_cert);
|
||||
free(keys->certs.tmd_cert);
|
||||
free(keys->certs.caCert);
|
||||
free(keys->certs.xsCert);
|
||||
free(keys->certs.cpCert);
|
||||
memset(keys,0,sizeof(keys_struct));
|
||||
}
|
||||
|
||||
@@ -150,82 +447,70 @@ int SetRsaKeySet(u8 **PrivDest, u8 *PrivSource, u8 **PubDest, u8 *PubSource)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SetCommonKey(keys_struct *keys, u8 *CommonKey, u8 Index)
|
||||
int SetcommonKey(keys_struct *keys, u8 *commonKey, u8 Index)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return CopyData(&keys->aes.CommonKey[Index],CommonKey,16);
|
||||
return CopyData(&keys->aes.commonKey[Index],commonKey,16);
|
||||
}
|
||||
|
||||
void InitCommonKeySlots(keys_struct *keys)
|
||||
void InitcommonKeySlots(keys_struct *keys)
|
||||
{
|
||||
if(!keys->aes.CommonKey){
|
||||
keys->aes.CommonKey = malloc(sizeof(u8*)*256);
|
||||
memset(keys->aes.CommonKey,0,sizeof(u8*)*256);
|
||||
if(!keys->aes.commonKey){
|
||||
keys->aes.commonKey = malloc(sizeof(u8*)*256);
|
||||
memset(keys->aes.commonKey,0,sizeof(u8*)*256);
|
||||
}
|
||||
}
|
||||
|
||||
int SetCurrentCommonKey(keys_struct *keys, u8 Index)
|
||||
int SetcurrentCommonKey(keys_struct *keys, u8 Index)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
keys->aes.CurrentCommonKey = Index;
|
||||
keys->aes.currentCommonKey = Index;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SetSystemFixedKey(keys_struct *keys, u8 *SystemFixedKey)
|
||||
int SetsystemFixedKey(keys_struct *keys, u8 *systemFixedKey)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return CopyData(&keys->aes.SystemFixedKey,SystemFixedKey,16);
|
||||
}
|
||||
|
||||
int SetUnFixedKey(keys_struct *keys, u8 *UnFixedKey)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return CopyData(&keys->aes.UnFixedKey,UnFixedKey,16);
|
||||
return CopyData(&keys->aes.systemFixedKey,systemFixedKey,16);
|
||||
}
|
||||
|
||||
int SetTIK_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return SetRsaKeySet(&keys->rsa.TIK_Priv,PrivateExp,&keys->rsa.TIK_Pub,PublicMod);
|
||||
return SetRsaKeySet(&keys->rsa.xsPvt,PrivateExp,&keys->rsa.xsPub,PublicMod);
|
||||
}
|
||||
|
||||
int SetTMD_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return SetRsaKeySet(&keys->rsa.TMD_Priv,PrivateExp,&keys->rsa.TMD_Pub,PublicMod);
|
||||
return SetRsaKeySet(&keys->rsa.cpPvt,PrivateExp,&keys->rsa.cpPub,PublicMod);
|
||||
}
|
||||
|
||||
int SetCFA_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod)
|
||||
int Set_CCI_CFA_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return SetRsaKeySet(&keys->rsa.CFA_Priv,PrivateExp,&keys->rsa.CFA_Pub,PublicMod);
|
||||
}
|
||||
|
||||
int SetCCI_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return SetRsaKeySet(&keys->rsa.CCI_Priv,PrivateExp,&keys->rsa.CCI_Pub,PublicMod);
|
||||
return SetRsaKeySet(&keys->rsa.cciCfaPvt,PrivateExp,&keys->rsa.cciCfaPub,PublicMod);
|
||||
}
|
||||
|
||||
int SetAccessDesc_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return SetRsaKeySet(&keys->rsa.AccessDesc_Priv,PrivateExp,&keys->rsa.AccessDesc_Pub,PublicMod);
|
||||
return SetRsaKeySet(&keys->rsa.acexPvt,PrivateExp,&keys->rsa.acexPub,PublicMod);
|
||||
}
|
||||
|
||||
int SetCaCert(keys_struct *keys, u8 *Cert)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return CopyData(&keys->certs.ca_cert,Cert,0x400);
|
||||
return CopyData(&keys->certs.caCert,Cert,0x400);
|
||||
}
|
||||
int SetTikCert(keys_struct *keys, u8 *Cert)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return CopyData(&keys->certs.tik_cert,Cert,0x300);
|
||||
return CopyData(&keys->certs.xsCert,Cert,0x300);
|
||||
}
|
||||
|
||||
int SetTmdCert(keys_struct *keys, u8 *Cert)
|
||||
{
|
||||
if(!keys) return -1;
|
||||
return CopyData(&keys->certs.tmd_cert,Cert,0x400);
|
||||
return CopyData(&keys->certs.cpCert,Cert,0x400);
|
||||
}
|
||||
@@ -3,14 +3,25 @@
|
||||
|
||||
typedef enum
|
||||
{
|
||||
keyset_DEBUG,
|
||||
keyset_RETAIL,
|
||||
} keysets;
|
||||
RSA_1024_KEY_SIZE = 0x80,
|
||||
RSA_2048_KEY_SIZE = 0x100,
|
||||
RSA_4096_KEY_SIZE = 0x200,
|
||||
} rsa_keysize;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
pki_TEST,
|
||||
pki_BETA,
|
||||
pki_DEVELOPMENT,
|
||||
pki_PRODUCTION,
|
||||
pki_CUSTOM,
|
||||
} pki_keyset;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
not_preset,
|
||||
app,
|
||||
ec_app,
|
||||
dlp,
|
||||
demo,
|
||||
} fixed_accessdesc_type;
|
||||
@@ -19,55 +30,61 @@ typedef enum
|
||||
|
||||
typedef struct
|
||||
{
|
||||
keysets keyset;
|
||||
char *keydir;
|
||||
pki_keyset keyset;
|
||||
|
||||
bool dumpkeys;
|
||||
|
||||
struct
|
||||
{
|
||||
fixed_accessdesc_type PresetType;
|
||||
u32 TargetFirmware;
|
||||
} AccessDescSign;
|
||||
fixed_accessdesc_type presetType;
|
||||
u32 targetFirmware;
|
||||
} accessDescSign;
|
||||
|
||||
struct
|
||||
{
|
||||
// CIA
|
||||
u8 **CommonKey;
|
||||
u8 CurrentCommonKey;
|
||||
u8 **commonKey;
|
||||
u16 currentCommonKey;
|
||||
|
||||
// NCCH Keys
|
||||
u8 *NormalKey;
|
||||
u8 *SystemFixedKey;
|
||||
u8 *UnFixedKey;
|
||||
u8 *normalKey;
|
||||
u8 *systemFixedKey;
|
||||
|
||||
bool supportUnFixedKeys;
|
||||
u8 *ncchKeyX0;
|
||||
u8 *ncchKeyX1;
|
||||
u8 *unFixedKey0;
|
||||
u8 *unFixedKey1;
|
||||
} aes;
|
||||
|
||||
struct
|
||||
{
|
||||
bool FalseSign;
|
||||
bool isFalseSign;
|
||||
// CIA RSA
|
||||
u8 *TMD_Priv;
|
||||
u8 *TMD_Pub;
|
||||
u8 *TIK_Priv;
|
||||
u8 *TIK_Pub;
|
||||
u8 *cpPvt; //cpPvt
|
||||
u8 *cpPub;
|
||||
u8 *xsPvt;
|
||||
u8 *xsPub;
|
||||
|
||||
// CFA
|
||||
u8 *CFA_Priv;
|
||||
u8 *CFA_Pub;
|
||||
|
||||
// CCI
|
||||
u8 *CCI_Priv;
|
||||
u8 *CCI_Pub;
|
||||
// CCI/CFA
|
||||
u8 *cciCfaPvt;
|
||||
u8 *cciCfaPub;
|
||||
|
||||
// CXI
|
||||
bool RequiresPresignedDesc;
|
||||
u8 *AccessDesc_Priv;
|
||||
u8 *AccessDesc_Pub;
|
||||
bool requiresPresignedDesc;
|
||||
u8 *acexPvt;
|
||||
u8 *acexPub;
|
||||
u8 *cxiHdrPub;
|
||||
u8 *cxiHdrPvt;
|
||||
} rsa;
|
||||
|
||||
struct
|
||||
{
|
||||
// CIA
|
||||
u8 *ca_cert;
|
||||
u8 *tik_cert;
|
||||
u8 *tmd_cert;
|
||||
u8 *caCert;
|
||||
u8 *xsCert;
|
||||
u8 *cpCert;
|
||||
} certs;
|
||||
} keys_struct;
|
||||
|
||||
@@ -75,9 +92,9 @@ typedef struct
|
||||
|
||||
// Public Prototypes
|
||||
void InitKeys(keys_struct *keys);
|
||||
void SetKeys(keys_struct *keys);
|
||||
int SetKeys(keys_struct *keys);
|
||||
void FreeKeys(keys_struct *keys);
|
||||
|
||||
int SetCommonKey(keys_struct *keys, u8 *CommonKey, u8 Index);
|
||||
int SetCurrentCommonKey(keys_struct *keys, u8 Index);
|
||||
int SetSystemFixedKey(keys_struct *keys, u8 *SystemFixedKey);
|
||||
int SetcommonKey(keys_struct *keys, u8 *commonKey, u8 Index);
|
||||
int SetcurrentCommonKey(keys_struct *keys, u8 Index);
|
||||
int SetsystemFixedKey(keys_struct *keys, u8 *systemFixedKey);
|
||||
|
||||
@@ -29,46 +29,30 @@ int main(int argc, char *argv[])
|
||||
if(result < 0) goto finish;
|
||||
|
||||
// Setup Content 0
|
||||
if(!usrset->IsBuildingNCCH0){ // Import Content 0
|
||||
if(usrset->Content0IsNcch){
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] Import NCCH0\n");
|
||||
#endif
|
||||
FILE *ncch0 = fopen(usrset->ContentPath[0],"rb");
|
||||
if(!ncch0) {fprintf(stderr,"[MAKEROM ERROR] Failed to open Content 0: %s\n",usrset->ContentPath[0]); goto finish;}
|
||||
if(!usrset->ncch.buildNcch0){ // Import Content
|
||||
if(usrset->common.workingFileType == infile_ncch){
|
||||
FILE *ncch0 = fopen(usrset->common.contentPath[0],"rb");
|
||||
if(!ncch0) {fprintf(stderr,"[MAKEROM ERROR] Failed to open Content 0: %s\n",usrset->common.contentPath[0]); goto finish;}
|
||||
fclose(ncch0);
|
||||
usrset->Content0.size = GetFileSize_u64(usrset->ContentPath[0]);
|
||||
usrset->Content0.buffer = malloc(usrset->Content0.size);
|
||||
ncch0 = fopen(usrset->ContentPath[0],"rb");
|
||||
ReadFile_64(usrset->Content0.buffer, usrset->Content0.size,0,ncch0);
|
||||
usrset->common.workingFile.size = GetFileSize_u64(usrset->common.contentPath[0]);
|
||||
usrset->common.workingFile.buffer = malloc(usrset->common.workingFile.size);
|
||||
ncch0 = fopen(usrset->common.contentPath[0],"rb");
|
||||
ReadFile_64(usrset->common.workingFile.buffer, usrset->common.workingFile.size,0,ncch0);
|
||||
fclose(ncch0);
|
||||
}
|
||||
else if(usrset->Content0IsSrl){
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] Import SRL\n");
|
||||
#endif
|
||||
FILE *srl = fopen(usrset->SrlPath,"rb");
|
||||
if(!srl) {fprintf(stderr,"[MAKEROM ERROR] Failed to open SRL: %s\n",usrset->SrlPath); goto finish;}
|
||||
fclose(srl);
|
||||
u64 size = GetFileSize_u64(usrset->SrlPath);
|
||||
usrset->Content0.size = align_value(size,0x10);
|
||||
usrset->Content0.buffer = malloc(usrset->Content0.size);
|
||||
srl = fopen(usrset->SrlPath,"rb");
|
||||
ReadFile_64(usrset->Content0.buffer,size,0,srl);
|
||||
fclose(srl);
|
||||
}
|
||||
else if(usrset->ConvertCci){
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] Import CCI\n");
|
||||
#endif
|
||||
FILE *cci = fopen(usrset->CciPath,"rb");
|
||||
if(!cci) {fprintf(stderr,"[MAKEROM ERROR] Failed to open CCI: %s\n",usrset->CciPath); goto finish;}
|
||||
fclose(cci);
|
||||
usrset->Content0.size = GetFileSize_u64(usrset->CciPath);
|
||||
usrset->Content0.buffer = malloc(usrset->Content0.size);
|
||||
cci = fopen(usrset->CciPath,"rb");
|
||||
ReadFile_64(usrset->Content0.buffer, usrset->Content0.size,0,cci);
|
||||
fclose(cci);
|
||||
else if(usrset->common.workingFileType == infile_srl || usrset->common.workingFileType == infile_ncsd){
|
||||
FILE *fp = fopen(usrset->common.workingFilePath,"rb");
|
||||
if(!fp) {
|
||||
fprintf(stderr,"[MAKEROM ERROR] Failed to open %s: %s\n",usrset->common.workingFileType == infile_srl? "SRL":"CCI",usrset->common.workingFilePath);
|
||||
goto finish;
|
||||
}
|
||||
fclose(fp);
|
||||
u64 size = GetFileSize_u64(usrset->common.workingFilePath);
|
||||
usrset->common.workingFile.size = align_value(size,0x10);
|
||||
usrset->common.workingFile.buffer = malloc(usrset->common.workingFile.size);
|
||||
fp = fopen(usrset->common.workingFilePath,"rb");
|
||||
ReadFile_64(usrset->common.workingFile.buffer,size,0,fp);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
else{// Build Content 0
|
||||
@@ -83,7 +67,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
// Make CCI
|
||||
if(usrset->out_format == CCI){
|
||||
if(usrset->common.outFormat == CCI){
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] Building CCI\n");
|
||||
#endif
|
||||
@@ -91,7 +75,7 @@ int main(int argc, char *argv[])
|
||||
if(result < 0) { fprintf(stderr,"[RESULT] Failed to build CCI\n"); goto finish; }
|
||||
}
|
||||
// Make CIA
|
||||
else if(usrset->out_format == CIA){
|
||||
else if(usrset->common.outFormat == CIA){
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] Building CIA\n");
|
||||
#endif
|
||||
@@ -99,18 +83,18 @@ int main(int argc, char *argv[])
|
||||
if(result < 0) { fprintf(stderr,"[RESULT] Failed to build CIA\n"); goto finish; }
|
||||
}
|
||||
// No Container Raw CXI/CFA
|
||||
else if(usrset->out_format == CXI || usrset->out_format == CFA){
|
||||
else if(usrset->common.outFormat == CXI || usrset->common.outFormat == CFA){
|
||||
#ifdef DEBUG
|
||||
printf("[DEBUG] Outputting NCCH, because No Container\n");
|
||||
#endif
|
||||
FILE *ncch_out = fopen(usrset->outfile,"wb");
|
||||
FILE *ncch_out = fopen(usrset->common.outFileName,"wb");
|
||||
if(!ncch_out) {
|
||||
fprintf(stderr,"[ERROR] Failed to create '%s'\n",usrset->outfile);
|
||||
fprintf(stderr,"[RESULT] Failed to build '%s'\n",usrset->out_format == CXI? "CXI" : "CFA");
|
||||
fprintf(stderr,"[ERROR] Failed to create '%s'\n",usrset->common.outFileName);
|
||||
fprintf(stderr,"[RESULT] Failed to build '%s'\n",usrset->common.outFormat == CXI? "CXI" : "CFA");
|
||||
result = FAILED_TO_CREATE_OUTFILE;
|
||||
goto finish;
|
||||
}
|
||||
WriteBuffer(usrset->Content0.buffer,usrset->Content0.size,0,ncch_out);
|
||||
WriteBuffer(usrset->common.workingFile.buffer,usrset->common.workingFile.size,0,ncch_out);
|
||||
fclose(ncch_out);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ typedef enum
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ncch_ExHeader = 1,
|
||||
ncch_exhdr = 1,
|
||||
ncch_exefs,
|
||||
ncch_romfs,
|
||||
ncch_Logo,
|
||||
@@ -61,80 +61,75 @@ typedef enum
|
||||
|
||||
typedef enum
|
||||
{
|
||||
RomFS = 0x1,
|
||||
ExeFS = 0x2,
|
||||
SystemUpdate = 0x4,
|
||||
Manual = 0x8,
|
||||
Child = (0x4|0x8),
|
||||
Trial = 0x10
|
||||
content_Data = 0x1,
|
||||
content_Executable = 0x2,
|
||||
content_SystemUpdate = 0x4,
|
||||
content_Manual = 0x8,
|
||||
content_Child = (0x4|0x8),
|
||||
content_Trial = 0x10
|
||||
} ncch_content_bitmask;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u16 version;
|
||||
u32 exheader_offset;
|
||||
u32 exheader_size;
|
||||
u64 logo_offset;
|
||||
u64 logo_size;
|
||||
u64 plain_region_offset;
|
||||
u64 plain_region_size;
|
||||
u64 exefs_offset;
|
||||
u64 exefs_size;
|
||||
u64 exefs_hash_src_size;
|
||||
u64 romfs_offset;
|
||||
u64 romfs_size;
|
||||
u64 romfs_hash_src_size;
|
||||
u8 titleID[8];
|
||||
u8 programID[8];
|
||||
}NCCH_STRUCT;
|
||||
u16 formatVersion;
|
||||
u32 exhdrOffset;
|
||||
u32 exhdrSize;
|
||||
u64 logoOffset;
|
||||
u64 logoSize;
|
||||
u64 plainRegionOffset;
|
||||
u64 plainRegionSize;
|
||||
u64 exefsOffset;
|
||||
u64 exefsSize;
|
||||
u64 exefsHashDataSize;
|
||||
u64 romfsOffset;
|
||||
u64 romfsSize;
|
||||
u64 romfsHashDataSize;
|
||||
u8 titleId[8];
|
||||
u8 programId[8];
|
||||
} ncch_struct;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 magic[4];
|
||||
u8 content_size[4];
|
||||
u8 title_id[8];
|
||||
u8 maker_code[2];
|
||||
u8 version[2];
|
||||
u8 reserved_0[4];
|
||||
u8 program_id[8];
|
||||
u8 reserved_1[0x10];
|
||||
u8 logo_sha_256_hash[0x20];
|
||||
u8 product_code[0x10];
|
||||
u8 extended_header_sha_256_hash[0x20];
|
||||
u8 extended_header_size[4];
|
||||
u8 reserved_2[4];
|
||||
u8 ncchSize[4];
|
||||
u8 titleId[8];
|
||||
u8 makerCode[2];
|
||||
u8 formatVersion[2];
|
||||
u8 padding0[4];
|
||||
u8 programId[8];
|
||||
u8 padding1[0x10];
|
||||
u8 logoHash[0x20]; // SHA-256 over the entire logo region
|
||||
u8 productCode[0x10];
|
||||
u8 exhdrHash[0x20]; // SHA-256 over exhdrSize of the exhdr region
|
||||
u8 exhdrSize[4];
|
||||
u8 padding2[4];
|
||||
u8 flags[8];
|
||||
u8 plain_region_offset[4];
|
||||
u8 plain_region_size[4];
|
||||
u8 logo_region_offset[4];
|
||||
u8 logo_region_size[4];
|
||||
u8 exefs_offset[4];
|
||||
u8 exefs_size[4];
|
||||
u8 exefs_hash_size[4];
|
||||
u8 reserved_4[4];
|
||||
u8 romfs_offset[4];
|
||||
u8 romfs_size[4];
|
||||
u8 romfs_hash_size[4];
|
||||
u8 reserved_5[4];
|
||||
u8 exefs_sha_256_hash[0x20];
|
||||
u8 romfs_sha_256_hash[0x20];
|
||||
} NCCH_Header;
|
||||
u8 plainRegionOffset[4];
|
||||
u8 plainRegionSize[4];
|
||||
u8 logoOffset[4];
|
||||
u8 logoSize[4];
|
||||
u8 exefsOffset[4];
|
||||
u8 exefsSize[4];
|
||||
u8 exefsHashSize[4];
|
||||
u8 padding4[4];
|
||||
u8 romfsOffset[4];
|
||||
u8 romfsSize[4];
|
||||
u8 romfsHashSize[4];
|
||||
u8 padding5[4];
|
||||
u8 exefsHash[0x20];
|
||||
u8 romfsHash[0x20];
|
||||
} ncch_hdr;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
keys_struct *keys;
|
||||
rsf_settings *yaml_set;
|
||||
rsf_settings *rsfSet;
|
||||
COMPONENT_STRUCT *out;
|
||||
|
||||
struct{
|
||||
u8 *PubK;
|
||||
u8 *PrivK;
|
||||
} CxiRsaKey;
|
||||
|
||||
struct
|
||||
{
|
||||
u32 MediaSize;
|
||||
u32 mediaSize;
|
||||
bool IncludeExeFsLogo;
|
||||
bool CompressCode;
|
||||
bool UseOnSD;
|
||||
@@ -143,70 +138,70 @@ typedef struct
|
||||
bool IsCfa;
|
||||
bool IsBuildingCodeSection;
|
||||
bool UseRomFS;
|
||||
} Options;
|
||||
} options;
|
||||
|
||||
struct
|
||||
{
|
||||
FILE *elf;
|
||||
u64 elf_size;
|
||||
u64 elfSize;
|
||||
|
||||
FILE *banner;
|
||||
u64 banner_size;
|
||||
u64 bannerSize;
|
||||
|
||||
FILE *icon;
|
||||
u64 icon_size;
|
||||
u64 iconSize;
|
||||
|
||||
FILE *logo;
|
||||
u64 logo_size;
|
||||
u64 logoSize;
|
||||
|
||||
FILE *code;
|
||||
u64 code_size;
|
||||
u64 codeSize;
|
||||
|
||||
FILE *exheader;
|
||||
u64 exheader_size;
|
||||
FILE *exhdr;
|
||||
u64 exhdrSize;
|
||||
|
||||
FILE *romfs;
|
||||
u64 romfs_size;
|
||||
u64 romfsSize;
|
||||
|
||||
FILE *plainregion;
|
||||
u64 plainregion_size;
|
||||
} ComponentFilePtrs;
|
||||
u64 plainregionSize;
|
||||
} componentFilePtrs;
|
||||
|
||||
struct
|
||||
{
|
||||
COMPONENT_STRUCT Code;
|
||||
COMPONENT_STRUCT Banner;
|
||||
COMPONENT_STRUCT Icon;
|
||||
} ExeFs_Sections;
|
||||
COMPONENT_STRUCT code;
|
||||
COMPONENT_STRUCT banner;
|
||||
COMPONENT_STRUCT icon;
|
||||
} exefsSections;
|
||||
|
||||
struct
|
||||
{
|
||||
u32 TextAddress;
|
||||
u32 TextSize;
|
||||
u32 TextMaxPages;
|
||||
u32 ROAddress;
|
||||
u32 ROSize;
|
||||
u32 ROMaxPages;
|
||||
u32 DataAddress;
|
||||
u32 DataSize;
|
||||
u32 DataMaxPages;
|
||||
u32 BSS_Size;
|
||||
} CodeDetails;
|
||||
u32 textAddress;
|
||||
u32 textSize;
|
||||
u32 textMaxPages;
|
||||
u32 roAddress;
|
||||
u32 roSize;
|
||||
u32 roMaxPages;
|
||||
u32 rwAddress;
|
||||
u32 rwSize;
|
||||
u32 rwMaxPages;
|
||||
u32 bssSize;
|
||||
} codeDetails;
|
||||
|
||||
struct
|
||||
{
|
||||
u64 TotalContentSize;
|
||||
COMPONENT_STRUCT CommonHeader;
|
||||
COMPONENT_STRUCT ExHeader;
|
||||
u64 LogoOffset;
|
||||
COMPONENT_STRUCT Logo;
|
||||
u64 PlainRegionOffset;
|
||||
COMPONENT_STRUCT PlainRegion;
|
||||
u64 ExeFsOffset;
|
||||
COMPONENT_STRUCT ExeFs;
|
||||
u64 RomFsOffset;
|
||||
COMPONENT_STRUCT RomFs;
|
||||
} Sections;
|
||||
u64 totalNcchSize;
|
||||
COMPONENT_STRUCT ncchHdr;
|
||||
COMPONENT_STRUCT exhdr;
|
||||
u64 logoOffset;
|
||||
COMPONENT_STRUCT logo;
|
||||
u64 plainRegionOffset;
|
||||
COMPONENT_STRUCT plainRegion;
|
||||
u64 exeFsOffset;
|
||||
COMPONENT_STRUCT exeFs;
|
||||
u64 romFsOffset;
|
||||
COMPONENT_STRUCT romFs;
|
||||
} sections;
|
||||
|
||||
} ncch_settings;
|
||||
|
||||
@@ -221,16 +216,16 @@ int VerifyNCCH(u8 *ncch, keys_struct *keys, bool SuppressOutput);
|
||||
|
||||
u8* RetargetNCCH(FILE *fp, u64 size, u8 *TitleId, u8 *ProgramId, keys_struct *keys);
|
||||
|
||||
NCCH_Header* GetNCCH_CommonHDR(void *out, FILE *fp, u8 *buf);
|
||||
ncch_hdr* GetNCCH_CommonHDR(void *out, FILE *fp, u8 *buf);
|
||||
bool IsNCCH(FILE *fp, u8 *buf);
|
||||
bool IsCfa(NCCH_Header* hdr);
|
||||
u32 GetNCCH_MediaUnitSize(NCCH_Header* hdr);
|
||||
u32 GetNCCH_MediaSize(NCCH_Header* hdr);
|
||||
ncch_key_type GetNCCHKeyType(NCCH_Header* hdr);
|
||||
bool IsCfa(ncch_hdr* hdr);
|
||||
u32 GetNCCH_MediaUnitSize(ncch_hdr* hdr);
|
||||
u32 GetNCCH_MediaSize(ncch_hdr* hdr);
|
||||
ncch_key_type GetNCCHKeyType(ncch_hdr* hdr);
|
||||
|
||||
int GetNCCHSection(u8 *dest, u64 dest_max_size, u64 src_pos, u8 *ncch, NCCH_STRUCT *ncch_ctx, keys_struct *keys, ncch_section section);
|
||||
u8* GetNCCHKey(NCCH_Header* hdr, keys_struct *keys);
|
||||
int GetNCCHSection(u8 *dest, u64 dest_max_size, u64 src_pos, u8 *ncch, ncch_struct *ncch_ctx, keys_struct *keys, ncch_section section);
|
||||
u8* GetNCCHKey(ncch_hdr* hdr, keys_struct *keys);
|
||||
|
||||
int GetCXIStruct(NCCH_STRUCT *ctx, NCCH_Header *header);
|
||||
void ncch_get_counter(NCCH_STRUCT *ctx, u8 counter[16], u8 type);
|
||||
void CryptNCCHSection(u8 *buffer, u64 size, u64 src_pos, NCCH_STRUCT *ctx, u8 key[16], u8 type);
|
||||
int GetCXIStruct(ncch_struct *ctx, ncch_hdr *header);
|
||||
void ncch_get_counter(ncch_struct *ctx, u8 counter[16], u8 type);
|
||||
void CryptNCCHSection(u8 *buffer, u64 size, u64 src_pos, ncch_struct *ctx, u8 key[16], u8 type);
|
||||
+1104
File diff suppressed because it is too large
Load Diff
@@ -52,25 +52,28 @@ int build_CCI(user_settings *usrset)
|
||||
if(result) goto finish;
|
||||
|
||||
// Create Output File
|
||||
cciset->out = fopen(usrset->outfile,"wb");
|
||||
cciset->out = fopen(usrset->common.outFileName,"wb");
|
||||
if(!cciset->out){
|
||||
fprintf(stderr,"[CCI ERROR] Failed to create '%s'\n",usrset->outfile);
|
||||
fprintf(stderr,"[CCI ERROR] Failed to create '%s'\n",usrset->common.outFileName);
|
||||
result = FAILED_TO_CREATE_OUTFILE;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
// Generate NCSD Header and Additional Header
|
||||
result = BuildNCSDHeader(cciset,usrset);
|
||||
if(result) goto finish;
|
||||
if(result)
|
||||
goto finish;
|
||||
BuildCardInfoHeader(cciset,usrset);
|
||||
|
||||
// Write to File
|
||||
WriteCCI_HDR_ToFile(cciset);
|
||||
result = WriteCCI_Content_ToFile(cciset,usrset);
|
||||
if(result) goto finish;
|
||||
if(result)
|
||||
goto finish;
|
||||
|
||||
// Fill out file if necessary
|
||||
if(cciset->MediaFootPadding) WriteCCI_DummyBytes(cciset);
|
||||
if(cciset->fillOutCci)
|
||||
WriteCCI_DummyBytes(cciset);
|
||||
|
||||
// Close output file
|
||||
finish:
|
||||
@@ -82,12 +85,12 @@ finish:
|
||||
|
||||
int SignCCI(u8 *Signature, u8 *NCSD_HDR)
|
||||
{
|
||||
return ctr_sig(NCSD_HDR,sizeof(NCSD_Header),Signature,ctx.keys->rsa.CCI_Pub,ctx.keys->rsa.CCI_Priv,RSA_2048_SHA256,CTR_RSA_SIGN);
|
||||
return ctr_sig(NCSD_HDR,sizeof(cci_hdr),Signature,ctx.keys->rsa.cciCfaPub,ctx.keys->rsa.cciCfaPvt,RSA_2048_SHA256,CTR_RSA_SIGN);
|
||||
}
|
||||
|
||||
int CheckCCISignature(u8 *Signature, u8 *NCSD_HDR)
|
||||
{
|
||||
return ctr_sig(NCSD_HDR,sizeof(NCSD_Header),Signature,ctx.keys->rsa.CCI_Pub,NULL,RSA_2048_SHA256,CTR_RSA_VERIFY);
|
||||
return ctr_sig(NCSD_HDR,sizeof(cci_hdr),Signature,ctx.keys->rsa.cciCfaPub,NULL,RSA_2048_SHA256,CTR_RSA_VERIFY);
|
||||
}
|
||||
|
||||
void init_CCISettings(cci_settings *set)
|
||||
@@ -98,7 +101,7 @@ void init_CCISettings(cci_settings *set)
|
||||
|
||||
int get_CCISettings(cci_settings *cciset, user_settings *usrset)
|
||||
{
|
||||
ctx.keys = &usrset->keys;
|
||||
ctx.keys = &usrset->common.keys;
|
||||
int result = 0;
|
||||
|
||||
/* Importing Data from Content */
|
||||
@@ -114,7 +117,7 @@ int get_CCISettings(cci_settings *cciset, user_settings *usrset)
|
||||
|
||||
|
||||
/* Getting Data from YAML */
|
||||
result = GetNCSDFlags(cciset,&usrset->yaml_set);
|
||||
result = GetNCSDFlags(cciset,&usrset->common.rsfSet);
|
||||
if(result) return result;
|
||||
|
||||
result = GetMediaSize(cciset,usrset);
|
||||
@@ -147,16 +150,16 @@ void free_CCISettings(cci_settings *set)
|
||||
|
||||
int BuildNCSDHeader(cci_settings *cciset, user_settings *usrset)
|
||||
{
|
||||
memcpy((u8*)ctx.commonHDR.magic,"NCSD",4);
|
||||
u32_to_u8((u8*)ctx.commonHDR.media_size,(cciset->MediaSize/cciset->MediaUnitSize),LE);
|
||||
memcpy((u8*)ctx.commonHDR.title_id,cciset->MediaID,8);
|
||||
memcpy((u8*)ctx.cciHdr.magic,"NCSD",4);
|
||||
u32_to_u8((u8*)ctx.cciHdr.mediaSize,(cciset->mediaSize/cciset->mediaUnit),LE);
|
||||
memcpy((u8*)ctx.cciHdr.titleId,cciset->mediaId,8);
|
||||
for(int i = 0; i < 8; i++){
|
||||
u32_to_u8((u8*)ctx.commonHDR.offsetsize_table[i].offset,(cciset->ContentOffset[i]/cciset->MediaUnitSize),LE);
|
||||
u32_to_u8((u8*)ctx.commonHDR.offsetsize_table[i].size,(cciset->ContentSize[i]/cciset->MediaUnitSize),LE);
|
||||
memcpy((u8*)ctx.commonHDR.partition_id_table[i],cciset->ContentTitleID[i],8);
|
||||
u32_to_u8((u8*)ctx.cciHdr.offset_sizeTable[i].offset,(cciset->contentOffset[i]/cciset->mediaUnit),LE);
|
||||
u32_to_u8((u8*)ctx.cciHdr.offset_sizeTable[i].size,(cciset->contentSize[i]/cciset->mediaUnit),LE);
|
||||
memcpy((u8*)ctx.cciHdr.partitionIdTable[i],cciset->contentTitleId[i],8);
|
||||
}
|
||||
memcpy((u8*)ctx.commonHDR.partition_flags,cciset->NCSD_Flags,8);
|
||||
if(SignCCI(ctx.Signature,(u8*)&ctx.commonHDR) != Good){
|
||||
memcpy((u8*)ctx.cciHdr.partitionFlags,cciset->flags,8);
|
||||
if(SignCCI(ctx.signature,(u8*)&ctx.cciHdr) != Good){
|
||||
fprintf(stderr,"[CCI ERROR] Failed to sign CCI\n");
|
||||
return CCI_SIG_FAIL;
|
||||
}
|
||||
@@ -165,44 +168,43 @@ int BuildNCSDHeader(cci_settings *cciset, user_settings *usrset)
|
||||
|
||||
int BuildCardInfoHeader(cci_settings *cciset, user_settings *usrset)
|
||||
{
|
||||
u32_to_u8((u8*)ctx.CardInfoHDR.writable_address,(cciset->WritableAddress/cciset->MediaUnitSize),LE);
|
||||
u32_to_u8((u8*)ctx.CardInfoHDR.card_info_bitmask,cciset->CardInfoBitmask,BE);
|
||||
u32_to_u8((u8*)ctx.CardInfoHDR.media_size_used,cciset->TotalContentSize,LE);
|
||||
memcpy((u8*)ctx.CardInfoHDR.ncch_0_title_id,cciset->ContentTitleID[0],8);
|
||||
memcpy((u8*)ctx.CardInfoHDR.initial_data,cciset->InitialData,0x30);
|
||||
if(!(usrset->OmitImportedNcchHdr && !usrset->IsBuildingNCCH0))
|
||||
memcpy((u8*)ctx.CardInfoHDR.ncch_0_header,cciset->NCCH_HDR,0x100);
|
||||
memcpy((u8*)ctx.DevCardInfoHDR.TitleKey,cciset->TitleKey,0x10);
|
||||
u32_to_u8((u8*)ctx.cardinfo.writable_address,(cciset->writableAddress/cciset->mediaUnit),LE);
|
||||
u32_to_u8((u8*)ctx.cardinfo.card_info_bitmask,cciset->cardInfoBitmask,BE);
|
||||
u32_to_u8((u8*)ctx.cardinfo.media_size_used,cciset->cciTotalSize,LE);
|
||||
memcpy((u8*)ctx.cardinfo.ncch_0_title_id,cciset->contentTitleId[0],8);
|
||||
memcpy((u8*)ctx.cardinfo.initial_data,cciset->initialData,0x30);
|
||||
memcpy((u8*)ctx.cardinfo.ncch_0_header,cciset->ncchHdr,0x100);
|
||||
memcpy((u8*)ctx.devcardinfo.TitleKey,cciset->titleKey,0x10);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int WriteCCI_HDR_ToFile(cci_settings *cciset)
|
||||
{
|
||||
WriteBuffer(ctx.Signature,0x100,0,cciset->out);
|
||||
WriteBuffer((u8*)&ctx.commonHDR,sizeof(NCSD_Header),0x100,cciset->out);
|
||||
WriteBuffer((u8*)&ctx.CardInfoHDR,sizeof(CardInfo_Header),0x200,cciset->out);
|
||||
WriteBuffer((u8*)&ctx.DevCardInfoHDR,sizeof(Dev_CardInfo_Header),0x1200,cciset->out);
|
||||
WriteBuffer(ctx.signature,0x100,0,cciset->out);
|
||||
WriteBuffer((u8*)&ctx.cciHdr,sizeof(cci_hdr),0x100,cciset->out);
|
||||
WriteBuffer((u8*)&ctx.cardinfo,sizeof(cardinfo_hdr),0x200,cciset->out);
|
||||
WriteBuffer((u8*)&ctx.devcardinfo,sizeof(devcardinfo_hdr),0x1200,cciset->out);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int WriteCCI_Content_ToFile(cci_settings *cciset,user_settings *usrset)
|
||||
{
|
||||
// Write Content 0
|
||||
WriteBuffer(cciset->ncch0,cciset->ContentSize[0],cciset->ContentOffset[0],cciset->out);
|
||||
free(usrset->Content0.buffer);
|
||||
usrset->Content0.buffer = NULL;
|
||||
usrset->Content0.size = 0;
|
||||
WriteBuffer(cciset->ncch0,cciset->contentSize[0],cciset->contentOffset[0],cciset->out);
|
||||
free(usrset->common.workingFile.buffer);
|
||||
usrset->common.workingFile.buffer = NULL;
|
||||
usrset->common.workingFile.size = 0;
|
||||
|
||||
// Add additional contents, recreating them with their new TitleID
|
||||
for(int i = 1; i < 8; i++){
|
||||
if(cciset->content[i]){
|
||||
u8 *ContentBuff = RetargetNCCH(cciset->content[i],cciset->ContentSize[i],cciset->ContentTitleID[i],cciset->MediaID,ctx.keys);
|
||||
if(!ContentBuff){
|
||||
u8 *ncch = RetargetNCCH(cciset->content[i],cciset->contentSize[i],cciset->contentTitleId[i],cciset->mediaId,ctx.keys);
|
||||
if(!ncch){
|
||||
fprintf(stderr,"[CCI ERROR] Could not import content %d to CCI\n",i);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
}
|
||||
WriteBuffer(ContentBuff,cciset->ContentSize[i],cciset->ContentOffset[i],cciset->out);
|
||||
free(ContentBuff);
|
||||
WriteBuffer(ncch,cciset->contentSize[i],cciset->contentOffset[i],cciset->out);
|
||||
free(ncch);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@@ -211,18 +213,18 @@ int WriteCCI_Content_ToFile(cci_settings *cciset,user_settings *usrset)
|
||||
int WriteCCI_DummyBytes(cci_settings *cciset)
|
||||
{
|
||||
// Seeking end of CCI Data
|
||||
fseek_64(cciset->out,cciset->TotalContentSize,SEEK_SET);
|
||||
fseek_64(cciset->out,cciset->cciTotalSize,SEEK_SET);
|
||||
|
||||
// Determining Size of Dummy Bytes
|
||||
u64 len = cciset->MediaSize - cciset->TotalContentSize;
|
||||
u64 len = cciset->mediaSize - cciset->cciTotalSize;
|
||||
|
||||
// Creating Buffer of Dummy Bytes
|
||||
u8 dummy_bytes[cciset->MediaUnitSize];
|
||||
memset(&dummy_bytes,0xff,cciset->MediaUnitSize);
|
||||
u8 *dummy_bytes = malloc(cciset->mediaUnit);
|
||||
memset(dummy_bytes,0xff,cciset->mediaUnit);
|
||||
|
||||
// Writing Dummy Bytes to file
|
||||
for(u64 i = 0; i < len; i += cciset->MediaUnitSize){
|
||||
fwrite(&dummy_bytes,cciset->MediaUnitSize,1,cciset->out);
|
||||
for(u64 i = 0; i < len; i += cciset->mediaUnit){
|
||||
fwrite(&dummy_bytes,cciset->mediaUnit,1,cciset->out);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -238,37 +240,37 @@ int GetContentFP(cci_settings *cciset, user_settings *usrset)
|
||||
memset(cciset->content,0,sizeof(FILE*)*8);
|
||||
|
||||
for(int i = 1; i < 8; i++){
|
||||
if(usrset->ContentPath[i]){
|
||||
cciset->content[i] = fopen(usrset->ContentPath[i],"rb");
|
||||
if(usrset->common.contentPath[i]){
|
||||
cciset->content[i] = fopen(usrset->common.contentPath[i],"rb");
|
||||
if(!cciset->content[i]){ // Checking if file could be opened
|
||||
fprintf(stderr,"[CCI ERROR] Failed to create '%s'\n",usrset->outfile);
|
||||
fprintf(stderr,"[CCI ERROR] Failed to open '%s'\n",usrset->common.contentPath[i]);
|
||||
return FAILED_TO_OPEN_FILE;
|
||||
}
|
||||
if(!IsNCCH(cciset->content[i],NULL)){ // Checking if NCCH
|
||||
fprintf(stderr,"[CCI ERROR] Content '%s' is invalid\n",usrset->ContentPath[i]);
|
||||
fprintf(stderr,"[CCI ERROR] Content '%s' is invalid\n",usrset->common.contentPath[i]);
|
||||
return NCSD_INVALID_NCCH0;
|
||||
}
|
||||
|
||||
// Getting NCCH Header
|
||||
NCCH_Header *hdr = malloc(sizeof(NCCH_Header));;
|
||||
ncch_hdr *hdr = malloc(sizeof(ncch_hdr));
|
||||
GetNCCH_CommonHDR(hdr,cciset->content[i],NULL);
|
||||
|
||||
if(GetNCCH_MediaUnitSize(hdr) != cciset->MediaUnitSize){ // Checking if Media Unit Size matches CCI
|
||||
fprintf(stderr,"[CCI ERROR] Content '%s' is invalid\n",usrset->ContentPath[i]);
|
||||
if(GetNCCH_MediaUnitSize(hdr) != cciset->mediaUnit){ // Checking if Media Unit Size matches CCI
|
||||
fprintf(stderr,"[CCI ERROR] Content '%s' is invalid\n",usrset->common.contentPath[i]);
|
||||
return NCSD_INVALID_NCCH0;
|
||||
}
|
||||
|
||||
memcpy(&cciset->ContentTitleID[i],cciset->MediaID,8); // Set TitleID
|
||||
memcpy(&cciset->contentTitleId[i],cciset->mediaId,8); // Set TitleID
|
||||
|
||||
// Modify TitleID Accordingly
|
||||
u16 tmp = u8_to_u16(&hdr->title_id[6],LE);
|
||||
u16 tmp = u8_to_u16(&hdr->titleId[6],LE);
|
||||
tmp |= (i+4);
|
||||
u16_to_u8(&cciset->ContentTitleID[i][6],tmp,LE);
|
||||
u16_to_u8(&cciset->contentTitleId[i][6],tmp,LE);
|
||||
|
||||
cciset->ContentSize[i] = GetNCCH_MediaSize(hdr)*cciset->MediaUnitSize;
|
||||
cciset->ContentOffset[i] = cciset->TotalContentSize;
|
||||
cciset->contentSize[i] = GetNCCH_MediaSize(hdr)*cciset->mediaUnit;
|
||||
cciset->contentOffset[i] = cciset->cciTotalSize;
|
||||
|
||||
cciset->TotalContentSize += cciset->ContentSize[i];
|
||||
cciset->cciTotalSize += cciset->contentSize[i];
|
||||
|
||||
free(hdr);
|
||||
}
|
||||
@@ -278,10 +280,10 @@ int GetContentFP(cci_settings *cciset, user_settings *usrset)
|
||||
|
||||
int CheckContent0(cci_settings *cciset, user_settings *usrset)
|
||||
{
|
||||
if(!usrset->Content0.size)
|
||||
if(!usrset->common.workingFile.buffer)
|
||||
return NCSD_NO_NCCH0;
|
||||
cciset->ncch0 = usrset->Content0.buffer;
|
||||
cciset->ncch0_FileLen = usrset->Content0.size;
|
||||
cciset->ncch0 = usrset->common.workingFile.buffer;
|
||||
cciset->ncch0_FileLen = usrset->common.workingFile.size;
|
||||
|
||||
if(!IsNCCH(NULL,cciset->ncch0))
|
||||
return NCSD_INVALID_NCCH0;
|
||||
@@ -291,15 +293,15 @@ int CheckContent0(cci_settings *cciset, user_settings *usrset)
|
||||
|
||||
int GetDataFromContent0(cci_settings *cciset, user_settings *usrset)
|
||||
{
|
||||
cciset->TotalContentSize = 0x4000;
|
||||
cciset->cciTotalSize = 0x4000;
|
||||
|
||||
NCCH_Header *hdr;
|
||||
ncch_hdr *hdr;
|
||||
|
||||
hdr = GetNCCH_CommonHDR(NULL,NULL,cciset->ncch0);
|
||||
|
||||
cciset->NCCH_HDR = hdr;
|
||||
cciset->ncchHdr = hdr;
|
||||
|
||||
u16 ncch_format_ver = u8_to_u16(hdr->version,LE);
|
||||
u16 ncch_format_ver = u8_to_u16(hdr->formatVersion,LE);
|
||||
if(ncch_format_ver != 0 && ncch_format_ver != 2){
|
||||
fprintf(stderr,"[CCI ERROR] NCCH type %d Not Supported\n",ncch_format_ver);
|
||||
return FAILED_TO_IMPORT_FILE;
|
||||
@@ -308,52 +310,52 @@ int GetDataFromContent0(cci_settings *cciset, user_settings *usrset)
|
||||
//memdump(stdout,"ncch0 head: ",(cciset->ncch0+0x100),0x100);
|
||||
//memdump(stdout,"ncch0 head: ",(u8*)(hdr),0x100);
|
||||
|
||||
memcpy(cciset->MediaID,hdr->title_id,8);
|
||||
memcpy(&cciset->ContentTitleID[0],hdr->title_id,8);
|
||||
if(usrset->GenSDKCardInfoHeader){
|
||||
memcpy(cciset->InitialData,Stock_InitialData,0x30);
|
||||
memcpy(cciset->TitleKey,Stock_TitleKey,0x10);
|
||||
memcpy(cciset->mediaId,hdr->titleId,8);
|
||||
memcpy(&cciset->contentTitleId[0],hdr->titleId,8);
|
||||
if(usrset->cci.useSDKStockData){
|
||||
memcpy(cciset->initialData,stock_initial_data,0x30);
|
||||
memcpy(cciset->titleKey,stock_title_key,0x10);
|
||||
}
|
||||
else{
|
||||
u8 Hash[0x40];
|
||||
ctr_sha(cciset->ncch0,0x80,Hash,CTR_SHA_256);
|
||||
ctr_sha((cciset->ncch0+0x80),0x80,(Hash+0x20),CTR_SHA_256);
|
||||
memcpy(cciset->InitialData,Hash,0x2C);
|
||||
//memcpy(cciset->TitleKey,(Hash+0x30),0x10); // Might Remove
|
||||
memcpy(cciset->initialData,Hash,0x2C);
|
||||
//memcpy(cciset->titleKey,(Hash+0x30),0x10); // Might Remove
|
||||
}
|
||||
|
||||
|
||||
cciset->NCSD_Flags[MediaUnitSize] = hdr->flags[ContentUnitSize];
|
||||
cciset->MediaUnitSize = GetNCCH_MediaUnitSize(hdr);
|
||||
cciset->flags[MediaUnitSize] = hdr->flags[ContentUnitSize];
|
||||
cciset->mediaUnit = GetNCCH_MediaUnitSize(hdr);
|
||||
|
||||
cciset->ContentSize[0] = (u64)(GetNCCH_MediaSize(hdr) * cciset->MediaUnitSize);
|
||||
cciset->ContentOffset[0] = cciset->TotalContentSize;
|
||||
cciset->contentSize[0] = (u64)(GetNCCH_MediaSize(hdr) * cciset->mediaUnit);
|
||||
cciset->contentOffset[0] = cciset->cciTotalSize;
|
||||
|
||||
cciset->TotalContentSize += cciset->ContentSize[0];
|
||||
cciset->cciTotalSize += cciset->contentSize[0];
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetMediaSize(cci_settings *cciset, user_settings *usrset)
|
||||
{
|
||||
char *MediaSizeStr = usrset->yaml_set.BasicInfo.MediaSize;
|
||||
if(!MediaSizeStr) cciset->MediaSize = (u64)GB*2;
|
||||
char *MediaSizeStr = usrset->common.rsfSet.BasicInfo.MediaSize;
|
||||
if(!MediaSizeStr) cciset->mediaSize = (u64)GB*2;
|
||||
else{
|
||||
if(strcasecmp(MediaSizeStr,"128MB") == 0) cciset->MediaSize = (u64)MB*128;
|
||||
else if(strcasecmp(MediaSizeStr,"256MB") == 0) cciset->MediaSize = (u64)MB*256;
|
||||
else if(strcasecmp(MediaSizeStr,"512MB") == 0) cciset->MediaSize = (u64)MB*512;
|
||||
else if(strcasecmp(MediaSizeStr,"1GB") == 0) cciset->MediaSize = (u64)GB*1;
|
||||
else if(strcasecmp(MediaSizeStr,"2GB") == 0) cciset->MediaSize = (u64)GB*2;
|
||||
else if(strcasecmp(MediaSizeStr,"4GB") == 0) cciset->MediaSize = (u64)GB*4;
|
||||
else if(strcasecmp(MediaSizeStr,"8GB") == 0) cciset->MediaSize = (u64)GB*8;
|
||||
else if(strcasecmp(MediaSizeStr,"16GB") == 0) cciset->MediaSize = (u64)GB*16;
|
||||
else if(strcasecmp(MediaSizeStr,"32GB") == 0) cciset->MediaSize = (u64)GB*32;
|
||||
if(strcasecmp(MediaSizeStr,"128MB") == 0) cciset->mediaSize = (u64)MB*128;
|
||||
else if(strcasecmp(MediaSizeStr,"256MB") == 0) cciset->mediaSize = (u64)MB*256;
|
||||
else if(strcasecmp(MediaSizeStr,"512MB") == 0) cciset->mediaSize = (u64)MB*512;
|
||||
else if(strcasecmp(MediaSizeStr,"1GB") == 0) cciset->mediaSize = (u64)GB*1;
|
||||
else if(strcasecmp(MediaSizeStr,"2GB") == 0) cciset->mediaSize = (u64)GB*2;
|
||||
else if(strcasecmp(MediaSizeStr,"4GB") == 0) cciset->mediaSize = (u64)GB*4;
|
||||
else if(strcasecmp(MediaSizeStr,"8GB") == 0) cciset->mediaSize = (u64)GB*8;
|
||||
else if(strcasecmp(MediaSizeStr,"16GB") == 0) cciset->mediaSize = (u64)GB*16;
|
||||
else if(strcasecmp(MediaSizeStr,"32GB") == 0) cciset->mediaSize = (u64)GB*32;
|
||||
else {
|
||||
fprintf(stderr,"[CCI ERROR] Invalid MediaSize: %s\n",MediaSizeStr);
|
||||
return INVALID_YAML_OPT;
|
||||
}
|
||||
}
|
||||
|
||||
if(usrset->yaml_set.BasicInfo.MediaFootPadding != -1) cciset->MediaFootPadding = usrset->yaml_set.BasicInfo.MediaFootPadding;
|
||||
if(usrset->common.rsfSet.BasicInfo.MediaFootPadding != -1) cciset->fillOutCci = usrset->common.rsfSet.BasicInfo.MediaFootPadding;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -388,24 +390,24 @@ u64 GetUnusedSize(u64 MediaSize, u8 CardType)
|
||||
int GetNCSDFlags(cci_settings *cciset, rsf_settings *yaml)
|
||||
{
|
||||
/* BackupWriteWaitTime */
|
||||
cciset->NCSD_Flags[FW6x_BackupWriteWaitTime] = 0;
|
||||
cciset->flags[FW6x_BackupWriteWaitTime] = 0;
|
||||
if(yaml->CardInfo.BackupWriteWaitTime){
|
||||
u32 WaitTime = strtoul(yaml->CardInfo.BackupWriteWaitTime,NULL,0);
|
||||
if(WaitTime > 255){
|
||||
fprintf(stderr,"[CCI ERROR] Invalid Card BackupWriteWaitTime (%d) : must 0-255\n",WaitTime);
|
||||
return EXHDR_BAD_YAML_OPT;
|
||||
}
|
||||
cciset->NCSD_Flags[FW6x_BackupWriteWaitTime] = (u8)WaitTime;
|
||||
cciset->flags[FW6x_BackupWriteWaitTime] = (u8)WaitTime;
|
||||
}
|
||||
|
||||
/* FW6x SaveCrypto */
|
||||
cciset->NCSD_Flags[FW6x_SaveCryptoFlag] = 1;
|
||||
cciset->flags[FW6x_SaveCryptoFlag] = 1;
|
||||
|
||||
/* MediaType */
|
||||
if(!yaml->CardInfo.MediaType) cciset->NCSD_Flags[MediaTypeIndex] = CARD1;
|
||||
if(!yaml->CardInfo.MediaType) cciset->flags[MediaTypeIndex] = CARD1;
|
||||
else{
|
||||
if(strcasecmp(yaml->CardInfo.MediaType,"Card1") == 0) cciset->NCSD_Flags[MediaTypeIndex] = CARD1;
|
||||
else if(strcasecmp(yaml->CardInfo.MediaType,"Card2") == 0) cciset->NCSD_Flags[MediaTypeIndex] = CARD2;
|
||||
if(strcasecmp(yaml->CardInfo.MediaType,"Card1") == 0) cciset->flags[MediaTypeIndex] = CARD1;
|
||||
else if(strcasecmp(yaml->CardInfo.MediaType,"Card2") == 0) cciset->flags[MediaTypeIndex] = CARD2;
|
||||
else {
|
||||
fprintf(stderr,"[CCI ERROR] Invalid MediaType: %s\n",yaml->CardInfo.MediaType);
|
||||
return INVALID_YAML_OPT;
|
||||
@@ -413,11 +415,11 @@ int GetNCSDFlags(cci_settings *cciset, rsf_settings *yaml)
|
||||
}
|
||||
|
||||
/* Platform */
|
||||
cciset->NCSD_Flags[MediaPlatformIndex] = CTR;
|
||||
cciset->flags[MediaPlatformIndex] = CTR;
|
||||
/*
|
||||
if(!yaml->TitleInfo.Platform) cciset->NCSD_Flags[MediaPlatformIndex] = CTR;
|
||||
if(!yaml->TitleInfo.Platform) cciset->flags[MediaPlatformIndex] = CTR;
|
||||
else{
|
||||
if(strcasecmp(yaml->TitleInfo.Platform,"ctr") == 0) cciset->NCSD_Flags[MediaPlatformIndex] = CTR;
|
||||
if(strcasecmp(yaml->TitleInfo.Platform,"ctr") == 0) cciset->flags[MediaPlatformIndex] = CTR;
|
||||
else {
|
||||
fprintf(stderr,"[CCI ERROR] Invalid Platform: %s\n",yaml->TitleInfo.Platform);
|
||||
return INVALID_YAML_OPT;
|
||||
@@ -426,17 +428,17 @@ int GetNCSDFlags(cci_settings *cciset, rsf_settings *yaml)
|
||||
*/
|
||||
|
||||
/* CardDevice */
|
||||
if(!yaml->CardInfo.CardDevice) cciset->NCSD_Flags[CardDeviceFlag] = CARD_DEVICE_NONE;
|
||||
if(!yaml->CardInfo.CardDevice) cciset->flags[CardDeviceFlag] = CARD_DEVICE_NONE;
|
||||
else{
|
||||
if(strcmp(yaml->CardInfo.CardDevice,"NorFlash") == 0) {
|
||||
cciset->NCSD_Flags[CardDeviceFlag] = CARD_DEVICE_NOR_FLASH;
|
||||
if(cciset->NCSD_Flags[MediaTypeIndex] == CARD2){
|
||||
cciset->flags[CardDeviceFlag] = CARD_DEVICE_NOR_FLASH;
|
||||
if(cciset->flags[MediaTypeIndex] == CARD2){
|
||||
fprintf(stderr,"[CCI WARNING] 'CardDevice: NorFlash' is invalid on Card2\n");
|
||||
cciset->NCSD_Flags[CardDeviceFlag] = CARD_DEVICE_NONE;
|
||||
cciset->flags[CardDeviceFlag] = CARD_DEVICE_NONE;
|
||||
}
|
||||
}
|
||||
else if(strcmp(yaml->CardInfo.CardDevice,"None") == 0) cciset->NCSD_Flags[CardDeviceFlag] = CARD_DEVICE_NONE;
|
||||
else if(strcmp(yaml->CardInfo.CardDevice,"BT") == 0) cciset->NCSD_Flags[CardDeviceFlag] = CARD_DEVICE_BT;
|
||||
else if(strcmp(yaml->CardInfo.CardDevice,"None") == 0) cciset->flags[CardDeviceFlag] = CARD_DEVICE_NONE;
|
||||
else if(strcmp(yaml->CardInfo.CardDevice,"BT") == 0) cciset->flags[CardDeviceFlag] = CARD_DEVICE_BT;
|
||||
else {
|
||||
fprintf(stderr,"[CCI ERROR] Invalid CardDevice: %s\n",yaml->CardInfo.CardDevice);
|
||||
return INVALID_YAML_OPT;
|
||||
@@ -447,53 +449,53 @@ int GetNCSDFlags(cci_settings *cciset, rsf_settings *yaml)
|
||||
|
||||
int GetWriteableAddress(cci_settings *cciset, user_settings *usrset)
|
||||
{
|
||||
int result = GetSaveDataSize_yaml(&cciset->SaveDataSize,usrset);
|
||||
int result = GetSaveDataSize_rsf(&cciset->savedataSize,usrset);
|
||||
if(result) return result;
|
||||
|
||||
char *WriteableAddressStr = usrset->yaml_set.CardInfo.WritableAddress;;
|
||||
char *WriteableAddressStr = usrset->common.rsfSet.CardInfo.WritableAddress;;
|
||||
|
||||
cciset->WritableAddress = -1;
|
||||
if(cciset->NCSD_Flags[MediaTypeIndex] != CARD2) return 0; // Can only be set for Card2 Media
|
||||
cciset->writableAddress = -1;
|
||||
if(cciset->flags[MediaTypeIndex] != CARD2) return 0; // Can only be set for Card2 Media
|
||||
|
||||
if(WriteableAddressStr){
|
||||
if(strncmp(WriteableAddressStr,"0x",2) != 0){
|
||||
fprintf(stderr,"[CCI ERROR] WritableAddress requires a Hexadecimal value\n");
|
||||
return INVALID_YAML_OPT;
|
||||
}
|
||||
cciset->WritableAddress = strtoul((WriteableAddressStr+2),NULL,16);
|
||||
cciset->writableAddress = strtoul((WriteableAddressStr+2),NULL,16);
|
||||
}
|
||||
if(cciset->WritableAddress == -1){ // If not set manually or is max size
|
||||
if ((cciset->MediaSize / 2) < cciset->SaveDataSize){ // If SaveData size is greater than half the MediaSize
|
||||
u64 saveDataSize = cciset->SaveDataSize / KB;
|
||||
fprintf(stderr,"[CCI ERROR] Too large SaveDataSize %luK\n",saveDataSize);
|
||||
if(cciset->writableAddress == -1){ // If not set manually or is max size
|
||||
if ((cciset->mediaSize / 2) < cciset->savedataSize){ // If SaveData size is greater than half the MediaSize
|
||||
u64 SavedataSize = cciset->savedataSize / KB;
|
||||
fprintf(stderr,"[CCI ERROR] Too large SavedataSize %luK\n",SavedataSize);
|
||||
return SAVE_DATA_TOO_LARGE;
|
||||
}
|
||||
if (cciset->SaveDataSize > (u64)(2047*MB)){ // Limit set by Nintendo
|
||||
u64 saveDataSize = cciset->SaveDataSize / KB;
|
||||
fprintf(stderr,"[CCI ERROR] Too large SaveDataSize %luK\n",saveDataSize);
|
||||
if (cciset->savedataSize > (u64)(2047*MB)){ // Limit set by Nintendo
|
||||
u64 SavedataSize = cciset->savedataSize / KB;
|
||||
fprintf(stderr,"[CCI ERROR] Too large SavedataSize %luK\n",SavedataSize);
|
||||
return SAVE_DATA_TOO_LARGE;
|
||||
}
|
||||
u64 UnusedSize = GetUnusedSize(cciset->MediaSize,cciset->NCSD_Flags[MediaTypeIndex]); // Need to look into this
|
||||
cciset->WritableAddress = cciset->MediaSize - UnusedSize - cciset->SaveDataSize;
|
||||
u64 UnusedSize = GetUnusedSize(cciset->mediaSize,cciset->flags[MediaTypeIndex]); // Need to look into this
|
||||
cciset->writableAddress = cciset->mediaSize - UnusedSize - cciset->savedataSize;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GetCardInfoBitmask(cci_settings *cciset, user_settings *usrset)
|
||||
{
|
||||
char *str = usrset->yaml_set.CardInfo.CardType;
|
||||
if(!str) cciset->CardInfoBitmask |= 0;
|
||||
char *str = usrset->common.rsfSet.CardInfo.CardType;
|
||||
if(!str) cciset->cardInfoBitmask |= 0;
|
||||
else{
|
||||
if(strcasecmp(str,"s1") == 0) cciset->CardInfoBitmask |= 0;
|
||||
else if(strcasecmp(str,"s2") == 0) cciset->CardInfoBitmask |= 0x20;
|
||||
if(strcasecmp(str,"s1") == 0) cciset->cardInfoBitmask |= 0;
|
||||
else if(strcasecmp(str,"s2") == 0) cciset->cardInfoBitmask |= 0x20;
|
||||
else {
|
||||
fprintf(stderr,"[CCI ERROR] Invalid CardType: %s\n",str);
|
||||
return INVALID_YAML_OPT;
|
||||
}
|
||||
}
|
||||
|
||||
str = usrset->yaml_set.CardInfo.CryptoType;
|
||||
if(!str) cciset->CardInfoBitmask |= (3*0x40);
|
||||
str = usrset->common.rsfSet.CardInfo.CryptoType;
|
||||
if(!str) cciset->cardInfoBitmask |= (3*0x40);
|
||||
else{
|
||||
int Value = strtol(str,NULL,10);
|
||||
if(Value < 0 || Value > 3) {
|
||||
@@ -503,7 +505,7 @@ int GetCardInfoBitmask(cci_settings *cciset, user_settings *usrset)
|
||||
if(Value != 3){
|
||||
fprintf(stderr,"[CCI WARNING] Card crypto type = '%d'\n",Value);
|
||||
}
|
||||
cciset->CardInfoBitmask |= (Value*0x40);
|
||||
cciset->cardInfoBitmask |= (Value*0x40);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -511,9 +513,9 @@ int GetCardInfoBitmask(cci_settings *cciset, user_settings *usrset)
|
||||
|
||||
int CheckMediaSize(cci_settings *cciset)
|
||||
{
|
||||
if(cciset->TotalContentSize > cciset->MediaSize){
|
||||
if(cciset->cciTotalSize > cciset->mediaSize){
|
||||
char *MediaSizeStr = NULL;
|
||||
switch(cciset->MediaSize){
|
||||
switch(cciset->mediaSize){
|
||||
case (u64)128*MB: MediaSizeStr = " '128MB'"; break;
|
||||
case (u64)256*MB: MediaSizeStr = " '256MB'"; break;
|
||||
case (u64)512*MB: MediaSizeStr = " '512MB'"; break;
|
||||
@@ -533,11 +535,11 @@ int CheckMediaSize(cci_settings *cciset)
|
||||
|
||||
bool IsCci(u8 *ncsd)
|
||||
{
|
||||
NCSD_Header *hdr = (NCSD_Header*)(ncsd+0x100);
|
||||
cci_hdr *hdr = (cci_hdr*)(ncsd+0x100);
|
||||
if(!hdr) return false;
|
||||
if(memcmp(hdr->magic,"NCSD",4)!=0) return false;
|
||||
if(hdr->partition_flags[MediaPlatformIndex] != CTR) return false;
|
||||
if(hdr->partition_flags[MediaTypeIndex] != CARD1 && hdr->partition_flags[MediaTypeIndex] != CARD2) return false;
|
||||
if(hdr->partitionFlags[MediaPlatformIndex] != CTR) return false;
|
||||
if(hdr->partitionFlags[MediaTypeIndex] != CARD1 && hdr->partitionFlags[MediaTypeIndex] != CARD2) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -549,16 +551,16 @@ u8* GetPartition(u8 *ncsd, u8 index)
|
||||
|
||||
u64 GetPartitionOffset(u8 *ncsd, u8 index)
|
||||
{
|
||||
NCSD_Header *hdr = (NCSD_Header*)(ncsd+0x100);
|
||||
u32 media_size = 0x200*pow(2,hdr->partition_flags[MediaUnitSize]);
|
||||
u32 offset = u8_to_u64(hdr->offsetsize_table[index].offset,LE);
|
||||
cci_hdr *hdr = (cci_hdr*)(ncsd+0x100);
|
||||
u32 media_size = 0x200*pow(2,hdr->partitionFlags[MediaUnitSize]);
|
||||
u32 offset = u8_to_u64(hdr->offset_sizeTable[index].offset,LE);
|
||||
return offset*media_size;
|
||||
}
|
||||
|
||||
u64 GetPartitionSize(u8 *ncsd, u8 index)
|
||||
{
|
||||
NCSD_Header *hdr = (NCSD_Header*)(ncsd+0x100);
|
||||
u32 media_size = 0x200*pow(2,hdr->partition_flags[MediaUnitSize]);
|
||||
u32 size = u8_to_u64(hdr->offsetsize_table[index].size,LE);
|
||||
cci_hdr *hdr = (cci_hdr*)(ncsd+0x100);
|
||||
u32 media_size = 0x200*pow(2,hdr->partitionFlags[MediaUnitSize]);
|
||||
u32 size = u8_to_u64(hdr->offset_sizeTable[index].size,LE);
|
||||
return size*media_size;
|
||||
}
|
||||
|
||||
@@ -53,18 +53,32 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
u8 magic[4];
|
||||
u8 media_size[4];
|
||||
u8 title_id[8];
|
||||
u8 partitions_fs_type[8];
|
||||
u8 partitions_crypto_type[8];
|
||||
partition_offsetsize offsetsize_table[8];
|
||||
u8 exheader_hash[0x20];
|
||||
u8 additional_header_size[0x4];
|
||||
u8 sector_zero_offset[0x4];
|
||||
u8 partition_flags[8];
|
||||
u8 partition_id_table[8][8];
|
||||
u8 reserved[0x30];
|
||||
} NCSD_Header;
|
||||
u8 mediaSize[4];
|
||||
u8 titleId[8];
|
||||
u8 partitionsFsType[8];
|
||||
u8 partitionsCryptoType[8];
|
||||
partition_offsetsize offset_sizeTable[8];
|
||||
u8 exhdrHash[0x20];
|
||||
u8 additionalHdrSize[0x4];
|
||||
u8 sectorZeroOffset[0x4];
|
||||
u8 partitionFlags[8];
|
||||
u8 partitionIdTable[8][8];
|
||||
u8 padding[0x30];
|
||||
} ncsd_hdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 magic[4];
|
||||
u8 mediaSize[4];
|
||||
u8 titleId[8];
|
||||
u8 partitionsFsType[8];
|
||||
u8 partitionsCryptoType[8];
|
||||
partition_offsetsize offset_sizeTable[8];
|
||||
u8 padding0[0x28];
|
||||
u8 partitionFlags[8];
|
||||
u8 partitionIdTable[8][8];
|
||||
u8 padding1[0x30];
|
||||
} cci_hdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -75,7 +89,7 @@ typedef struct
|
||||
u8 media_size_used[8];
|
||||
u8 reserved_1[0x18];
|
||||
u8 cver_title_id[8];
|
||||
u8 cver_title_version[2];
|
||||
u8 cver_title_titleVersion[2];
|
||||
u8 reserved_2[0xcd6];
|
||||
//
|
||||
u8 ncch_0_title_id[8];
|
||||
@@ -83,53 +97,53 @@ typedef struct
|
||||
u8 initial_data[0x30];
|
||||
u8 reserved_4[0xc0];
|
||||
u8 ncch_0_header[0x100];
|
||||
} CardInfo_Header;
|
||||
} cardinfo_hdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 CardDeviceReserved1[0x200];
|
||||
u8 TitleKey[0x10];
|
||||
u8 CardDeviceReserved2[0xf0];
|
||||
} Dev_CardInfo_Header;
|
||||
} devcardinfo_hdr;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 Signature[0x100];
|
||||
NCSD_Header commonHDR;
|
||||
CardInfo_Header CardInfoHDR;
|
||||
Dev_CardInfo_Header DevCardInfoHDR;
|
||||
u8 *ContentImportBuffer;
|
||||
u8 signature[0x100];
|
||||
cci_hdr cciHdr;
|
||||
cardinfo_hdr cardinfo;
|
||||
devcardinfo_hdr devcardinfo;
|
||||
u8 *ncchImportBuffer;
|
||||
keys_struct *keys;
|
||||
} InternalCCI_Context;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u64 MediaSize;
|
||||
u8 MediaID[8];
|
||||
u8 NCSD_Flags[8];
|
||||
u64 SaveDataSize;
|
||||
u64 WritableAddress;
|
||||
u32 CardInfoBitmask;
|
||||
u64 mediaSize;
|
||||
u8 mediaId[8];
|
||||
u8 flags[8];
|
||||
u64 savedataSize;
|
||||
u64 writableAddress;
|
||||
u32 cardInfoBitmask;
|
||||
|
||||
u8 InitialData[0x30];
|
||||
NCCH_Header *NCCH_HDR;
|
||||
u8 TitleKey[0x10];
|
||||
u8 initialData[0x30];
|
||||
ncch_hdr *ncchHdr;
|
||||
u8 titleKey[0x10];
|
||||
|
||||
u8 *ncch0;
|
||||
u64 ncch0_FileLen;
|
||||
FILE **content;
|
||||
u64 ContentSize[CCI_MAX_CONTENT];
|
||||
u64 ContentOffset[CCI_MAX_CONTENT];
|
||||
u8 ContentTitleID[CCI_MAX_CONTENT][8];
|
||||
u64 TotalContentSize;
|
||||
u64 contentSize[CCI_MAX_CONTENT];
|
||||
u64 contentOffset[CCI_MAX_CONTENT];
|
||||
u8 contentTitleId[CCI_MAX_CONTENT][8];
|
||||
u64 cciTotalSize;
|
||||
|
||||
bool MediaFootPadding;
|
||||
u32 MediaUnitSize;
|
||||
bool fillOutCci;
|
||||
u32 mediaUnit;
|
||||
|
||||
FILE *out;
|
||||
} cci_settings;
|
||||
|
||||
static const u8 Stock_InitialData[0x30] =
|
||||
static const u8 stock_initial_data[0x30] =
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
@@ -141,7 +155,7 @@ static const u8 Stock_InitialData[0x30] =
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const u8 Stock_TitleKey[0x10] =
|
||||
static const u8 stock_title_key[0x10] =
|
||||
{
|
||||
0x6E, 0xC7, 0x5F, 0xB2, 0xE2, 0xB4,
|
||||
0x87, 0x46, 0x1E, 0xDD, 0xCB, 0xB8,
|
||||
|
||||
+242
-38
@@ -1,46 +1,35 @@
|
||||
#ifndef _KEYS_RETAIL_H_
|
||||
#define _KEYS_RETAIL_H_
|
||||
#ifndef _PPKI_H_
|
||||
#define _PPKI_H_
|
||||
|
||||
#ifdef PKI_LEGACY
|
||||
#include "ppki_legacy.h"
|
||||
#endif
|
||||
|
||||
#ifndef PUBLIC_BUILD
|
||||
// AES KEYS
|
||||
static const unsigned char common_key_prod_keyY0[16] =
|
||||
static const unsigned char ctr_unfixed_ncch_keyX_ppki[2][16] = // Dummy
|
||||
{
|
||||
0xD0, 0x7B, 0x33, 0x7F, 0x9C, 0xA4, 0x38, 0x59,
|
||||
0x32, 0xA2, 0xE2, 0x57, 0x23, 0x23, 0x2E, 0xB9
|
||||
{0x81, 0x50, 0xA9, 0x78, 0x53, 0x3B, 0xA5, 0xE9, 0xA5, 0x0A, 0x23, 0x16, 0xB9, 0x3A, 0xED, 0x5A} , // Normal
|
||||
{0xB4, 0xD1, 0xCF, 0x58, 0x49, 0xCE, 0x8A, 0x2D, 0x71, 0x58, 0xF6, 0x66, 0x77, 0x5D, 0x16, 0x3D} , // 7.X new Crypto
|
||||
};
|
||||
|
||||
static const unsigned char common_key_prod_keyY1[16] =
|
||||
static const unsigned char ctr_common_etd_keyX_ppki[16] = // Dummy
|
||||
{
|
||||
0x0C, 0x76, 0x72, 0x30, 0xF0, 0x99, 0x8F, 0x1C,
|
||||
0x46, 0x82, 0x82, 0x02, 0xFA, 0xAC, 0xBE, 0x4C
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char common_key_prod_keyY2[16] =
|
||||
static const unsigned char ctr_common_etd_keyY_ppki[6][16] =
|
||||
{
|
||||
0xC4, 0x75, 0xCB, 0x3A, 0xB8, 0xC7, 0x88, 0xBB,
|
||||
0x57, 0x5E, 0x12, 0xA1, 0x09, 0x07, 0xB8, 0xA4
|
||||
};
|
||||
|
||||
static const unsigned char common_key_prod_keyY3[16] =
|
||||
{
|
||||
0xE4, 0x86, 0xEE, 0xE3, 0xD0, 0xC0, 0x9C, 0x90,
|
||||
0x2F, 0x66, 0x86, 0xD4, 0xC0, 0x6F, 0x64, 0x9F
|
||||
};
|
||||
|
||||
static const unsigned char common_key_prod_keyY4[16] =
|
||||
{
|
||||
0xED, 0x31, 0xBA, 0x9C, 0x04, 0xB0, 0x67, 0x50,
|
||||
0x6C, 0x44, 0x97, 0xA3, 0x5B, 0x78, 0x04, 0xFC
|
||||
};
|
||||
|
||||
static const unsigned char common_key_prod_keyY5[16] =
|
||||
{
|
||||
0x5E, 0x66, 0x99, 0x8A, 0xB4, 0xE8, 0x93, 0x16,
|
||||
0x06, 0x85, 0x0F, 0xD7, 0xA1, 0x6D, 0xD7, 0x55
|
||||
{0xD0, 0x7B, 0x33, 0x7F, 0x9C, 0xA4, 0x38, 0x59, 0x32, 0xA2, 0xE2, 0x57, 0x23, 0x23, 0x2E, 0xB9} , // 0 - eShop Titles
|
||||
{0x0C, 0x76, 0x72, 0x30, 0xF0, 0x99, 0x8F, 0x1C, 0x46, 0x82, 0x82, 0x02, 0xFA, 0xAC, 0xBE, 0x4C} , // 1 - System Titles
|
||||
{0xC4, 0x75, 0xCB, 0x3A, 0xB8, 0xC7, 0x88, 0xBB, 0x57, 0x5E, 0x12, 0xA1, 0x09, 0x07, 0xB8, 0xA4} , // 2
|
||||
{0xE4, 0x86, 0xEE, 0xE3, 0xD0, 0xC0, 0x9C, 0x90, 0x2F, 0x66, 0x86, 0xD4, 0xC0, 0x6F, 0x64, 0x9F} , // 3
|
||||
{0xED, 0x31, 0xBA, 0x9C, 0x04, 0xB0, 0x67, 0x50, 0x6C, 0x44, 0x97, 0xA3, 0x5B, 0x78, 0x04, 0xFC} , // 4
|
||||
{0x5E, 0x66, 0x99, 0x8A, 0xB4, 0xE8, 0x93, 0x16, 0x06, 0x85, 0x0F, 0xD7, 0xA1, 0x6D, 0xD7, 0x55} , // 5
|
||||
};
|
||||
|
||||
// RSA KEYS
|
||||
static const unsigned char retail_cert_root_rsa_pubk[0x200] =
|
||||
static const unsigned char root_ppki_rsa_pub[0x200] =
|
||||
{
|
||||
0xF8, 0x24, 0x6C, 0x58, 0xBA, 0xE7, 0x50, 0x03,
|
||||
0x01, 0xFB, 0xB7, 0xC2, 0xEB, 0xE0, 0x01, 0x05,
|
||||
@@ -108,7 +97,151 @@ static const unsigned char retail_cert_root_rsa_pubk[0x200] =
|
||||
0xCF, 0xC4, 0x4E, 0x1F, 0x91, 0xCB, 0xD4, 0x95
|
||||
};
|
||||
|
||||
static const unsigned char RetailAccessDesc_pubMod[0x100] =
|
||||
static const unsigned char cpB_ppki_rsa_priv[256] =
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char cpB_ppki_rsa_pub[256] =
|
||||
{
|
||||
0xA6, 0x89, 0xC5, 0x90, 0xFD, 0x0B, 0x2F, 0x0D,
|
||||
0x4F, 0x56, 0xB6, 0x32, 0xFB, 0x93, 0x4E, 0xD0,
|
||||
0x73, 0x95, 0x17, 0xB3, 0x3A, 0x79, 0xDE, 0x04,
|
||||
0x0E, 0xE9, 0x2D, 0xC3, 0x1D, 0x37, 0xC7, 0xF7,
|
||||
0x3B, 0xF0, 0x4B, 0xD3, 0xE4, 0x4E, 0x20, 0xAB,
|
||||
0x5A, 0x6F, 0xEA, 0xF5, 0x98, 0x4C, 0xC1, 0xF6,
|
||||
0x06, 0x2E, 0x9A, 0x9F, 0xE5, 0x6C, 0x32, 0x85,
|
||||
0xDC, 0x6F, 0x25, 0xDD, 0xD5, 0xD0, 0xBF, 0x9F,
|
||||
0xE2, 0xEF, 0xE8, 0x35, 0xDF, 0x26, 0x34, 0xED,
|
||||
0x93, 0x7F, 0xAB, 0x02, 0x14, 0xD1, 0x04, 0x80,
|
||||
0x9C, 0xF7, 0x4B, 0x86, 0x0E, 0x6B, 0x04, 0x83,
|
||||
0xF4, 0xCD, 0x2D, 0xAB, 0x2A, 0x96, 0x02, 0xBC,
|
||||
0x56, 0xF0, 0xD6, 0xBD, 0x94, 0x6A, 0xED, 0x6E,
|
||||
0x0B, 0xE4, 0xF0, 0x8F, 0x26, 0x68, 0x6B, 0xD0,
|
||||
0x9E, 0xF7, 0xDB, 0x32, 0x5F, 0x82, 0xB1, 0x8F,
|
||||
0x6A, 0xF2, 0xED, 0x52, 0x5B, 0xFD, 0x82, 0x8B,
|
||||
0x65, 0x3F, 0xEE, 0x6E, 0xCE, 0x40, 0x0D, 0x5A,
|
||||
0x48, 0xFF, 0xE2, 0x2D, 0x53, 0x8B, 0xB5, 0x33,
|
||||
0x5B, 0x41, 0x53, 0x34, 0x2D, 0x43, 0x35, 0xAC,
|
||||
0xF5, 0x90, 0xD0, 0xD3, 0x0A, 0xE2, 0x04, 0x3C,
|
||||
0x7F, 0x5A, 0xD2, 0x14, 0xFC, 0x9C, 0x0F, 0xE6,
|
||||
0xFA, 0x40, 0xA5, 0xC8, 0x65, 0x06, 0xCA, 0x63,
|
||||
0x69, 0xBC, 0xEE, 0x44, 0xA3, 0x2D, 0x9E, 0x69,
|
||||
0x5C, 0xF0, 0x0B, 0x4F, 0xD7, 0x9A, 0xDB, 0x56,
|
||||
0x8D, 0x14, 0x9C, 0x20, 0x28, 0xA1, 0x4C, 0x9D,
|
||||
0x71, 0xB8, 0x50, 0xCA, 0x36, 0x5B, 0x37, 0xF7,
|
||||
0x0B, 0x65, 0x77, 0x91, 0xFC, 0x5D, 0x72, 0x8C,
|
||||
0x4E, 0x18, 0xFD, 0x22, 0x55, 0x7C, 0x40, 0x62,
|
||||
0xD7, 0x47, 0x71, 0x53, 0x3C, 0x70, 0x17, 0x9D,
|
||||
0x3D, 0xAE, 0x8F, 0x92, 0xB1, 0x17, 0xE4, 0x5C,
|
||||
0xB3, 0x32, 0xF3, 0xB3, 0xC2, 0xA2, 0x2E, 0x70,
|
||||
0x5C, 0xFE, 0xC6, 0x6F, 0x6D, 0xA3, 0x77, 0x2B
|
||||
};
|
||||
|
||||
static const unsigned char xsC_ppki_rsa_priv[256] =
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char xsC_ppki_rsa_pub[256] =
|
||||
{
|
||||
0xAD, 0x50, 0x5B, 0xB6, 0xC6, 0x7E, 0x2E, 0x5B,
|
||||
0xDD, 0x6A, 0x3B, 0xEC, 0x43, 0xD9, 0x10, 0xC7,
|
||||
0x72, 0xE9, 0xCC, 0x29, 0x0D, 0xA5, 0x85, 0x88,
|
||||
0xB7, 0x7D, 0xCC, 0x11, 0x68, 0x0B, 0xB3, 0xE2,
|
||||
0x9F, 0x4E, 0xAB, 0xBB, 0x26, 0xE9, 0x8C, 0x26,
|
||||
0x01, 0x98, 0x5C, 0x04, 0x1B, 0xB1, 0x43, 0x78,
|
||||
0xE6, 0x89, 0x18, 0x1A, 0xAD, 0x77, 0x05, 0x68,
|
||||
0xE9, 0x28, 0xA2, 0xB9, 0x81, 0x67, 0xEE, 0x3E,
|
||||
0x10, 0xD0, 0x72, 0xBE, 0xEF, 0x1F, 0xA2, 0x2F,
|
||||
0xA2, 0xAA, 0x3E, 0x13, 0xF1, 0x1E, 0x18, 0x36,
|
||||
0xA9, 0x2A, 0x42, 0x81, 0xEF, 0x70, 0xAA, 0xF4,
|
||||
0xE4, 0x62, 0x99, 0x82, 0x21, 0xC6, 0xFB, 0xB9,
|
||||
0xBD, 0xD0, 0x17, 0xE6, 0xAC, 0x59, 0x04, 0x94,
|
||||
0xE9, 0xCE, 0xA9, 0x85, 0x9C, 0xEB, 0x2D, 0x2A,
|
||||
0x4C, 0x17, 0x66, 0xF2, 0xC3, 0x39, 0x12, 0xC5,
|
||||
0x8F, 0x14, 0xA8, 0x03, 0xE3, 0x6F, 0xCC, 0xDC,
|
||||
0xCC, 0xDC, 0x13, 0xFD, 0x7A, 0xE7, 0x7C, 0x7A,
|
||||
0x78, 0xD9, 0x97, 0xE6, 0xAC, 0xC3, 0x55, 0x57,
|
||||
0xE0, 0xD3, 0xE9, 0xEB, 0x64, 0xB4, 0x3C, 0x92,
|
||||
0xF4, 0xC5, 0x0D, 0x67, 0xA6, 0x02, 0xDE, 0xB3,
|
||||
0x91, 0xB0, 0x66, 0x61, 0xCD, 0x32, 0x88, 0x0B,
|
||||
0xD6, 0x49, 0x12, 0xAF, 0x1C, 0xBC, 0xB7, 0x16,
|
||||
0x2A, 0x06, 0xF0, 0x25, 0x65, 0xD3, 0xB0, 0xEC,
|
||||
0xE4, 0xFC, 0xEC, 0xDD, 0xAE, 0x8A, 0x49, 0x34,
|
||||
0xDB, 0x8E, 0xE6, 0x7F, 0x30, 0x17, 0x98, 0x62,
|
||||
0x21, 0x15, 0x5D, 0x13, 0x1C, 0x6C, 0x3F, 0x09,
|
||||
0xAB, 0x19, 0x45, 0xC2, 0x06, 0xAC, 0x70, 0xC9,
|
||||
0x42, 0xB3, 0x6F, 0x49, 0xA1, 0x18, 0x3B, 0xCD,
|
||||
0x78, 0xB6, 0xE4, 0xB4, 0x7C, 0x6C, 0x5C, 0xAC,
|
||||
0x0F, 0x8D, 0x62, 0xF8, 0x97, 0xC6, 0x95, 0x3D,
|
||||
0xD1, 0x2F, 0x28, 0xB7, 0x0C, 0x5B, 0x7D, 0xF7,
|
||||
0x51, 0x81, 0x9A, 0x98, 0x34, 0x65, 0x26, 0x25
|
||||
};
|
||||
|
||||
static const unsigned char prod_acex_pub[0x100] =
|
||||
{
|
||||
0xB1, 0xE3, 0xE3, 0x5F, 0x01, 0x39, 0x80, 0xD1,
|
||||
0x56, 0x78, 0x9D, 0xB7, 0x06, 0xF7, 0x1D, 0xBF,
|
||||
@@ -144,7 +277,43 @@ static const unsigned char RetailAccessDesc_pubMod[0x100] =
|
||||
0x47, 0x1A, 0x63, 0x44, 0x19, 0xB3, 0x8E, 0xA5
|
||||
};
|
||||
|
||||
static const unsigned char RetailNcsdCfa_pubMod[0x100] =
|
||||
static const unsigned char prod_acex_priv[256] =
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char prod_ncsd_cfa_pub[0x100] =
|
||||
{
|
||||
0xFB, 0xDE, 0xB8, 0x2B, 0x40, 0x93, 0x0F, 0xF6,
|
||||
0xB1, 0x9A, 0x08, 0x06, 0x1B, 0x86, 0xFE, 0xD0,
|
||||
@@ -180,7 +349,43 @@ static const unsigned char RetailNcsdCfa_pubMod[0x100] =
|
||||
0x29, 0xAB, 0x69, 0x69, 0xC8, 0x28, 0xEE, 0x5D
|
||||
};
|
||||
|
||||
static const unsigned char retail_firm_pubk[0x100] =
|
||||
static const unsigned char prod_ncsd_cfa_priv[256] =
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char prod_firm_pub[0x100] =
|
||||
{
|
||||
0xDE, 0xCF, 0xB6, 0xFC, 0x3D, 0x33, 0xE9, 0x55,
|
||||
0xFD, 0xAC, 0x90, 0xE8, 0x88, 0x17, 0xB0, 0x03,
|
||||
@@ -215,10 +420,9 @@ static const unsigned char retail_firm_pubk[0x100] =
|
||||
0xB2, 0xCC, 0x36, 0x87, 0x30, 0x85, 0xE8, 0xA1,
|
||||
0x04, 0x5B, 0xE0, 0x17, 0x9B, 0xD0, 0xEC, 0x9B
|
||||
};
|
||||
#endif
|
||||
|
||||
//Certificates
|
||||
static const unsigned char ca3_dpki_cert[0x400] =
|
||||
static const unsigned char ca3_ppki_cert[0x400] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x03, 0x70, 0x41, 0x38, 0xEF,
|
||||
0xBB, 0xBD, 0xA1, 0x6A, 0x98, 0x7D, 0xD9, 0x01,
|
||||
@@ -350,7 +554,7 @@ static const unsigned char ca3_dpki_cert[0x400] =
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char xsC_dpki_cert[0x300] =
|
||||
static const unsigned char xsC_ppki_cert[0x300] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x04, 0x91, 0x9E, 0xBE, 0x46,
|
||||
0x4A, 0xD0, 0xF5, 0x52, 0xCD, 0x1B, 0x72, 0xE7,
|
||||
@@ -450,7 +654,7 @@ static const unsigned char xsC_dpki_cert[0x300] =
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char cpB_dpki_cert[0x300] =
|
||||
static const unsigned char cpB_ppki_cert[0x300] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x04, 0x2E, 0xA6, 0x6C, 0x66,
|
||||
0xCF, 0xF3, 0x35, 0x79, 0x7D, 0x04, 0x97, 0xB7,
|
||||
@@ -0,0 +1,20 @@
|
||||
#ifndef _PPKI_LEGACY_H_
|
||||
#define _PPKI_LEGACY_H_
|
||||
|
||||
// AES Keys
|
||||
static const unsigned char rvl_common_etd_key_ppki[2][16] =
|
||||
{
|
||||
{0xEB, 0xE4, 0x2A, 0x22, 0x5E, 0x85, 0x93, 0xE4, 0x48, 0xD9, 0xC5, 0x45, 0x73, 0x81, 0xAA, 0xF7} , // 0 - Normal
|
||||
{0x63, 0xB8, 0x2B, 0xB4, 0xF4, 0x61, 0x4E, 0x2E, 0x13, 0xF2, 0xFE, 0xFB, 0xBA, 0x4C, 0x9B, 0x7E} , // 1 - Korean
|
||||
};
|
||||
|
||||
static const unsigned char twl_common_etd_key_ppki[1][16] =
|
||||
{
|
||||
{0xAF, 0x1B, 0xF5, 0x16, 0xA8, 0x07, 0xD2, 0x1A, 0xEA, 0x45, 0x98, 0x4F, 0x04, 0x74, 0x28, 0x61} , // 0 - Normal
|
||||
};
|
||||
|
||||
// RSA Keys
|
||||
|
||||
// Certificates
|
||||
|
||||
#endif
|
||||
@@ -11,9 +11,9 @@ int BuildRomFs(ncch_settings *ncchset)
|
||||
int result = 0;
|
||||
|
||||
// If Not Using RomFS Return
|
||||
if(!ncchset->Options.UseRomFS) return result;
|
||||
if(!ncchset->options.UseRomFS) return result;
|
||||
|
||||
if(ncchset->ComponentFilePtrs.romfs){ // The user has specified a pre-built RomFs Binary
|
||||
if(ncchset->componentFilePtrs.romfs){ // The user has specified a pre-built RomFs Binary
|
||||
result = ImportRomFsBinaryFromFile(ncchset);
|
||||
return result;
|
||||
}
|
||||
@@ -25,11 +25,11 @@ int BuildRomFs(ncch_settings *ncchset)
|
||||
|
||||
int ImportRomFsBinaryFromFile(ncch_settings *ncchset)
|
||||
{
|
||||
ncchset->Sections.RomFs.size = ncchset->ComponentFilePtrs.romfs_size;
|
||||
ncchset->Sections.RomFs.buffer = malloc(ncchset->Sections.RomFs.size);
|
||||
if(!ncchset->Sections.RomFs.buffer) {fprintf(stderr,"[ROMFS ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
ReadFile_64(ncchset->Sections.RomFs.buffer,ncchset->Sections.RomFs.size,0,ncchset->ComponentFilePtrs.romfs);
|
||||
if(memcmp(ncchset->Sections.RomFs.buffer,"IVFC",4) != 0){
|
||||
ncchset->sections.romFs.size = ncchset->componentFilePtrs.romfsSize;
|
||||
ncchset->sections.romFs.buffer = malloc(ncchset->sections.romFs.size);
|
||||
if(!ncchset->sections.romFs.buffer) {fprintf(stderr,"[ROMFS ERROR] MEM ERROR\n"); return MEM_ERROR;}
|
||||
ReadFile_64(ncchset->sections.romFs.buffer,ncchset->sections.romFs.size,0,ncchset->componentFilePtrs.romfs);
|
||||
if(memcmp(ncchset->sections.romFs.buffer,"IVFC",4) != 0){
|
||||
fprintf(stderr,"[ROMFS ERROR] Invalid RomFS Binary.\n");
|
||||
return INVALID_ROMFS_FILE;
|
||||
}
|
||||
|
||||
@@ -4,20 +4,21 @@
|
||||
|
||||
// Private Prototypes
|
||||
int SetupTicketBuffer(COMPONENT_STRUCT *tik);
|
||||
int SetupTicketHeader(TicketStruct *hdr, cia_settings *ciaset);
|
||||
int SignTicketHeader(TicketStruct *hdr, TicketSignatureStruct *sig, keys_struct *keys);
|
||||
void SetContentIndexData(u8 *dest);
|
||||
int SetupTicketHeader(tik_hdr *hdr, cia_settings *ciaset);
|
||||
int SignTicketHeader(tik_hdr *hdr, tik_signature *sig, keys_struct *keys);
|
||||
void SetLimits(tik_hdr *hdr, cia_settings *ciaset);
|
||||
void SetContentIndexData(tik_hdr *hdr, cia_settings *ciaset);
|
||||
|
||||
|
||||
int BuildTicket(cia_settings *ciaset)
|
||||
{
|
||||
int result = 0;
|
||||
result = SetupTicketBuffer(&ciaset->CIA_Sections.Ticket);
|
||||
result = SetupTicketBuffer(&ciaset->ciaSections.tik);
|
||||
if(result) return result;
|
||||
|
||||
// Setting Ticket Struct Ptrs
|
||||
TicketSignatureStruct *sig = (TicketSignatureStruct*)ciaset->CIA_Sections.Ticket.buffer;
|
||||
TicketStruct *hdr = (TicketStruct*)(ciaset->CIA_Sections.Ticket.buffer+sizeof(TicketSignatureStruct));
|
||||
tik_signature *sig = (tik_signature*)ciaset->ciaSections.tik.buffer;
|
||||
tik_hdr *hdr = (tik_hdr*)(ciaset->ciaSections.tik.buffer+sizeof(tik_signature));
|
||||
|
||||
result = SetupTicketHeader(hdr,ciaset);
|
||||
if(result) return result;
|
||||
@@ -27,37 +28,41 @@ int BuildTicket(cia_settings *ciaset)
|
||||
|
||||
int SetupTicketBuffer(COMPONENT_STRUCT *tik)
|
||||
{
|
||||
tik->size = sizeof(TicketSignatureStruct) + sizeof(TicketStruct);
|
||||
tik->size = sizeof(tik_signature) + sizeof(tik_hdr);
|
||||
tik->buffer = malloc(tik->size);
|
||||
if(!tik->buffer) { fprintf(stderr,"[ERROR] MEM ERROR\n"); return MEM_ERROR; }
|
||||
memset(tik->buffer,0,tik->size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SetupTicketHeader(TicketStruct *hdr, cia_settings *ciaset)
|
||||
int SetupTicketHeader(tik_hdr *hdr, cia_settings *ciaset)
|
||||
{
|
||||
memset(hdr,0,sizeof(TicketStruct));
|
||||
memset(hdr,0,sizeof(tik_hdr));
|
||||
|
||||
memcpy(hdr->Issuer,ciaset->tik.TicketIssuer,0x40);
|
||||
hdr->TicketFormatVersion = ciaset->tik.ticket_format_ver;
|
||||
hdr->ca_crl_version = ciaset->cert.ca_crl_version;
|
||||
hdr->signer_crl_version = ciaset->cert.signer_crl_version;
|
||||
if(ciaset->content.EncryptContents)
|
||||
CryptTitleKey(hdr->EncryptedTitleKey, ciaset->tik.TitleKey,ciaset->TitleID,ciaset->keys,ENC);
|
||||
memcpy(hdr->TicketID,ciaset->tik.TicketID,8);
|
||||
memcpy(hdr->DeviceID,ciaset->tik.DeviceID,8);
|
||||
memcpy(hdr->TitleID,ciaset->TitleID,8);
|
||||
memcpy(hdr->TicketVersion,ciaset->tik.TicketVersion,2);
|
||||
hdr->CommonKeyID = ciaset->keys->aes.CurrentCommonKey;
|
||||
SetContentIndexData(hdr->StaticData);
|
||||
memcpy(hdr->issuer,ciaset->tik.issuer,0x40);
|
||||
hdr->formatVersion = ciaset->tik.formatVersion;
|
||||
hdr->caCrlVersion = ciaset->cert.caCrlVersion;
|
||||
hdr->signerCrlVersion = ciaset->cert.signerCrlVersion;
|
||||
if(ciaset->content.encryptCia)
|
||||
CryptTitleKey(hdr->encryptedTitleKey, ciaset->common.titleKey,ciaset->common.titleId,ciaset->keys,ENC);
|
||||
memcpy(hdr->ticketId,ciaset->tik.ticketId,8);
|
||||
memcpy(hdr->deviceId,ciaset->tik.deviceId,8);
|
||||
memcpy(hdr->titleId,ciaset->common.titleId,8);
|
||||
u16_to_u8(hdr->ticketVersion,ciaset->tik.version,BE);
|
||||
hdr->licenceType = ciaset->tik.licenceType;
|
||||
hdr->keyId = ciaset->keys->aes.currentCommonKey;
|
||||
memcpy(hdr->eshopAccId,ciaset->tik.eshopAccId,4);
|
||||
hdr->audit = ciaset->tik.audit;
|
||||
SetLimits(hdr,ciaset);
|
||||
SetContentIndexData(hdr,ciaset);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SignTicketHeader(TicketStruct *hdr, TicketSignatureStruct *sig, keys_struct *keys)
|
||||
int SignTicketHeader(tik_hdr *hdr, tik_signature *sig, keys_struct *keys)
|
||||
{
|
||||
memset(sig,0,sizeof(TicketSignatureStruct));
|
||||
u32_to_u8(sig->sig_type,RSA_2048_SHA256,BE);
|
||||
return ctr_sig((u8*)hdr,sizeof(TicketStruct),sig->data,keys->rsa.TIK_Pub,keys->rsa.TIK_Priv,RSA_2048_SHA256,CTR_RSA_SIGN);
|
||||
memset(sig,0,sizeof(tik_signature));
|
||||
u32_to_u8(sig->sigType,RSA_2048_SHA256,BE);
|
||||
return ctr_sig((u8*)hdr,sizeof(tik_hdr),sig->data,keys->rsa.xsPub,keys->rsa.xsPvt,RSA_2048_SHA256,CTR_RSA_SIGN);
|
||||
}
|
||||
|
||||
int CryptTitleKey(u8 *EncTitleKey, u8 *DecTitleKey, u8 *TitleID, keys_struct *keys, u8 mode)
|
||||
@@ -72,7 +77,7 @@ int CryptTitleKey(u8 *EncTitleKey, u8 *DecTitleKey, u8 *TitleID, keys_struct *ke
|
||||
memset(&ctx,0x0,sizeof(ctr_aes_context));
|
||||
|
||||
//Crypting TitleKey
|
||||
ctr_init_aes_cbc(&ctx,keys->aes.CommonKey[keys->aes.CurrentCommonKey],iv,mode);
|
||||
ctr_init_aes_cbc(&ctx,keys->aes.commonKey[keys->aes.currentCommonKey],iv,mode);
|
||||
if(mode == ENC) ctr_aes_cbc(&ctx,DecTitleKey,EncTitleKey,0x10,ENC);
|
||||
else ctr_aes_cbc(&ctx,EncTitleKey,DecTitleKey,0x10,DEC);
|
||||
|
||||
@@ -80,7 +85,13 @@ int CryptTitleKey(u8 *EncTitleKey, u8 *DecTitleKey, u8 *TitleID, keys_struct *ke
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetContentIndexData(u8 *dest)
|
||||
void SetLimits(tik_hdr *hdr, cia_settings *ciaset)
|
||||
{
|
||||
memcpy(dest,normal_static_ticket_data,0x30);
|
||||
memset(hdr->limits,0,0x40);
|
||||
}
|
||||
|
||||
void SetContentIndexData(tik_hdr *hdr, cia_settings *ciaset)
|
||||
{
|
||||
memset(hdr->contentIndex,0,0xAC);
|
||||
memcpy(hdr->contentIndex,default_contentIndex,0x30);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef _TIK_H_
|
||||
#define _TIK_H_
|
||||
|
||||
static const unsigned char normal_static_ticket_data[0x30] =
|
||||
static const unsigned char default_contentIndex[0x30] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0xAC,
|
||||
0x00, 0x00, 0x00, 0x14, 0x00, 0x01, 0x00, 0x14,
|
||||
@@ -11,17 +11,6 @@ static const unsigned char normal_static_ticket_data[0x30] =
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
/*
|
||||
static const unsigned char system_static_ticket_data[0x30] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0xAC,
|
||||
0x00, 0x00, 0x00, 0x14, 0x00, 0x01, 0x00, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
|
||||
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x84,
|
||||
0x00, 0x00, 0x00, 0x84, 0x00, 0x03, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
|
||||
};
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
lic_Permanent = 0,
|
||||
@@ -31,7 +20,7 @@ typedef enum
|
||||
lic_Subscription = 4,
|
||||
lic_Service = 5,
|
||||
lic_Mask = 15
|
||||
} ticket_license_type;
|
||||
} tik_license_type;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -40,38 +29,40 @@ typedef enum
|
||||
right_Content = 3,
|
||||
right_ContentConsumption = 4,
|
||||
right_AccessTitle = 5
|
||||
} ticket_item_rights;
|
||||
} tik_item_rights;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 sig_type[4];
|
||||
u8 sigType[4];
|
||||
u8 data[0x100];
|
||||
u8 padding[0x3C];
|
||||
} TicketSignatureStruct;
|
||||
} tik_signature;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 Issuer[0x40];
|
||||
u8 ECDH[0x3c];
|
||||
u8 TicketFormatVersion;
|
||||
u8 ca_crl_version;
|
||||
u8 signer_crl_version;
|
||||
u8 EncryptedTitleKey[0x10];
|
||||
u8 unknown_0;
|
||||
u8 TicketID[8];
|
||||
u8 DeviceID[4];
|
||||
u8 TitleID[8];
|
||||
u8 unknown_1[2];
|
||||
u8 TicketVersion[2];
|
||||
u8 unused_0[8];
|
||||
u8 unused_1;
|
||||
u8 CommonKeyID;
|
||||
u8 unused_2[0x2F];
|
||||
u8 unknown_2;
|
||||
u8 unused_3[0x82];
|
||||
u8 StaticData[0x30];
|
||||
u8 unused_4[0x7C];
|
||||
} TicketStruct;
|
||||
u8 issuer[0x40];
|
||||
u8 eccPubKey[0x3c];
|
||||
u8 formatVersion;
|
||||
u8 caCrlVersion;
|
||||
u8 signerCrlVersion;
|
||||
u8 encryptedTitleKey[0x10];
|
||||
u8 padding0;
|
||||
u8 ticketId[8];
|
||||
u8 deviceId[4];
|
||||
u8 titleId[8];
|
||||
u8 padding1[2];
|
||||
u8 ticketVersion[2];
|
||||
u8 padding2[8];
|
||||
u8 licenceType;
|
||||
u8 keyId;
|
||||
u8 padding3[0x2A];
|
||||
u8 eshopAccId[4];
|
||||
u8 padding4;
|
||||
u8 audit;
|
||||
u8 padding5[0x42];
|
||||
u8 limits[0x40];
|
||||
u8 contentIndex[0xAC];
|
||||
} tik_hdr;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ u64 ConvertTwlIdToCtrId(u64 pgid)
|
||||
int GetProgramID(u64 *dest, rsf_settings *yaml, bool IsForExheader)
|
||||
{
|
||||
if(yaml->TitleInfo.Category && yaml->TitleInfo.CategoryFlags){
|
||||
fprintf(stderr,"[ERROR] Can not set Cateory and CategoryFlags at the same time.\n");
|
||||
fprintf(stderr,"[ERROR] Can not set \"Cateory\" and \"CategoryFlags\" at the same time.\n");
|
||||
return PID_BAD_YAML_SET;
|
||||
}
|
||||
u16 Type = 0x0004;
|
||||
@@ -37,7 +37,7 @@ int GetProgramID(u64 *dest, rsf_settings *yaml, bool IsForExheader)
|
||||
// Getting UniqueId
|
||||
if(yaml->TitleInfo.UniqueId) UniqueId = SetPIDUniqueId(yaml->TitleInfo.UniqueId);
|
||||
else{
|
||||
fprintf(stderr,"[ERROR] ParameterNotFound: TitleInfo/UniqueId\n");
|
||||
fprintf(stderr,"[ERROR] ParameterNotFound: \"TitleInfo/UniqueId\"\n");
|
||||
return PID_BAD_YAML_SET;
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ int GetUniqueID(u32 *dest, rsf_settings *yaml)
|
||||
{
|
||||
if(yaml->TitleInfo.UniqueId) *dest = 0xffffff & SetPIDUniqueId(yaml->TitleInfo.UniqueId);
|
||||
else{
|
||||
fprintf(stderr,"[ERROR] ParameterNotFound: TitleInfo/UniqueId\n");
|
||||
fprintf(stderr,"[ERROR] ParameterNotFound: \"TitleInfo/UniqueId\"\n");
|
||||
return PID_BAD_YAML_SET;
|
||||
}
|
||||
return 0;
|
||||
@@ -85,7 +85,7 @@ u32 SetPIDCategoryFromName(char *Category)
|
||||
else if(strcmp(Category,"Patch") == 0) return PROGRAM_ID_CATEGORY_PATCH;
|
||||
else if(strcmp(Category,"AutoUpdateContents") == 0) return PROGRAM_ID_CATEGORY_AUTO_UPDATE_CONTENT;
|
||||
else {
|
||||
fprintf(stderr,"[ERROR] Invalid Category: %s\n",Category);
|
||||
fprintf(stderr,"[ERROR] Invalid Category: \"%s\"\n",Category);
|
||||
return PID_INVALID_CATEGORY;
|
||||
}
|
||||
}
|
||||
@@ -120,7 +120,7 @@ u32 SetPIDCategoryFromFlags(char **CategoryFlags, u32 FlagNum)
|
||||
Category = SetPIDCategoryFromFlag(Category,PROGRAM_ID_CATEGORY_FLAG_CAN_SKIP_CONVERT_JUMP_ID,"CanSkipConvertJumpId");
|
||||
|
||||
else {
|
||||
fprintf(stderr,"[ERROR] Invalid CategoryFlag: %s\n",CategoryFlags[i]);
|
||||
fprintf(stderr,"[ERROR] Invalid CategoryFlag: \"%s\"\n",CategoryFlags[i]);
|
||||
return PID_INVALID_CATEGORY;
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ u32 SetPIDCategoryFromFlag(u32 Category, u32 Flag, char *FlagName)
|
||||
{
|
||||
if(!Flag) return Category;
|
||||
if((Category & Flag) == Flag){
|
||||
fprintf(stderr,"[ERROR] Failed to set '%s' for category. CategoryFlag was already set.\n",FlagName);
|
||||
fprintf(stderr,"[ERROR] Failed to set \"%s\" for category. CategoryFlag was already set.\n",FlagName);
|
||||
return PID_INVALID_CATEGORY;
|
||||
}
|
||||
return Category |= Flag;
|
||||
@@ -150,13 +150,13 @@ u16 SetTitleVariation(u16 Category, rsf_settings *yaml_set)
|
||||
if(yaml_set->TitleInfo.DemoIndex){
|
||||
u16 DemoIndex = strtol(yaml_set->TitleInfo.DemoIndex,NULL,10);
|
||||
if(DemoIndex > 255 || DemoIndex == 0){
|
||||
fprintf(stderr,"[ERROR] Invalid demo index '%d'\n",DemoIndex);
|
||||
fprintf(stderr,"[ERROR] Invalid demo index \"%d\"\n",DemoIndex);
|
||||
return PID_INVALID_VARIATION;
|
||||
}
|
||||
return DemoIndex;
|
||||
}
|
||||
else{
|
||||
fprintf(stderr,"[ERROR] ParameterNotFound: 'TitleInfo/DemoIndex'\n");
|
||||
fprintf(stderr,"[ERROR] ParameterNotFound: \"TitleInfo/DemoIndex\"\n");
|
||||
return PID_INVALID_VARIATION;
|
||||
}
|
||||
}
|
||||
@@ -165,7 +165,7 @@ u16 SetTitleVariation(u16 Category, rsf_settings *yaml_set)
|
||||
if(yaml_set->TitleInfo.ChildIndex){
|
||||
u16 ChildIndex = strtol(yaml_set->TitleInfo.ChildIndex,NULL,10);
|
||||
if(ChildIndex > 255){
|
||||
fprintf(stderr,"[ERROR] Invalid child index '%d'\n",ChildIndex);
|
||||
fprintf(stderr,"[ERROR] Invalid child index \"%d\"\n",ChildIndex);
|
||||
return PID_INVALID_VARIATION;
|
||||
}
|
||||
return ChildIndex;
|
||||
@@ -177,7 +177,7 @@ u16 SetTitleVariation(u16 Category, rsf_settings *yaml_set)
|
||||
if(yaml_set->TitleInfo.Variation){ // Might Rename to DataTitleIndex
|
||||
u16 DataTitleIndex = strtol(yaml_set->TitleInfo.Variation,NULL,10);
|
||||
if(DataTitleIndex > 255){
|
||||
fprintf(stderr,"[ERROR] Invalid variation '%d'\n",DataTitleIndex);
|
||||
fprintf(stderr,"[ERROR] Invalid variation \"%d\"\n",DataTitleIndex);
|
||||
return PID_INVALID_VARIATION;
|
||||
}
|
||||
return DataTitleIndex;
|
||||
@@ -189,7 +189,7 @@ u16 SetTitleVariation(u16 Category, rsf_settings *yaml_set)
|
||||
if(yaml_set->TitleInfo.ContentsIndex){
|
||||
u16 ContentsIndex = strtol(yaml_set->TitleInfo.ContentsIndex,NULL,10);
|
||||
if(ContentsIndex > 255){
|
||||
fprintf(stderr,"[ERROR] Invalid content index '%d'\n",ContentsIndex);
|
||||
fprintf(stderr,"[ERROR] Invalid content index \"%d\"\n",ContentsIndex);
|
||||
return PID_INVALID_VARIATION;
|
||||
}
|
||||
return ContentsIndex;
|
||||
@@ -201,7 +201,7 @@ u16 SetTitleVariation(u16 Category, rsf_settings *yaml_set)
|
||||
if(yaml_set->TitleInfo.Version){
|
||||
u16 Version = strtol(yaml_set->TitleInfo.Version,NULL,10);
|
||||
if(Version > 255){
|
||||
fprintf(stderr,"[ERROR] Invalid version '%d'\n",Version);
|
||||
fprintf(stderr,"[ERROR] Invalid Version \"%d\"\n",Version);
|
||||
return PID_INVALID_VARIATION;
|
||||
}
|
||||
return Version;
|
||||
|
||||
@@ -4,31 +4,31 @@
|
||||
|
||||
// Private Prototypes
|
||||
int SetupTMDBuffer(COMPONENT_STRUCT *tik);
|
||||
int SetupTMDHeader(TMD_Struct *hdr, TMD_CONTENT_INFO_RECORD *info_record, cia_settings *ciaset);
|
||||
int SignTMDHeader(TMD_Struct *hdr, TMD_SignatureStruct *sig, keys_struct *keys);
|
||||
int SetupTMDInfoRecord(TMD_CONTENT_INFO_RECORD *info_record, u8 *content_record, u16 ContentCount);
|
||||
int SetupTMDHeader(tmd_hdr *hdr, tmd_content_info_record *info_record, cia_settings *ciaset);
|
||||
int SignTMDHeader(tmd_hdr *hdr, tmd_signature *sig, keys_struct *keys);
|
||||
int SetupTMDInfoRecord(tmd_content_info_record *info_record, u8 *content_record, u16 ContentCount);
|
||||
int SetupTMDContentRecord(u8 *content_record, cia_settings *ciaset);
|
||||
|
||||
u32 PredictTMDSize(u16 ContentCount)
|
||||
{
|
||||
return sizeof(TMD_SignatureStruct) + sizeof(TMD_Struct) + sizeof(TMD_CONTENT_INFO_RECORD)*64 + sizeof(TMD_CONTENT_CHUNK_STRUCT)*ContentCount;
|
||||
return sizeof(tmd_signature) + sizeof(tmd_hdr) + sizeof(tmd_content_info_record)*64 + sizeof(tmd_content_chunk)*ContentCount;
|
||||
}
|
||||
|
||||
int BuildTMD(cia_settings *ciaset)
|
||||
{
|
||||
int result = 0;
|
||||
result = SetupTMDBuffer(&ciaset->CIA_Sections.TitleMetaData);
|
||||
result = SetupTMDBuffer(&ciaset->ciaSections.tmd);
|
||||
if(result) return result;
|
||||
|
||||
// Setting TMD Struct Ptrs
|
||||
TMD_SignatureStruct *sig = (TMD_SignatureStruct*)ciaset->CIA_Sections.TitleMetaData.buffer;
|
||||
TMD_Struct *hdr = (TMD_Struct*)(ciaset->CIA_Sections.TitleMetaData.buffer+sizeof(TMD_SignatureStruct));
|
||||
TMD_CONTENT_INFO_RECORD *info_record = (TMD_CONTENT_INFO_RECORD*)(ciaset->CIA_Sections.TitleMetaData.buffer+sizeof(TMD_SignatureStruct)+sizeof(TMD_Struct));
|
||||
u8 *content_record = (u8*)(ciaset->CIA_Sections.TitleMetaData.buffer+sizeof(TMD_SignatureStruct)+sizeof(TMD_Struct)+sizeof(TMD_CONTENT_INFO_RECORD)*64);
|
||||
tmd_signature *sig = (tmd_signature*)ciaset->ciaSections.tmd.buffer;
|
||||
tmd_hdr *hdr = (tmd_hdr*)(ciaset->ciaSections.tmd.buffer+sizeof(tmd_signature));
|
||||
tmd_content_info_record *info_record = (tmd_content_info_record*)(ciaset->ciaSections.tmd.buffer+sizeof(tmd_signature)+sizeof(tmd_hdr));
|
||||
u8 *content_record = (u8*)(ciaset->ciaSections.tmd.buffer+sizeof(tmd_signature)+sizeof(tmd_hdr)+sizeof(tmd_content_info_record)*64);
|
||||
|
||||
|
||||
SetupTMDContentRecord(content_record,ciaset);
|
||||
SetupTMDInfoRecord(info_record,content_record,ciaset->content.ContentCount);
|
||||
SetupTMDInfoRecord(info_record,content_record,ciaset->content.contentCount);
|
||||
result = SetupTMDHeader(hdr,info_record,ciaset);
|
||||
if(result) return result;
|
||||
result = SignTMDHeader(hdr,sig,ciaset->keys);
|
||||
@@ -37,56 +37,58 @@ int BuildTMD(cia_settings *ciaset)
|
||||
|
||||
int SetupTMDBuffer(COMPONENT_STRUCT *tmd)
|
||||
{
|
||||
tmd->buffer = malloc(tmd->size); // already set before
|
||||
tmd->buffer = malloc(tmd->size); // tmd->size is already set before
|
||||
if(!tmd->buffer) { fprintf(stderr,"[ERROR] MEM ERROR\n"); return MEM_ERROR; }
|
||||
memset(tmd->buffer,0,tmd->size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SetupTMDHeader(TMD_Struct *hdr, TMD_CONTENT_INFO_RECORD *info_record, cia_settings *ciaset)
|
||||
int SetupTMDHeader(tmd_hdr *hdr, tmd_content_info_record *info_record, cia_settings *ciaset)
|
||||
{
|
||||
memset(hdr,0,sizeof(TMD_Struct));
|
||||
memset(hdr,0,sizeof(tmd_hdr));
|
||||
|
||||
memcpy(hdr->Issuer,ciaset->tmd.TMDIssuer,0x40);
|
||||
hdr->TMDFormatVersion = ciaset->tmd.tmd_format_ver;
|
||||
hdr->ca_crl_version = ciaset->cert.ca_crl_version;
|
||||
hdr->signer_crl_version = ciaset->cert.signer_crl_version;
|
||||
memcpy(hdr->TitleID,ciaset->TitleID,8);
|
||||
memcpy(hdr->TitleType,ciaset->Title_type,4);
|
||||
memcpy(hdr->SaveDataSize,ciaset->tmd.SaveDataSize,4);
|
||||
memcpy(hdr->PrivSaveDataSize,ciaset->tmd.PrivSaveDataSize,4);
|
||||
hdr->TWL_Flag = ciaset->tmd.twl_flag;
|
||||
memcpy(hdr->TitleVersion,ciaset->tmd.TitleVersion,2);
|
||||
u16_to_u8(hdr->ContentCount,ciaset->content.ContentCount,BE);
|
||||
ctr_sha(info_record,sizeof(TMD_CONTENT_INFO_RECORD)*64,hdr->sha_256_hash,CTR_SHA_256);
|
||||
memcpy(hdr->issuer,ciaset->tmd.issuer,0x40);
|
||||
hdr->formatVersion = ciaset->tmd.formatVersion;
|
||||
hdr->caCrlVersion = ciaset->cert.caCrlVersion;
|
||||
hdr->signerCrlVersion = ciaset->cert.signerCrlVersion;
|
||||
//u8 dummy[8] = {0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x00};
|
||||
//memcpy(hdr->TitleID,dummy,8);
|
||||
memcpy(hdr->titleID,ciaset->common.titleId,8);
|
||||
memcpy(hdr->titleType,ciaset->tmd.titleType,4);
|
||||
memcpy(hdr->savedataSize,ciaset->tmd.savedataSize,4);
|
||||
memcpy(hdr->privSavedataSize,ciaset->tmd.privSavedataSize,4);
|
||||
hdr->twlFlag = ciaset->tmd.twlFlag;
|
||||
u16_to_u8(hdr->titleVersion,ciaset->tmd.version,BE);
|
||||
u16_to_u8(hdr->contentCount,ciaset->content.contentCount,BE);
|
||||
ctr_sha(info_record,sizeof(tmd_content_info_record)*64,hdr->infoRecordHash,CTR_SHA_256);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SignTMDHeader(TMD_Struct *hdr, TMD_SignatureStruct *sig, keys_struct *keys)
|
||||
int SignTMDHeader(tmd_hdr *hdr, tmd_signature *sig, keys_struct *keys)
|
||||
{
|
||||
memset(sig,0,sizeof(TMD_SignatureStruct));
|
||||
u32_to_u8(sig->sig_type,RSA_2048_SHA256,BE);
|
||||
return ctr_sig((u8*)hdr,sizeof(TMD_Struct),sig->data,keys->rsa.TMD_Pub,keys->rsa.TMD_Priv,RSA_2048_SHA256,CTR_RSA_SIGN);
|
||||
memset(sig,0,sizeof(tmd_signature));
|
||||
u32_to_u8(sig->sigType,RSA_2048_SHA256,BE);
|
||||
return ctr_sig((u8*)hdr,sizeof(tmd_hdr),sig->data,keys->rsa.cpPub,keys->rsa.cpPvt,RSA_2048_SHA256,CTR_RSA_SIGN);
|
||||
}
|
||||
|
||||
int SetupTMDInfoRecord(TMD_CONTENT_INFO_RECORD *info_record, u8 *content_record, u16 ContentCount)
|
||||
int SetupTMDInfoRecord(tmd_content_info_record *info_record, u8 *content_record, u16 ContentCount)
|
||||
{
|
||||
memset(info_record,0x0,sizeof(TMD_CONTENT_INFO_RECORD)*0x40);
|
||||
u16_to_u8(info_record->content_index_offset,0x0,BE);
|
||||
u16_to_u8(info_record->content_command_count,ContentCount,BE);
|
||||
ctr_sha(content_record,sizeof(TMD_CONTENT_CHUNK_STRUCT)*ContentCount,info_record->sha_256_hash,CTR_SHA_256);
|
||||
memset(info_record,0x0,sizeof(tmd_content_info_record)*0x40);
|
||||
u16_to_u8(info_record->contentIndexOffset,0x0,BE);
|
||||
u16_to_u8(info_record->contentCommandCount,ContentCount,BE);
|
||||
ctr_sha(content_record,sizeof(tmd_content_chunk)*ContentCount,info_record->contentChunkHash,CTR_SHA_256);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SetupTMDContentRecord(u8 *content_record, cia_settings *ciaset)
|
||||
{
|
||||
for(int i = 0; i < ciaset->content.ContentCount; i++){
|
||||
TMD_CONTENT_CHUNK_STRUCT *ptr = (TMD_CONTENT_CHUNK_STRUCT*)(content_record+sizeof(TMD_CONTENT_CHUNK_STRUCT)*i);
|
||||
u32_to_u8(ptr->content_id,ciaset->content.ContentId[i],BE);
|
||||
u16_to_u8(ptr->content_index,ciaset->content.ContentIndex[i],BE);
|
||||
u16_to_u8(ptr->content_type,ciaset->content.ContentType[i],BE);
|
||||
u64_to_u8(ptr->content_size,ciaset->content.ContentSize[i],BE);
|
||||
memcpy(ptr->sha_256_hash,ciaset->content.ContentHash[i],0x20);
|
||||
for(int i = 0; i < ciaset->content.contentCount; i++){
|
||||
tmd_content_chunk *ptr = (tmd_content_chunk*)(content_record+sizeof(tmd_content_chunk)*i);
|
||||
u32_to_u8(ptr->contentID,ciaset->content.contentId[i],BE);
|
||||
u16_to_u8(ptr->contentIndex,ciaset->content.contentIndex[i],BE);
|
||||
u16_to_u8(ptr->contentFlags,ciaset->content.contentFlags[i],BE);
|
||||
u64_to_u8(ptr->contentSize,ciaset->content.contentSize[i],BE);
|
||||
memcpy(ptr->contentHash,ciaset->content.contentHash[i],0x20);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -5,61 +5,61 @@ typedef enum
|
||||
{
|
||||
TYPE_CTR = 0x40,
|
||||
TYPE_DATA = 0x8
|
||||
} title_type;
|
||||
} tmd_title_type;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
Encrypted = 0x0001,
|
||||
Optional = 0x4000,
|
||||
Shared = 0x8000
|
||||
} content_types;
|
||||
content_Encrypted = 0x0001,
|
||||
content_Optional = 0x4000,
|
||||
content_Shared = 0x8000
|
||||
} tmd_content_types;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 content_id[4];
|
||||
u8 content_index[2];
|
||||
u8 content_type[2];
|
||||
u8 content_size[8];
|
||||
u8 sha_256_hash[0x20];
|
||||
} TMD_CONTENT_CHUNK_STRUCT;
|
||||
u8 contentID[4];
|
||||
u8 contentIndex[2];
|
||||
u8 contentFlags[2];
|
||||
u8 contentSize[8];
|
||||
u8 contentHash[0x20]; // SHA 256
|
||||
} tmd_content_chunk;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 content_index_offset[2];
|
||||
u8 content_command_count[2];
|
||||
u8 sha_256_hash[0x20];
|
||||
} TMD_CONTENT_INFO_RECORD;
|
||||
u8 contentIndexOffset[2];
|
||||
u8 contentCommandCount[2];
|
||||
u8 contentChunkHash[0x20]; // SHA 256
|
||||
} tmd_content_info_record;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 sig_type[4];
|
||||
u8 sigType[4];
|
||||
u8 data[0x100];
|
||||
u8 padding[0x3C];
|
||||
} TMD_SignatureStruct;
|
||||
} tmd_signature;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 Issuer[0x40];
|
||||
u8 TMDFormatVersion;
|
||||
u8 ca_crl_version;
|
||||
u8 signer_crl_version;
|
||||
u8 padding_1;
|
||||
u8 SystemVersion[8];
|
||||
u8 TitleID[8];
|
||||
u8 TitleType[4];
|
||||
u8 GroupID[2];
|
||||
u8 SaveDataSize[4];
|
||||
u8 PrivSaveDataSize[4]; // Zero for CXI Content0
|
||||
u8 Reserved_0[4];
|
||||
u8 TWL_Flag; // Zero for CXI Content0
|
||||
u8 Reserved_1[0x31];
|
||||
u8 AccessRights[4];
|
||||
u8 TitleVersion[2];
|
||||
u8 ContentCount[2];
|
||||
u8 BootContent[2];
|
||||
u8 Padding[2];
|
||||
u8 sha_256_hash[0x20];
|
||||
} TMD_Struct;
|
||||
u8 issuer[0x40];
|
||||
u8 formatVersion;
|
||||
u8 caCrlVersion;
|
||||
u8 signerCrlVersion;
|
||||
u8 padding0;
|
||||
u8 systemVersion[8];
|
||||
u8 titleID[8];
|
||||
u8 titleType[4];
|
||||
u8 groupID[2];
|
||||
u8 savedataSize[4];
|
||||
u8 privSavedataSize[4]; // Zero for CXI Content0
|
||||
u8 padding1[4];
|
||||
u8 twlFlag; // Zero for CXI Content0
|
||||
u8 padding2[0x31];
|
||||
u8 accessRights[4];
|
||||
u8 titleVersion[2];
|
||||
u8 contentCount[2];
|
||||
u8 bootContent[2];
|
||||
u8 padding3[2];
|
||||
u8 infoRecordHash[0x20]; // SHA-256
|
||||
} tmd_hdr;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,417 @@
|
||||
#ifndef _TPKI_H_
|
||||
#define _TPKI_H_
|
||||
|
||||
// AES KEYS
|
||||
static const unsigned char zeros_aesKey[16] =
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// RSA KEYS
|
||||
static const unsigned char tpki_rsa_privExp[256] =
|
||||
{
|
||||
0xE3, 0xC6, 0x76, 0x57, 0x2E, 0xCB, 0xA5, 0xE6,
|
||||
0x0C, 0x01, 0xBD, 0x5C, 0x32, 0x2D, 0x90, 0xE0,
|
||||
0xFF, 0x9A, 0x80, 0xE8, 0x66, 0x8D, 0x84, 0xDC,
|
||||
0xF7, 0x75, 0x5F, 0x3F, 0x98, 0x7C, 0x97, 0x40,
|
||||
0x20, 0x21, 0xB7, 0x24, 0xC0, 0x61, 0x2D, 0x83,
|
||||
0xB0, 0x91, 0x8E, 0xE3, 0xC2, 0xD0, 0x2C, 0xA1,
|
||||
0x2C, 0x99, 0x4F, 0x48, 0xF7, 0x4E, 0x13, 0xD3,
|
||||
0x01, 0x71, 0x25, 0x9B, 0x3C, 0x75, 0x7C, 0xC4,
|
||||
0xE5, 0x89, 0x7E, 0xDA, 0xF9, 0x99, 0x5C, 0x83,
|
||||
0xE4, 0xDD, 0x36, 0x62, 0x5B, 0x0E, 0x12, 0x91,
|
||||
0xD6, 0x39, 0x45, 0x69, 0x62, 0x20, 0xCA, 0xF4,
|
||||
0xBA, 0x6B, 0x28, 0x1A, 0x7C, 0xBF, 0xB9, 0x97,
|
||||
0x37, 0x46, 0xC2, 0x7A, 0xCF, 0x10, 0x68, 0xC2,
|
||||
0xC9, 0xF1, 0x48, 0xDA, 0x8A, 0x2F, 0x4C, 0xBC,
|
||||
0x3B, 0x1C, 0xB8, 0x8F, 0x04, 0x7F, 0xFD, 0x9D,
|
||||
0xE2, 0x0A, 0xD2, 0x09, 0x39, 0xC7, 0xD9, 0x81,
|
||||
0x59, 0x17, 0x73, 0xB2, 0xEC, 0xEB, 0x36, 0x67,
|
||||
0xA5, 0xA8, 0xD5, 0x71, 0xD9, 0x38, 0x6A, 0xD1,
|
||||
0x28, 0xB9, 0x46, 0x85, 0x3A, 0x81, 0x85, 0x4E,
|
||||
0x55, 0xA7, 0x74, 0x79, 0xBB, 0xC5, 0x97, 0xF7,
|
||||
0xEF, 0xE0, 0x81, 0x20, 0xE0, 0xEA, 0x45, 0x8F,
|
||||
0xED, 0x70, 0x8E, 0xD6, 0xFF, 0x49, 0xCF, 0x7F,
|
||||
0xF2, 0xFF, 0x22, 0x20, 0x3F, 0xE9, 0x92, 0x99,
|
||||
0xDE, 0x81, 0xD6, 0x27, 0xF7, 0xB8, 0x3A, 0x1D,
|
||||
0x4F, 0xA2, 0x50, 0xFB, 0xA5, 0xE7, 0x98, 0x08,
|
||||
0xB5, 0x2B, 0xA2, 0x94, 0xA9, 0x17, 0x1A, 0xA8,
|
||||
0x34, 0xF6, 0x5E, 0x24, 0x2D, 0x40, 0x2F, 0xCB,
|
||||
0x3C, 0xB0, 0xF8, 0x7E, 0x84, 0xB4, 0x87, 0x82,
|
||||
0x19, 0xAF, 0x87, 0xB6, 0xFA, 0xA9, 0x67, 0x27,
|
||||
0x07, 0x28, 0xBA, 0x2E, 0xA5, 0x8E, 0xDD, 0xE5,
|
||||
0xD4, 0xFD, 0x06, 0x09, 0xDF, 0xBD, 0x87, 0x95,
|
||||
0x95, 0x25, 0x05, 0x5E, 0xB2, 0x00, 0x18, 0x41
|
||||
};
|
||||
|
||||
static const unsigned char tpki_rsa_pubMod[256] =
|
||||
{
|
||||
0xE6, 0x64, 0x06, 0x6C, 0x49, 0x6B, 0xEC, 0xEE,
|
||||
0x59, 0xAE, 0x11, 0x92, 0xF1, 0x03, 0x43, 0x87,
|
||||
0x8E, 0xEB, 0x4D, 0x70, 0xA9, 0x71, 0xB4, 0x6D,
|
||||
0x25, 0x19, 0x02, 0x4A, 0x9E, 0x4D, 0xA3, 0x10,
|
||||
0xFD, 0xB2, 0x27, 0x56, 0xA3, 0xFB, 0xDD, 0xE5,
|
||||
0xE4, 0x4E, 0xE0, 0x62, 0x8F, 0xC3, 0x2E, 0xEE,
|
||||
0x8F, 0x9D, 0x4D, 0x6E, 0x00, 0xDB, 0x88, 0x49,
|
||||
0xA2, 0xFC, 0x30, 0xFE, 0x94, 0xF3, 0x06, 0x92,
|
||||
0x75, 0x61, 0x11, 0x1D, 0x24, 0x07, 0xE9, 0x12,
|
||||
0xB6, 0xB1, 0x57, 0xF5, 0xDC, 0x01, 0xF7, 0x54,
|
||||
0xBF, 0xC3, 0xAC, 0x8C, 0x73, 0x2C, 0x73, 0x17,
|
||||
0x8E, 0xBF, 0x2F, 0x68, 0x3C, 0x61, 0x75, 0x32,
|
||||
0x15, 0x39, 0x93, 0xDD, 0xBA, 0x12, 0x42, 0xD3,
|
||||
0x25, 0x85, 0xFA, 0xA6, 0x4B, 0xAF, 0x81, 0x4B,
|
||||
0xCA, 0xD2, 0x9C, 0xF1, 0x3D, 0x37, 0xAE, 0xB9,
|
||||
0xFD, 0x77, 0x59, 0x78, 0xB9, 0x32, 0x95, 0x19,
|
||||
0xD1, 0x47, 0xE1, 0xC6, 0xE1, 0x16, 0x13, 0x5D,
|
||||
0xCC, 0x99, 0x31, 0x63, 0xAD, 0xBB, 0xA5, 0x4F,
|
||||
0xE4, 0x41, 0x67, 0xFD, 0x7F, 0x1E, 0xA8, 0x9A,
|
||||
0x35, 0x65, 0xEB, 0xC4, 0x4D, 0xD4, 0xC4, 0x29,
|
||||
0x0F, 0x40, 0x95, 0xFD, 0x8A, 0x30, 0x67, 0x79,
|
||||
0xFB, 0xD4, 0x76, 0x6F, 0xD1, 0xDE, 0x8C, 0x72,
|
||||
0x32, 0x05, 0x97, 0x5A, 0x26, 0x0D, 0x37, 0xCA,
|
||||
0x12, 0x2C, 0xDC, 0x14, 0x3F, 0xD3, 0x59, 0x00,
|
||||
0x66, 0xD2, 0x8E, 0xF5, 0x6E, 0x22, 0x08, 0x63,
|
||||
0x59, 0xB5, 0x3F, 0xBB, 0x3A, 0x4D, 0xD4, 0xD1,
|
||||
0xC1, 0x21, 0xA7, 0x4D, 0x02, 0x96, 0x08, 0xF5,
|
||||
0x2B, 0x11, 0xE5, 0x85, 0xD2, 0x6E, 0x91, 0xD6,
|
||||
0x8F, 0x77, 0x72, 0xEF, 0x37, 0xE3, 0x79, 0x19,
|
||||
0xA9, 0xEE, 0x58, 0x5D, 0x52, 0x9B, 0x2D, 0x47,
|
||||
0x7D, 0x27, 0xB8, 0xC3, 0x76, 0xCA, 0xDA, 0xC2,
|
||||
0xF4, 0xFC, 0xF4, 0x53, 0x7C, 0xD8, 0x43, 0x87
|
||||
};
|
||||
|
||||
//Certificates
|
||||
static const unsigned char ca3_tpki_cert[0x400] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x03, 0x70, 0x41, 0x38, 0xEF,
|
||||
0xBB, 0xBD, 0xA1, 0x6A, 0x98, 0x7D, 0xD9, 0x01,
|
||||
0x32, 0x6D, 0x1C, 0x94, 0x59, 0x48, 0x4C, 0x88,
|
||||
0xA2, 0x86, 0x1B, 0x91, 0xA3, 0x12, 0x58, 0x7A,
|
||||
0xE7, 0x0E, 0xF6, 0x23, 0x7E, 0xC5, 0x0E, 0x10,
|
||||
0x32, 0xDC, 0x39, 0xDD, 0xE8, 0x9A, 0x96, 0xA8,
|
||||
0xE8, 0x59, 0xD7, 0x6A, 0x98, 0xA6, 0xE7, 0xE3,
|
||||
0x6A, 0x0C, 0xFE, 0x35, 0x2C, 0xA8, 0x93, 0x05,
|
||||
0x82, 0x34, 0xFF, 0x83, 0x3F, 0xCB, 0x3B, 0x03,
|
||||
0x81, 0x1E, 0x9F, 0x0D, 0xC0, 0xD9, 0xA5, 0x2F,
|
||||
0x80, 0x45, 0xB4, 0xB2, 0xF9, 0x41, 0x1B, 0x67,
|
||||
0xA5, 0x1C, 0x44, 0xB5, 0xEF, 0x8C, 0xE7, 0x7B,
|
||||
0xD6, 0xD5, 0x6B, 0xA7, 0x57, 0x34, 0xA1, 0x85,
|
||||
0x6D, 0xE6, 0xD4, 0xBE, 0xD6, 0xD3, 0xA2, 0x42,
|
||||
0xC7, 0xC8, 0x79, 0x1B, 0x34, 0x22, 0x37, 0x5E,
|
||||
0x5C, 0x77, 0x9A, 0xBF, 0x07, 0x2F, 0x76, 0x95,
|
||||
0xEF, 0xA0, 0xF7, 0x5B, 0xCB, 0x83, 0x78, 0x9F,
|
||||
0xC3, 0x0E, 0x3F, 0xE4, 0xCC, 0x83, 0x92, 0x20,
|
||||
0x78, 0x40, 0x63, 0x89, 0x49, 0xC7, 0xF6, 0x88,
|
||||
0x56, 0x5F, 0x64, 0x9B, 0x74, 0xD6, 0x3D, 0x8D,
|
||||
0x58, 0xFF, 0xAD, 0xDA, 0x57, 0x1E, 0x95, 0x54,
|
||||
0x42, 0x6B, 0x13, 0x18, 0xFC, 0x46, 0x89, 0x83,
|
||||
0xD4, 0xC8, 0xA5, 0x62, 0x8B, 0x06, 0xB6, 0xFC,
|
||||
0x5D, 0x50, 0x7C, 0x13, 0xE7, 0xA1, 0x8A, 0xC1,
|
||||
0x51, 0x1E, 0xB6, 0xD6, 0x2E, 0xA5, 0x44, 0x8F,
|
||||
0x83, 0x50, 0x14, 0x47, 0xA9, 0xAF, 0xB3, 0xEC,
|
||||
0xC2, 0x90, 0x3C, 0x9D, 0xD5, 0x2F, 0x92, 0x2A,
|
||||
0xC9, 0xAC, 0xDB, 0xEF, 0x58, 0xC6, 0x02, 0x18,
|
||||
0x48, 0xD9, 0x6E, 0x20, 0x87, 0x32, 0xD3, 0xD1,
|
||||
0xD9, 0xD9, 0xEA, 0x44, 0x0D, 0x91, 0x62, 0x1C,
|
||||
0x7A, 0x99, 0xDB, 0x88, 0x43, 0xC5, 0x9C, 0x1F,
|
||||
0x2E, 0x2C, 0x7D, 0x9B, 0x57, 0x7D, 0x51, 0x2C,
|
||||
0x16, 0x6D, 0x6F, 0x7E, 0x1A, 0xAD, 0x4A, 0x77,
|
||||
0x4A, 0x37, 0x44, 0x7E, 0x78, 0xFE, 0x20, 0x21,
|
||||
0xE1, 0x4A, 0x95, 0xD1, 0x12, 0xA0, 0x68, 0xAD,
|
||||
0xA0, 0x19, 0xF4, 0x63, 0xC7, 0xA5, 0x56, 0x85,
|
||||
0xAA, 0xBB, 0x68, 0x88, 0xB9, 0x24, 0x64, 0x83,
|
||||
0xD1, 0x8B, 0x9C, 0x80, 0x6F, 0x47, 0x49, 0x18,
|
||||
0x33, 0x17, 0x82, 0x34, 0x4A, 0x4B, 0x85, 0x31,
|
||||
0x33, 0x4B, 0x26, 0x30, 0x32, 0x63, 0xD9, 0xD2,
|
||||
0xEB, 0x4F, 0x4B, 0xB9, 0x96, 0x02, 0xB3, 0x52,
|
||||
0xF6, 0xAE, 0x40, 0x46, 0xC6, 0x9A, 0x5E, 0x7E,
|
||||
0x8E, 0x4A, 0x18, 0xEF, 0x9B, 0xC0, 0xA2, 0xDE,
|
||||
0xD6, 0x13, 0x10, 0x41, 0x70, 0x12, 0xFD, 0x82,
|
||||
0x4C, 0xC1, 0x16, 0xCF, 0xB7, 0xC4, 0xC1, 0xF7,
|
||||
0xEC, 0x71, 0x77, 0xA1, 0x74, 0x46, 0xCB, 0xDE,
|
||||
0x96, 0xF3, 0xED, 0xD8, 0x8F, 0xCD, 0x05, 0x2F,
|
||||
0x0B, 0x88, 0x8A, 0x45, 0xFD, 0xAF, 0x2B, 0x63,
|
||||
0x13, 0x54, 0xF4, 0x0D, 0x16, 0xE5, 0xFA, 0x9C,
|
||||
0x2C, 0x4E, 0xDA, 0x98, 0xE7, 0x98, 0xD1, 0x5E,
|
||||
0x60, 0x46, 0xDC, 0x53, 0x63, 0xF3, 0x09, 0x6B,
|
||||
0x2C, 0x60, 0x7A, 0x9D, 0x8D, 0xD5, 0x5B, 0x15,
|
||||
0x02, 0xA6, 0xAC, 0x7D, 0x3C, 0xC8, 0xD8, 0xC5,
|
||||
0x75, 0x99, 0x8E, 0x7D, 0x79, 0x69, 0x10, 0xC8,
|
||||
0x04, 0xC4, 0x95, 0x23, 0x50, 0x57, 0xE9, 0x1E,
|
||||
0xCD, 0x26, 0x37, 0xC9, 0xC1, 0x84, 0x51, 0x51,
|
||||
0xAC, 0x6B, 0x9A, 0x04, 0x90, 0xAE, 0x3E, 0xC6,
|
||||
0xF4, 0x77, 0x40, 0xA0, 0xDB, 0x0B, 0xA3, 0x6D,
|
||||
0x07, 0x59, 0x56, 0xCE, 0xE7, 0x35, 0x4E, 0xA3,
|
||||
0xE9, 0xA4, 0xF2, 0x72, 0x0B, 0x26, 0x55, 0x0C,
|
||||
0x7D, 0x39, 0x43, 0x24, 0xBC, 0x0C, 0xB7, 0xE9,
|
||||
0x31, 0x7D, 0x8A, 0x86, 0x61, 0xF4, 0x21, 0x91,
|
||||
0xFF, 0x10, 0xB0, 0x82, 0x56, 0xCE, 0x3F, 0xD2,
|
||||
0x5B, 0x74, 0x5E, 0x51, 0x94, 0x90, 0x6B, 0x4D,
|
||||
0x61, 0xCB, 0x4C, 0x2E, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x52, 0x6F, 0x6F, 0x74, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x43, 0x41, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x7B, 0xE8, 0xEF, 0x6C,
|
||||
0xB2, 0x79, 0xC9, 0xE2, 0xEE, 0xE1, 0x21, 0xC6,
|
||||
0xEA, 0xF4, 0x4F, 0xF6, 0x39, 0xF8, 0x8F, 0x07,
|
||||
0x8B, 0x4B, 0x77, 0xED, 0x9F, 0x95, 0x60, 0xB0,
|
||||
0x35, 0x82, 0x81, 0xB5, 0x0E, 0x55, 0xAB, 0x72,
|
||||
0x11, 0x15, 0xA1, 0x77, 0x70, 0x3C, 0x7A, 0x30,
|
||||
0xFE, 0x3A, 0xE9, 0xEF, 0x1C, 0x60, 0xBC, 0x1D,
|
||||
0x97, 0x46, 0x76, 0xB2, 0x3A, 0x68, 0xCC, 0x04,
|
||||
0xB1, 0x98, 0x52, 0x5B, 0xC9, 0x68, 0xF1, 0x1D,
|
||||
0xE2, 0xDB, 0x50, 0xE4, 0xD9, 0xE7, 0xF0, 0x71,
|
||||
0xE5, 0x62, 0xDA, 0xE2, 0x09, 0x22, 0x33, 0xE9,
|
||||
0xD3, 0x63, 0xF6, 0x1D, 0xD7, 0xC1, 0x9F, 0xF3,
|
||||
0xA4, 0xA9, 0x1E, 0x8F, 0x65, 0x53, 0xD4, 0x71,
|
||||
0xDD, 0x7B, 0x84, 0xB9, 0xF1, 0xB8, 0xCE, 0x73,
|
||||
0x35, 0xF0, 0xF5, 0x54, 0x05, 0x63, 0xA1, 0xEA,
|
||||
0xB8, 0x39, 0x63, 0xE0, 0x9B, 0xE9, 0x01, 0x01,
|
||||
0x1F, 0x99, 0x54, 0x63, 0x61, 0x28, 0x70, 0x20,
|
||||
0xE9, 0xCC, 0x0D, 0xAB, 0x48, 0x7F, 0x14, 0x0D,
|
||||
0x66, 0x26, 0xA1, 0x83, 0x6D, 0x27, 0x11, 0x1F,
|
||||
0x20, 0x68, 0xDE, 0x47, 0x72, 0x14, 0x91, 0x51,
|
||||
0xCF, 0x69, 0xC6, 0x1B, 0xA6, 0x0E, 0xF9, 0xD9,
|
||||
0x49, 0xA0, 0xF7, 0x1F, 0x54, 0x99, 0xF2, 0xD3,
|
||||
0x9A, 0xD2, 0x8C, 0x70, 0x05, 0x34, 0x82, 0x93,
|
||||
0xC4, 0x31, 0xFF, 0xBD, 0x33, 0xF6, 0xBC, 0xA6,
|
||||
0x0D, 0xC7, 0x19, 0x5E, 0xA2, 0xBC, 0xC5, 0x6D,
|
||||
0x20, 0x0B, 0xAF, 0x6D, 0x06, 0xD0, 0x9C, 0x41,
|
||||
0xDB, 0x8D, 0xE9, 0xC7, 0x20, 0x15, 0x4C, 0xA4,
|
||||
0x83, 0x2B, 0x69, 0xC0, 0x8C, 0x69, 0xCD, 0x3B,
|
||||
0x07, 0x3A, 0x00, 0x63, 0x60, 0x2F, 0x46, 0x2D,
|
||||
0x33, 0x80, 0x61, 0xA5, 0xEA, 0x6C, 0x91, 0x5C,
|
||||
0xD5, 0x62, 0x35, 0x79, 0xC3, 0xEB, 0x64, 0xCE,
|
||||
0x44, 0xEF, 0x58, 0x6D, 0x14, 0xBA, 0xAA, 0x88,
|
||||
0x34, 0x01, 0x9B, 0x3E, 0xEB, 0xEE, 0xD3, 0x79,
|
||||
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char xsC_tpki_cert[0x300] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x04, 0x91, 0x9E, 0xBE, 0x46,
|
||||
0x4A, 0xD0, 0xF5, 0x52, 0xCD, 0x1B, 0x72, 0xE7,
|
||||
0x88, 0x49, 0x10, 0xCF, 0x55, 0xA9, 0xF0, 0x2E,
|
||||
0x50, 0x78, 0x96, 0x41, 0xD8, 0x96, 0x68, 0x3D,
|
||||
0xC0, 0x05, 0xBD, 0x0A, 0xEA, 0x87, 0x07, 0x9D,
|
||||
0x8A, 0xC2, 0x84, 0xC6, 0x75, 0x06, 0x5F, 0x74,
|
||||
0xC8, 0xBF, 0x37, 0xC8, 0x80, 0x44, 0x40, 0x95,
|
||||
0x02, 0xA0, 0x22, 0x98, 0x0B, 0xB8, 0xAD, 0x48,
|
||||
0x38, 0x3F, 0x6D, 0x28, 0xA7, 0x9D, 0xE3, 0x96,
|
||||
0x26, 0xCC, 0xB2, 0xB2, 0x2A, 0x0F, 0x19, 0xE4,
|
||||
0x10, 0x32, 0xF0, 0x94, 0xB3, 0x9F, 0xF0, 0x13,
|
||||
0x31, 0x46, 0xDE, 0xC8, 0xF6, 0xC1, 0xA9, 0xD5,
|
||||
0x5C, 0xD2, 0x8D, 0x9E, 0x1C, 0x47, 0xB3, 0xD1,
|
||||
0x1F, 0x4F, 0x54, 0x26, 0xC2, 0xC7, 0x80, 0x13,
|
||||
0x5A, 0x27, 0x75, 0xD3, 0xCA, 0x67, 0x9B, 0xC7,
|
||||
0xE8, 0x34, 0xF0, 0xE0, 0xFB, 0x58, 0xE6, 0x88,
|
||||
0x60, 0xA7, 0x13, 0x30, 0xFC, 0x95, 0x79, 0x17,
|
||||
0x93, 0xC8, 0xFB, 0xA9, 0x35, 0xA7, 0xA6, 0x90,
|
||||
0x8F, 0x22, 0x9D, 0xEE, 0x2A, 0x0C, 0xA6, 0xB9,
|
||||
0xB2, 0x3B, 0x12, 0xD4, 0x95, 0xA6, 0xFE, 0x19,
|
||||
0xD0, 0xD7, 0x26, 0x48, 0x21, 0x68, 0x78, 0x60,
|
||||
0x5A, 0x66, 0x53, 0x8D, 0xBF, 0x37, 0x68, 0x99,
|
||||
0x90, 0x5D, 0x34, 0x45, 0xFC, 0x5C, 0x72, 0x7A,
|
||||
0x0E, 0x13, 0xE0, 0xE2, 0xC8, 0x97, 0x1C, 0x9C,
|
||||
0xFA, 0x6C, 0x60, 0x67, 0x88, 0x75, 0x73, 0x2A,
|
||||
0x4E, 0x75, 0x52, 0x3D, 0x2F, 0x56, 0x2F, 0x12,
|
||||
0xAA, 0xBD, 0x15, 0x73, 0xBF, 0x06, 0xC9, 0x40,
|
||||
0x54, 0xAE, 0xFA, 0x81, 0xA7, 0x14, 0x17, 0xAF,
|
||||
0x9A, 0x4A, 0x06, 0x6D, 0x0F, 0xFC, 0x5A, 0xD6,
|
||||
0x4B, 0xAB, 0x28, 0xB1, 0xFF, 0x60, 0x66, 0x1F,
|
||||
0x44, 0x37, 0xD4, 0x9E, 0x1E, 0x0D, 0x94, 0x12,
|
||||
0xEB, 0x4B, 0xCA, 0xCF, 0x4C, 0xFD, 0x6A, 0x34,
|
||||
0x08, 0x84, 0x79, 0x82, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x43, 0x41, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x58, 0x53, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x63, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x13, 0x7A, 0x08, 0x94,
|
||||
0xAD, 0x50, 0x5B, 0xB6, 0xC6, 0x7E, 0x2E, 0x5B,
|
||||
0xDD, 0x6A, 0x3B, 0xEC, 0x43, 0xD9, 0x10, 0xC7,
|
||||
0x72, 0xE9, 0xCC, 0x29, 0x0D, 0xA5, 0x85, 0x88,
|
||||
0xB7, 0x7D, 0xCC, 0x11, 0x68, 0x0B, 0xB3, 0xE2,
|
||||
0x9F, 0x4E, 0xAB, 0xBB, 0x26, 0xE9, 0x8C, 0x26,
|
||||
0x01, 0x98, 0x5C, 0x04, 0x1B, 0xB1, 0x43, 0x78,
|
||||
0xE6, 0x89, 0x18, 0x1A, 0xAD, 0x77, 0x05, 0x68,
|
||||
0xE9, 0x28, 0xA2, 0xB9, 0x81, 0x67, 0xEE, 0x3E,
|
||||
0x10, 0xD0, 0x72, 0xBE, 0xEF, 0x1F, 0xA2, 0x2F,
|
||||
0xA2, 0xAA, 0x3E, 0x13, 0xF1, 0x1E, 0x18, 0x36,
|
||||
0xA9, 0x2A, 0x42, 0x81, 0xEF, 0x70, 0xAA, 0xF4,
|
||||
0xE4, 0x62, 0x99, 0x82, 0x21, 0xC6, 0xFB, 0xB9,
|
||||
0xBD, 0xD0, 0x17, 0xE6, 0xAC, 0x59, 0x04, 0x94,
|
||||
0xE9, 0xCE, 0xA9, 0x85, 0x9C, 0xEB, 0x2D, 0x2A,
|
||||
0x4C, 0x17, 0x66, 0xF2, 0xC3, 0x39, 0x12, 0xC5,
|
||||
0x8F, 0x14, 0xA8, 0x03, 0xE3, 0x6F, 0xCC, 0xDC,
|
||||
0xCC, 0xDC, 0x13, 0xFD, 0x7A, 0xE7, 0x7C, 0x7A,
|
||||
0x78, 0xD9, 0x97, 0xE6, 0xAC, 0xC3, 0x55, 0x57,
|
||||
0xE0, 0xD3, 0xE9, 0xEB, 0x64, 0xB4, 0x3C, 0x92,
|
||||
0xF4, 0xC5, 0x0D, 0x67, 0xA6, 0x02, 0xDE, 0xB3,
|
||||
0x91, 0xB0, 0x66, 0x61, 0xCD, 0x32, 0x88, 0x0B,
|
||||
0xD6, 0x49, 0x12, 0xAF, 0x1C, 0xBC, 0xB7, 0x16,
|
||||
0x2A, 0x06, 0xF0, 0x25, 0x65, 0xD3, 0xB0, 0xEC,
|
||||
0xE4, 0xFC, 0xEC, 0xDD, 0xAE, 0x8A, 0x49, 0x34,
|
||||
0xDB, 0x8E, 0xE6, 0x7F, 0x30, 0x17, 0x98, 0x62,
|
||||
0x21, 0x15, 0x5D, 0x13, 0x1C, 0x6C, 0x3F, 0x09,
|
||||
0xAB, 0x19, 0x45, 0xC2, 0x06, 0xAC, 0x70, 0xC9,
|
||||
0x42, 0xB3, 0x6F, 0x49, 0xA1, 0x18, 0x3B, 0xCD,
|
||||
0x78, 0xB6, 0xE4, 0xB4, 0x7C, 0x6C, 0x5C, 0xAC,
|
||||
0x0F, 0x8D, 0x62, 0xF8, 0x97, 0xC6, 0x95, 0x3D,
|
||||
0xD1, 0x2F, 0x28, 0xB7, 0x0C, 0x5B, 0x7D, 0xF7,
|
||||
0x51, 0x81, 0x9A, 0x98, 0x34, 0x65, 0x26, 0x25,
|
||||
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char cpB_tpki_cert[0x300] =
|
||||
{
|
||||
0x00, 0x01, 0x00, 0x04, 0x2E, 0xA6, 0x6C, 0x66,
|
||||
0xCF, 0xF3, 0x35, 0x79, 0x7D, 0x04, 0x97, 0xB7,
|
||||
0x7A, 0x19, 0x7F, 0x9F, 0xE5, 0x1A, 0xB5, 0xA4,
|
||||
0x13, 0x75, 0xDC, 0x73, 0xFD, 0x9E, 0x0B, 0x10,
|
||||
0x66, 0x9B, 0x1B, 0x9A, 0x5B, 0x7E, 0x8A, 0xB2,
|
||||
0x8F, 0x01, 0xB6, 0x7B, 0x62, 0x54, 0xC1, 0x4A,
|
||||
0xA1, 0x33, 0x14, 0x18, 0xF2, 0x5B, 0xA5, 0x49,
|
||||
0x00, 0x4C, 0x37, 0x8D, 0xD7, 0x2F, 0x0C, 0xE6,
|
||||
0x3B, 0x1F, 0x70, 0x91, 0xAA, 0xFE, 0x38, 0x09,
|
||||
0xB7, 0xAC, 0x6C, 0x28, 0x76, 0xA6, 0x1D, 0x60,
|
||||
0x51, 0x6C, 0x43, 0xA6, 0x37, 0x29, 0x16, 0x2D,
|
||||
0x28, 0x0B, 0xE2, 0x1B, 0xE8, 0xE2, 0xFE, 0x05,
|
||||
0x7D, 0x8E, 0xB6, 0xE2, 0x04, 0x24, 0x22, 0x45,
|
||||
0x73, 0x1A, 0xB6, 0xFE, 0xE3, 0x0E, 0x53, 0x35,
|
||||
0x37, 0x3E, 0xEB, 0xA9, 0x70, 0xD5, 0x31, 0xBB,
|
||||
0xA2, 0xCB, 0x22, 0x2D, 0x96, 0x84, 0x38, 0x7D,
|
||||
0x5F, 0x2A, 0x1B, 0xF7, 0x52, 0x00, 0xCE, 0x06,
|
||||
0x56, 0xE3, 0x90, 0xCE, 0x19, 0x13, 0x5B, 0x59,
|
||||
0xE1, 0x4F, 0x0F, 0xA5, 0xC1, 0x28, 0x1A, 0x73,
|
||||
0x86, 0xCC, 0xD1, 0xC8, 0xEC, 0x3F, 0xAD, 0x70,
|
||||
0xFB, 0xCE, 0x74, 0xDE, 0xEE, 0x1F, 0xD0, 0x5F,
|
||||
0x46, 0x33, 0x0B, 0x51, 0xF9, 0xB7, 0x9E, 0x1D,
|
||||
0xDB, 0xF4, 0xE3, 0x3F, 0x14, 0x88, 0x9D, 0x05,
|
||||
0x28, 0x29, 0x24, 0xC5, 0xF5, 0xDC, 0x27, 0x66,
|
||||
0xEF, 0x06, 0x27, 0xD7, 0xEE, 0xDC, 0x73, 0x6E,
|
||||
0x67, 0xC2, 0xE5, 0xB9, 0x38, 0x34, 0x66, 0x80,
|
||||
0x72, 0x21, 0x6D, 0x1C, 0x78, 0xB8, 0x23, 0xA0,
|
||||
0x72, 0xD3, 0x4F, 0xF3, 0xEC, 0xF9, 0xBD, 0x11,
|
||||
0xA2, 0x9A, 0xF1, 0x6C, 0x33, 0xBD, 0x09, 0xAF,
|
||||
0xB2, 0xD7, 0x4D, 0x53, 0x4E, 0x02, 0x7C, 0x19,
|
||||
0x24, 0x0D, 0x59, 0x5A, 0x68, 0xEB, 0xB3, 0x05,
|
||||
0xAC, 0xC4, 0x4A, 0xB3, 0x8A, 0xB8, 0x20, 0xC6,
|
||||
0xD4, 0x26, 0x56, 0x0C, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x43, 0x41, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x43, 0x50, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x62, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x13, 0x7A, 0x08, 0x0B,
|
||||
0xA6, 0x89, 0xC5, 0x90, 0xFD, 0x0B, 0x2F, 0x0D,
|
||||
0x4F, 0x56, 0xB6, 0x32, 0xFB, 0x93, 0x4E, 0xD0,
|
||||
0x73, 0x95, 0x17, 0xB3, 0x3A, 0x79, 0xDE, 0x04,
|
||||
0x0E, 0xE9, 0x2D, 0xC3, 0x1D, 0x37, 0xC7, 0xF7,
|
||||
0x3B, 0xF0, 0x4B, 0xD3, 0xE4, 0x4E, 0x20, 0xAB,
|
||||
0x5A, 0x6F, 0xEA, 0xF5, 0x98, 0x4C, 0xC1, 0xF6,
|
||||
0x06, 0x2E, 0x9A, 0x9F, 0xE5, 0x6C, 0x32, 0x85,
|
||||
0xDC, 0x6F, 0x25, 0xDD, 0xD5, 0xD0, 0xBF, 0x9F,
|
||||
0xE2, 0xEF, 0xE8, 0x35, 0xDF, 0x26, 0x34, 0xED,
|
||||
0x93, 0x7F, 0xAB, 0x02, 0x14, 0xD1, 0x04, 0x80,
|
||||
0x9C, 0xF7, 0x4B, 0x86, 0x0E, 0x6B, 0x04, 0x83,
|
||||
0xF4, 0xCD, 0x2D, 0xAB, 0x2A, 0x96, 0x02, 0xBC,
|
||||
0x56, 0xF0, 0xD6, 0xBD, 0x94, 0x6A, 0xED, 0x6E,
|
||||
0x0B, 0xE4, 0xF0, 0x8F, 0x26, 0x68, 0x6B, 0xD0,
|
||||
0x9E, 0xF7, 0xDB, 0x32, 0x5F, 0x82, 0xB1, 0x8F,
|
||||
0x6A, 0xF2, 0xED, 0x52, 0x5B, 0xFD, 0x82, 0x8B,
|
||||
0x65, 0x3F, 0xEE, 0x6E, 0xCE, 0x40, 0x0D, 0x5A,
|
||||
0x48, 0xFF, 0xE2, 0x2D, 0x53, 0x8B, 0xB5, 0x33,
|
||||
0x5B, 0x41, 0x53, 0x34, 0x2D, 0x43, 0x35, 0xAC,
|
||||
0xF5, 0x90, 0xD0, 0xD3, 0x0A, 0xE2, 0x04, 0x3C,
|
||||
0x7F, 0x5A, 0xD2, 0x14, 0xFC, 0x9C, 0x0F, 0xE6,
|
||||
0xFA, 0x40, 0xA5, 0xC8, 0x65, 0x06, 0xCA, 0x63,
|
||||
0x69, 0xBC, 0xEE, 0x44, 0xA3, 0x2D, 0x9E, 0x69,
|
||||
0x5C, 0xF0, 0x0B, 0x4F, 0xD7, 0x9A, 0xDB, 0x56,
|
||||
0x8D, 0x14, 0x9C, 0x20, 0x28, 0xA1, 0x4C, 0x9D,
|
||||
0x71, 0xB8, 0x50, 0xCA, 0x36, 0x5B, 0x37, 0xF7,
|
||||
0x0B, 0x65, 0x77, 0x91, 0xFC, 0x5D, 0x72, 0x8C,
|
||||
0x4E, 0x18, 0xFD, 0x22, 0x55, 0x7C, 0x40, 0x62,
|
||||
0xD7, 0x47, 0x71, 0x53, 0x3C, 0x70, 0x17, 0x9D,
|
||||
0x3D, 0xAE, 0x8F, 0x92, 0xB1, 0x17, 0xE4, 0x5C,
|
||||
0xB3, 0x32, 0xF3, 0xB3, 0xC2, 0xA2, 0x2E, 0x70,
|
||||
0x5C, 0xFE, 0xC6, 0x6F, 0x6D, 0xA3, 0x77, 0x2B,
|
||||
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
#endif
|
||||
+404
-277
@@ -29,20 +29,23 @@ int ParseArgs(int argc, char *argv[], user_settings *usr_settings)
|
||||
}
|
||||
|
||||
// Allocating Memory for Content Path Ptrs
|
||||
usr_settings->ContentPath = malloc(CIA_MAX_CONTENT*sizeof(char*));
|
||||
if(usr_settings->ContentPath == NULL){
|
||||
fprintf(stderr,"[SETTING ERROR] MEM ERROR\n");
|
||||
usr_settings->common.contentPath = malloc(CIA_MAX_CONTENT*sizeof(char*));
|
||||
if(usr_settings->common.contentPath == NULL){
|
||||
fprintf(stderr,"[SETTING ERROR] Not Enough Memory\n");
|
||||
return USR_MEM_ERROR;
|
||||
}
|
||||
memset(usr_settings->ContentPath,0,CIA_MAX_CONTENT*sizeof(char*));
|
||||
memset(usr_settings->common.contentPath,0,CIA_MAX_CONTENT*sizeof(char*));
|
||||
|
||||
// Initialise Keys
|
||||
InitKeys(&usr_settings->keys);
|
||||
InitKeys(&usr_settings->common.keys);
|
||||
|
||||
// Setting Defaults
|
||||
SetDefaults(usr_settings);
|
||||
|
||||
// Parsing Arguments
|
||||
#ifdef DEBUG
|
||||
fprintf(stdout,"[DEBUG] Parsing Args\n");
|
||||
#endif
|
||||
int set_result;
|
||||
int i = 1;
|
||||
while(i < argc){
|
||||
@@ -55,26 +58,36 @@ int ParseArgs(int argc, char *argv[], user_settings *usr_settings)
|
||||
}
|
||||
|
||||
// Checking arguments
|
||||
#ifdef DEBUG
|
||||
fprintf(stdout,"[DEBUG] Checking Args\n");
|
||||
#endif
|
||||
set_result = CheckArgumentCombination(usr_settings);
|
||||
if(set_result) return set_result;
|
||||
|
||||
// Setting Keys
|
||||
SetKeys(&usr_settings->keys);
|
||||
#ifdef DEBUG
|
||||
fprintf(stdout,"[DEBUG] Setting Keys\n");
|
||||
#endif
|
||||
set_result = SetKeys(&usr_settings->common.keys);
|
||||
if(set_result) return set_result;
|
||||
|
||||
if(!usr_settings->outfile){
|
||||
#ifdef DEBUG
|
||||
fprintf(stdout,"[DEBUG] Generating output path name if required\n");
|
||||
#endif
|
||||
|
||||
if(!usr_settings->common.outFileName){
|
||||
char *source_path = NULL;
|
||||
if(usr_settings->IsBuildingNCCH0) source_path = usr_settings->rsf_path;
|
||||
else if(usr_settings->ConvertCci) source_path = usr_settings->CciPath;
|
||||
else if(usr_settings->Content0IsSrl) source_path = usr_settings->SrlPath;
|
||||
else source_path = usr_settings->ContentPath[0];
|
||||
if(usr_settings->ncch.buildNcch0) source_path = usr_settings->common.rsfPath;
|
||||
else if(usr_settings->common.workingFileType == infile_ncsd || usr_settings->common.workingFileType == infile_srl) source_path = usr_settings->common.workingFilePath;
|
||||
else source_path = usr_settings->common.contentPath[0];
|
||||
u16 outfile_len = strlen(source_path) + 3;
|
||||
usr_settings->outfile = malloc(outfile_len);
|
||||
if(!usr_settings->outfile){
|
||||
fprintf(stderr,"[SETTING ERROR] MEM ERROR\n");
|
||||
usr_settings->common.outFileName = malloc(outfile_len);
|
||||
if(!usr_settings->common.outFileName){
|
||||
fprintf(stderr,"[SETTING ERROR] Not Enough Memory\n");
|
||||
return USR_MEM_ERROR;
|
||||
}
|
||||
usr_settings->outfile_mallocd = true;
|
||||
append_filextention(usr_settings->outfile,outfile_len,source_path,(char*)&output_extention[usr_settings->out_format-1]);
|
||||
usr_settings->common.outFileName_mallocd = true;
|
||||
append_filextention(usr_settings->common.outFileName,outfile_len,source_path,(char*)&output_extention[usr_settings->common.outFormat-1]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -82,36 +95,34 @@ int ParseArgs(int argc, char *argv[], user_settings *usr_settings)
|
||||
void SetDefaults(user_settings *set)
|
||||
{
|
||||
// Target Info
|
||||
set->keys.keyset = keyset_RETAIL;
|
||||
set->common.keys.keyset = pki_TEST;
|
||||
|
||||
// Build NCCH Info
|
||||
set->IsBuildingNCCH0 = true;
|
||||
set->include_exefs_logo = false;
|
||||
set->out_format = CXI;
|
||||
set->build_ncch_type = format_not_set;
|
||||
set->ncch.buildNcch0 = true;
|
||||
set->ncch.includeExefsLogo = false;
|
||||
set->common.outFormat = CXI;
|
||||
set->ncch.ncchType = format_not_set;
|
||||
|
||||
// Yaml Settings
|
||||
set->yaml_set.Option.EnableCompress = true;
|
||||
set->yaml_set.Option.EnableCrypt = true;
|
||||
set->yaml_set.Option.UseOnSD = false;
|
||||
set->yaml_set.Option.FreeProductCode = false;
|
||||
set->common.rsfSet.Option.EnableCompress = true;
|
||||
set->common.rsfSet.Option.EnableCrypt = true;
|
||||
set->common.rsfSet.Option.UseOnSD = false;
|
||||
set->common.rsfSet.Option.FreeProductCode = false;
|
||||
|
||||
// Content0 Info
|
||||
set->Content0IsNcch = true;
|
||||
set->ConvertCci = false;
|
||||
set->Content0IsSrl = false;
|
||||
|
||||
set->Version[0] = 0xffff;
|
||||
// Working File Info
|
||||
set->common.workingFileType = infile_ncch;
|
||||
|
||||
// CCI Info
|
||||
set->GenSDKCardInfoHeader = false;
|
||||
set->OmitImportedNcchHdr = false;
|
||||
set->cci.useSDKStockData = false;
|
||||
|
||||
// CIA Info
|
||||
set->EncryptContents = true;
|
||||
set->RandomTitleKey = false;
|
||||
set->cia.useDataTitleVer = false;
|
||||
set->cia.titleVersion[0] = 0xffff; // invalid for detection
|
||||
set->cia.encryptCia = true;
|
||||
set->cia.randomTitleKey = false;
|
||||
set->common.keys.aes.currentCommonKey = 0x100; // invalid for detection
|
||||
for(int i = 0; i < CIA_MAX_CONTENT; i++){
|
||||
set->ContentID[i] = 0x100000000;
|
||||
set->cia.contentId[i] = 0x100000000;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,44 +133,28 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
||||
if(!IsLastArg){
|
||||
if(argv[i+1][0] != '-') HasParam = true;
|
||||
}
|
||||
if(strcmp(argv[i],"-elf") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-elf");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->elf_path = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-rsf") == 0){
|
||||
// Global Settings
|
||||
if(strcmp(argv[i],"-rsf") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-rsf");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->rsf_path = argv[i+1];
|
||||
set->common.rsfPath = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-icon") == 0){
|
||||
else if(strcmp(argv[i],"-f") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-icon");
|
||||
PrintNeedsParam("-f");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->icon_path = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-banner") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-banner");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
if(strcasecmp(argv[i+1],"cxi") == 0 || strcasecmp(argv[i+1],"exec") == 0 ) set->common.outFormat = CXI;
|
||||
else if(strcasecmp(argv[i+1],"cfa") == 0 || strcasecmp(argv[i+1],"data") == 0 ) set->common.outFormat = CFA;
|
||||
else if(strcasecmp(argv[i+1],"cci") == 0 || strcasecmp(argv[i+1],"card") == 0 ) set->common.outFormat = CCI;
|
||||
else if(strcasecmp(argv[i+1],"cia") == 0) set->common.outFormat = CIA;
|
||||
else {
|
||||
fprintf(stderr,"[-] Invalid output format '%s'\n",argv[i+1]);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->banner_path = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-logo") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-logo");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->logo_path = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-o") == 0){
|
||||
@@ -167,183 +162,115 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
||||
PrintNeedsParam("-o");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->outfile = argv[i+1];
|
||||
set->outfile_mallocd = false;
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-exheader") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-exheader");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->exheader_path = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-code") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-code");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->exefs_code_path = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-romfs") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-romfs");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->romfs_path = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-plain-region") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-plain-region");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->plain_region_path = argv[i+1];
|
||||
set->common.outFileName = argv[i+1];
|
||||
set->common.outFileName_mallocd = false;
|
||||
return 2;
|
||||
}
|
||||
// Key Options
|
||||
else if(strcmp(argv[i],"-target") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-target");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
if(strcasecmp(argv[i+1],"debug") == 0 || strcasecmp(argv[i+1],"dev") == 0)
|
||||
set->keys.keyset = keyset_DEBUG;
|
||||
else if(strcasecmp(argv[i+1],"retail") == 0 || strcasecmp(argv[i+1],"prod") == 0)
|
||||
set->keys.keyset = keyset_RETAIL;
|
||||
if(strcasecmp(argv[i+1],"test") == 0 || strcasecmp(argv[i+1],"t") == 0)
|
||||
set->common.keys.keyset = pki_TEST;
|
||||
else if(strcasecmp(argv[i+1],"custom") == 0 || strcasecmp(argv[i+1],"c") == 0)
|
||||
set->common.keys.keyset = pki_CUSTOM;
|
||||
|
||||
#ifndef PUBLIC_BUILD
|
||||
else if(strcasecmp(argv[i+1],"debug") == 0 || strcasecmp(argv[i+1],"development") == 0 || strcasecmp(argv[i+1],"d") == 0)
|
||||
set->common.keys.keyset = pki_DEVELOPMENT;
|
||||
else if(strcasecmp(argv[i+1],"retail") == 0 || strcasecmp(argv[i+1],"production") == 0 || strcasecmp(argv[i+1],"p") == 0)
|
||||
set->common.keys.keyset = pki_PRODUCTION;
|
||||
/*
|
||||
else if(strcasecmp(argv[i+1],"beta") == 0 || strcasecmp(argv[i+1],"b") == 0)
|
||||
set->common.keys.keyset = pki_BETA;
|
||||
*/
|
||||
#endif
|
||||
else{
|
||||
fprintf(stderr,"[SETTING ERROR] Unrecognised target '%s'\n",argv[i+1]);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-cci") == 0){
|
||||
else if(strcmp(argv[i],"-keydir") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-cci");
|
||||
PrintNeedsParam("-keydir");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ConvertCci = true;
|
||||
set->Content0IsSrl = false;
|
||||
set->Content0IsNcch = false;
|
||||
set->IsBuildingNCCH0 = false;
|
||||
set->out_format = CIA;
|
||||
set->CciPath = argv[i+1];
|
||||
set->common.keys.keydir = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-srl") == 0){
|
||||
else if(strcmp(argv[i],"-ckeyID") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-srl");
|
||||
PrintNeedsParam("-ckeyID");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ConvertCci = false;
|
||||
set->Content0IsSrl = true;
|
||||
set->Content0IsNcch = false;
|
||||
set->IsBuildingNCCH0 = false;
|
||||
set->out_format = CIA;
|
||||
set->SrlPath = argv[i+1];
|
||||
return 2;
|
||||
|
||||
}
|
||||
else if(strcmp(argv[i],"-devcardcci") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-devcardcci");
|
||||
set->common.keys.aes.currentCommonKey = strtol(argv[i+1],NULL,0);
|
||||
if(set->common.keys.aes.currentCommonKey > 0xff)
|
||||
{
|
||||
fprintf(stderr,"[SETTING ERROR] Invalid Common Key ID: 0x%x\n",set->common.keys.aes.currentCommonKey);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->GenSDKCardInfoHeader = true;
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-showkeys") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-showkeys");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->common.keys.dumpkeys = true;
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(argv[i],"-omitncchhdr") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-omitncchhdr");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->OmitImportedNcchHdr = true;
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(argv[i],"-cfa") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-cfa");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->build_ncch_type = CFA;
|
||||
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(argv[i],"-f") == 0){
|
||||
// Ncch Options
|
||||
else if(strcmp(argv[i],"-elf") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-f");
|
||||
PrintNeedsParam("-elf");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
if(strcasecmp(argv[i+1],"cxi") == 0 || strcasecmp(argv[i+1],"exec") == 0 ) set->out_format = CXI;
|
||||
else if(strcasecmp(argv[i+1],"cfa") == 0 || strcasecmp(argv[i+1],"data") == 0 ) set->out_format = CFA;
|
||||
else if(strcasecmp(argv[i+1],"cci") == 0 || strcasecmp(argv[i+1],"card") == 0 ) set->out_format = CCI;
|
||||
else if(strcasecmp(argv[i+1],"cia") == 0) set->out_format = CIA;
|
||||
else {
|
||||
fprintf(stderr,"[-] Invalid output format '%s'\n",argv[i+1]);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->ncch.elfPath = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-sysfixedkey") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-sysfixedkey");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
if(strlen(argv[i+1]) != 32) {
|
||||
fprintf(stderr,"[ERROR] Invalid SystemFixedKey '%s'\n",argv[i+1]);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
u8 *key = malloc(16);
|
||||
if(!key){
|
||||
fprintf(stderr,"[ERROR] MEM ERROR\n");
|
||||
return USR_MEM_ERROR;
|
||||
}
|
||||
char_to_u8_array(key,argv[i+1],16,BE,16);
|
||||
SetSystemFixedKey(&set->keys,key);
|
||||
free(key);
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-commonkey") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-commonkey");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
if(strlen(argv[i+1]) != 32) {
|
||||
fprintf(stderr,"[ERROR] Invalid CommonKey '%s'\n",argv[i+1]);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
u8 *key = malloc(16);
|
||||
if(!key){
|
||||
fprintf(stderr,"[ERROR] MEM ERROR\n");
|
||||
return USR_MEM_ERROR;
|
||||
}
|
||||
char_to_u8_array(key,argv[i+1],16,BE,16);
|
||||
|
||||
if(i+2 < argc){
|
||||
u8 id = strtol(argv[i+2],NULL,10);
|
||||
SetCommonKey(&set->keys,key,id);
|
||||
SetCurrentCommonKey(&set->keys,id);
|
||||
else if(strcmp(argv[i],"-icon") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-icon");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
else SetCommonKey(&set->keys,key,0);
|
||||
SetCurrentCommonKey(&set->keys,0);
|
||||
free(key);
|
||||
set->ncch.iconPath = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-accessdesc") == 0){
|
||||
else if(strcmp(argv[i],"-banner") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-accessdesc");
|
||||
PrintNeedsParam("-banner");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ncch.bannerPath = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-logo") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-logo");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ncch.logoPath = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-desc") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-desc");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
char *tmp = argv[i+1];
|
||||
char *tmp2 = strstr(tmp,":");
|
||||
if(!tmp2){
|
||||
fprintf(stderr,"[SETTING ERROR] Bad argument '%s %s', correct format:\n",argv[i],argv[i+1]);
|
||||
fprintf(stderr," -accessdesc <APP TYPE>:<TARGET FIRMWARE>\n");
|
||||
fprintf(stderr," -desc <APP TYPE>:<TARGET FIRMWARE>\n");
|
||||
}
|
||||
if(strlen(tmp2) < 2){
|
||||
fprintf(stderr,"[SETTING ERROR] Bad argument '%s %s', correct format:\n",argv[i],argv[i+1]);
|
||||
fprintf(stderr," -accessdesc <APP TYPE>:<TARGET FIRMWARE>\n");
|
||||
fprintf(stderr," -desc <APP TYPE>:<TARGET FIRMWARE>\n");
|
||||
}
|
||||
|
||||
u32 app_type_len = (u32)(tmp2-tmp);
|
||||
@@ -351,9 +278,10 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
||||
memset(app_type,0,app_type_len+1);
|
||||
memcpy(app_type,tmp,app_type_len);
|
||||
|
||||
if(strcasecmp(app_type,"App") == 0 || strcasecmp(app_type,"SDApp") == 0) set->keys.AccessDescSign.PresetType = app;
|
||||
else if(strcasecmp(app_type,"Demo") == 0) set->keys.AccessDescSign.PresetType = demo;
|
||||
else if(strcasecmp(app_type,"DlpChild") == 0 || strcasecmp(app_type,"Dlp") == 0) set->keys.AccessDescSign.PresetType = dlp;
|
||||
if(strcasecmp(app_type,"App") == 0 || strcasecmp(app_type,"SDApp") == 0) set->common.keys.accessDescSign.presetType = app;
|
||||
else if(strcasecmp(app_type,"ECApp") == 0) set->common.keys.accessDescSign.presetType = ec_app;
|
||||
else if(strcasecmp(app_type,"Demo") == 0) set->common.keys.accessDescSign.presetType = demo;
|
||||
else if(strcasecmp(app_type,"DlpChild") == 0 || strcasecmp(app_type,"Dlp") == 0) set->common.keys.accessDescSign.presetType = dlp;
|
||||
else{
|
||||
fprintf(stderr,"[SETTING ERROR] Accessdesc AppType preset '%s' not valid, please manually configure RSF\n",app_type);
|
||||
return USR_BAD_ARG;
|
||||
@@ -361,41 +289,116 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
||||
|
||||
|
||||
char *target_firmware = (tmp2+1);
|
||||
set->keys.AccessDescSign.TargetFirmware = strtoul(target_firmware,NULL,10);
|
||||
set->common.keys.accessDescSign.targetFirmware = strtoul(target_firmware,NULL,10);
|
||||
return 2;
|
||||
}
|
||||
|
||||
else if(strcmp(argv[i],"-exefslogo") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-exefslogo");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->include_exefs_logo = true;
|
||||
set->ncch.includeExefsLogo = true;
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(argv[i],"-rand") == 0){
|
||||
else if(strcmp(argv[i],"-data") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-rand");
|
||||
PrintNoNeedParam("-data");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ncch.ncchType = CFA;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Ncch Rebuild Options
|
||||
else if(strcmp(argv[i],"-code") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-code");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ncch.codePath = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-exheader") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-exheader");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ncch.exheaderPath = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-plain-region") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-plain-region");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ncch.plainRegionPath = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-romfs") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-romfs");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ncch.romfsPath = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
// Cci Options
|
||||
#ifndef PUBLIC_BUILD
|
||||
else if(strcmp(argv[i],"-devcardcci") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-devcardcci");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->RandomTitleKey = true;
|
||||
set->cci.useSDKStockData = true;
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(argv[i],"-nocryptcia") == 0){
|
||||
#endif
|
||||
// Cia Options
|
||||
#ifndef PUBLIC_BUILD
|
||||
else if(strcmp(argv[i],"-cci") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-cci");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ncch.buildNcch0 = false;
|
||||
set->common.workingFileType = infile_ncsd;
|
||||
set->common.workingFilePath = argv[i+1];
|
||||
set->common.outFormat = CIA;
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-srl") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-srl");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->ncch.buildNcch0 = false;
|
||||
set->common.workingFileType = infile_srl;
|
||||
set->common.workingFilePath = argv[i+1];
|
||||
set->common.outFormat = CIA;
|
||||
return 2;
|
||||
|
||||
}
|
||||
else if(strcmp(argv[i],"-dlc") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-nocryptcia");
|
||||
PrintNoNeedParam("-dlc");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->EncryptContents = false;
|
||||
set->cia.DlcContent = true;
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
else if(strcmp(argv[i],"-major") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-major");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->cia.useNormTitleVer = true;
|
||||
u32 tmp = strtoul(argv[i+1],NULL,10);
|
||||
set->Version[0] = tmp > 63 ? 63 : tmp;
|
||||
if(tmp > 63){
|
||||
fprintf(stderr,"[SETTING ERROR] Major version: '%d' is too large, max: '63'\n",tmp);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->cia.titleVersion[0] = tmp;
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-minor") == 0){
|
||||
@@ -403,8 +406,13 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
||||
PrintNeedsParam("-minor");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->cia.useNormTitleVer = true;
|
||||
u32 tmp = strtoul(argv[i+1],NULL,10);
|
||||
set->Version[1] = tmp > 63 ? 63 : tmp;
|
||||
if(tmp > 63){
|
||||
fprintf(stderr,"[SETTING ERROR] Minor version: '%d' is too large, max: '63'\n",tmp);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->cia.titleVersion[1] = tmp;
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-micro") == 0){
|
||||
@@ -413,10 +421,54 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
u32 tmp = strtoul(argv[i+1],NULL,10);
|
||||
set->Version[2] = tmp > 15 ? 15 : tmp;
|
||||
if(tmp > 15){
|
||||
fprintf(stderr,"[SETTING ERROR] Micro version: '%d' is too large, max: '15'\n",tmp);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->cia.titleVersion[2] = tmp;
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-dver") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-dver");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->cia.useDataTitleVer = true;
|
||||
u32 tmp = strtoul(argv[i+1],NULL,10);
|
||||
if(tmp > 4095){
|
||||
fprintf(stderr,"[SETTING ERROR] Data version: '%d' is too large, max: '4095'\n",tmp);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->cia.titleVersion[0] = (tmp >> 6) & 63;
|
||||
set->cia.titleVersion[1] = tmp & 63;
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-savesize") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-savesize");
|
||||
return USR_ARG_REQ_PARAM;
|
||||
}
|
||||
set->cia.overideSaveDataSize = argv[i+1];
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(argv[i],"-rand") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-rand");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->cia.randomTitleKey = true;
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp(argv[i],"-nocryptcia") == 0){
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-nocryptcia");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->cia.encryptCia = false;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Other Setting
|
||||
else if(strcmp(argv[i],"-content") == 0){
|
||||
if(!HasParam){
|
||||
PrintNeedsParam("-content");
|
||||
@@ -439,38 +491,90 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
||||
}
|
||||
|
||||
/* Getting Content Index */
|
||||
u16 content_index = strtol((char*)(pos+1),NULL,10);
|
||||
u16 content_index = strtol((char*)(pos+1),NULL,0);
|
||||
|
||||
/* Storing Content Filepath */
|
||||
u32 path_len = (u32)(pos-argv[i+1])+1;
|
||||
|
||||
if(content_index == 0) set->IsBuildingNCCH0 = false;
|
||||
if(set->ContentPath[content_index] != NULL){
|
||||
if(content_index == 0) set->ncch.buildNcch0 = false;
|
||||
if(set->common.contentPath[content_index] != NULL){
|
||||
fprintf(stderr,"[SETTING ERROR] Content %d is already specified\n",content_index);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
set->ContentPath[content_index] = malloc(path_len);
|
||||
if(set->ContentPath[content_index] == NULL){
|
||||
fprintf(stderr,"[SETTING ERROR] MEM ERROR\n");
|
||||
set->common.contentPath[content_index] = malloc(path_len);
|
||||
if(set->common.contentPath[content_index] == NULL){
|
||||
fprintf(stderr,"[SETTING ERROR] Not enough memory\n");
|
||||
return USR_MEM_ERROR;
|
||||
}
|
||||
memset(set->ContentPath[content_index],0,path_len);
|
||||
strncpy(set->ContentPath[content_index],argv[i+1],path_len-1);
|
||||
memset(set->common.contentPath[content_index],0,path_len);
|
||||
strncpy(set->common.contentPath[content_index],argv[i+1],path_len-1);
|
||||
|
||||
/* Get ContentID for CIA gen */
|
||||
char *pos2 = strstr(pos+1,":");
|
||||
if(pos2) {
|
||||
set->ContentID[content_index] = strtoul((pos2+1),NULL,16);
|
||||
set->cia.contentId[content_index] = strtoul((pos2+1),NULL,0);
|
||||
}
|
||||
|
||||
/* Return Next Arg Pos*/
|
||||
return 2;
|
||||
}
|
||||
/*
|
||||
|
||||
else if(strncmp(argv[i],"-D",2) == 0){
|
||||
fprintf(stderr,"[WARNING] -DNAME=VALUE not implemented yet\n");
|
||||
if(HasParam){
|
||||
PrintNoNeedParam("-DNAME=VALUE");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(set->dname.m_items == 0){
|
||||
set->dname.m_items = 10;
|
||||
set->dname.u_items = 0;
|
||||
set->dname.items = malloc(sizeof(dname_item)*set->dname.m_items);
|
||||
if(!set->dname.items){
|
||||
fprintf(stderr,"[SETTING ERROR] Not enough memory\n");
|
||||
return MEM_ERROR;
|
||||
}
|
||||
memset(set->dname.items,0,sizeof(dname_item)*set->dname.m_items);
|
||||
}
|
||||
else if(set->dname.m_items == set->dname.u_items){
|
||||
set->dname.m_items *= 2;
|
||||
dname_item *tmp = malloc(sizeof(dname_item)*set->dname.m_items);
|
||||
if(!tmp){
|
||||
fprintf(stderr,"[SETTING ERROR] Not enough memory\n");
|
||||
return MEM_ERROR;
|
||||
}
|
||||
memset(tmp,0,sizeof(dname_item)*set->dname.m_items);
|
||||
memcpy(tmp,set->dname.items,sizeof(dname_item)*set->dname.u_items);
|
||||
free(set->dname.items);
|
||||
set->dname.items = tmp;
|
||||
}
|
||||
|
||||
char *name_pos = (char*)(argv[i]+2);
|
||||
u32 name_len = 0;
|
||||
char *val_pos = strstr(name_pos,"=");
|
||||
u32 val_len = 0;
|
||||
if(!val_pos){
|
||||
fprintf(stderr,"[SETTING ERROR] Format: '%s' is invalid\n",argv[i]);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(strlen(val_pos) < 2){
|
||||
fprintf(stderr,"[SETTING ERROR] Format: '%s' is invalid\n",argv[i]);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
val_pos = (val_pos + 1);
|
||||
name_len = (val_pos - 2 - name_pos);
|
||||
set->dname.items[set->dname.u_items].name = malloc(name_len+1);
|
||||
memset(set->dname.items[set->dname.u_items].name,0,name_len+1);
|
||||
memcpy(set->dname.items[set->dname.u_items].name,name_pos,name_len);
|
||||
|
||||
val_len = strlen(val_pos);
|
||||
set->dname.items[set->dname.u_items].value = malloc(val_len+1);
|
||||
memset(set->dname.items[set->dname.u_items].value,0,val_len+1);
|
||||
memcpy(set->dname.items[set->dname.u_items].value,val_pos,val_len);
|
||||
|
||||
set->dname.u_items++;
|
||||
|
||||
return 1;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
// If not a valid argument
|
||||
fprintf(stderr,"[SETTING ERROR] Unrecognised argument '%s'\n",argv[i]);
|
||||
@@ -480,73 +584,78 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set)
|
||||
int CheckArgumentCombination(user_settings *set)
|
||||
{
|
||||
for(int i = 0; i < CIA_MAX_CONTENT; i++){
|
||||
if( i > CCI_MAX_CONTENT-1 && set->ContentPath[i] && set->out_format == CCI){
|
||||
fprintf(stderr,"[SETTING ERROR] Content indexes > 7 are invalid for CCI\n");
|
||||
if( i > CCI_MAX_CONTENT-1 && set->common.contentPath[i] && set->common.outFormat == CCI){
|
||||
fprintf(stderr,"[SETTING ERROR] Content indexes > %d are invalid for CCI\n",CCI_MAX_CONTENT-1);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(set->ContentPath[i] && (set->out_format == CXI || set->out_format == CFA)){
|
||||
if(set->common.contentPath[i] && (set->common.outFormat == CXI || set->common.outFormat == CFA)){
|
||||
fprintf(stderr,"[SETTING ERROR] You cannot specify content while outputting CXI/CFA files\n");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
}
|
||||
if((set->out_format == CXI || set->out_format == CFA) && set->build_ncch_type > 0){
|
||||
fprintf(stderr,"[SETTING ERROR] Arguments '-f cxi|cfa' and '-ncch cxi|cfa' are invalid\n");
|
||||
if((set->common.outFormat == CXI || set->common.outFormat == CFA) && set->ncch.ncchType != format_not_set){
|
||||
fprintf(stderr,"[SETTING ERROR] Arguments \"-f cxi|cfa\" and \"-ncch cxi|cfa\" are invalid\n");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(set->build_ncch_type > 0 && !set->IsBuildingNCCH0){
|
||||
fprintf(stderr,"[SETTING ERROR] Arguments '-content %s:0' and '-ncch cxi|cfa' cannot be used together\n",set->ContentPath[0]);
|
||||
if(set->ncch.ncchType != format_not_set && !set->ncch.buildNcch0){
|
||||
fprintf(stderr,"[SETTING ERROR] Arguments \"-content %s:0\" and \"-data\" cannot be used together\n",set->common.contentPath[0]);
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
|
||||
if(set->elf_path && set->exefs_code_path){
|
||||
fprintf(stderr,"[SETTING ERROR] Arguments '-elf' and '-code' cannot be used together\n");
|
||||
if(set->cia.useDataTitleVer && set->cia.useNormTitleVer){
|
||||
fprintf(stderr,"[SETTING ERROR] Arguments \"-dver\" and \"-major\"/\"-minor\" cannot be used together\n");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
|
||||
if(set->ncch.elfPath && set->ncch.codePath){
|
||||
fprintf(stderr,"[SETTING ERROR] Arguments \"-elf\" and \"-code\" cannot be used together\n");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
|
||||
// Setting set->build_ncch_type if it isn't already set
|
||||
if(set->IsBuildingNCCH0 && set->build_ncch_type == 0){
|
||||
if(set->out_format == CCI || set->out_format == CIA) set->build_ncch_type = CXI;
|
||||
else set->build_ncch_type = set->out_format;
|
||||
if(set->ncch.buildNcch0 && set->ncch.ncchType == format_not_set){
|
||||
if(set->common.outFormat == CCI || set->common.outFormat == CIA) set->ncch.ncchType = CXI;
|
||||
else set->ncch.ncchType = set->common.outFormat;
|
||||
}
|
||||
|
||||
bool buildCXI = (set->out_format == CXI || set->build_ncch_type == CXI) && set->IsBuildingNCCH0;
|
||||
bool buildCFA = (set->out_format == CFA || set->build_ncch_type == CFA) && set->IsBuildingNCCH0;
|
||||
bool buildCXI = set->ncch.ncchType == CXI;
|
||||
bool buildCFA = set->ncch.ncchType == CFA;
|
||||
// Detecting Required Arguments
|
||||
if(buildCXI && !set->elf_path && !set->exefs_code_path){
|
||||
if(buildCXI && !set->ncch.elfPath && !set->ncch.codePath){
|
||||
PrintNeedsArgument("-elf");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if((buildCXI || buildCFA) && !set->rsf_path){
|
||||
if((buildCXI || buildCFA) && !set->common.rsfPath){
|
||||
PrintNeedsArgument("-rsf");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(buildCXI && !set->exheader_path && set->exefs_code_path){
|
||||
if(buildCXI && set->ncch.codePath && !set->ncch.exheaderPath){
|
||||
PrintNeedsArgument("-exheader");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
|
||||
// Reporting bad arguments
|
||||
if(!buildCXI && set->elf_path){
|
||||
if(!buildCXI && set->ncch.elfPath){
|
||||
PrintArgumentInvalid("-elf");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(!buildCXI && set->exefs_code_path){
|
||||
if(!buildCXI && set->ncch.codePath){
|
||||
PrintArgumentInvalid("-code");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(!buildCXI && set->exheader_path){
|
||||
if(!buildCXI && set->ncch.exheaderPath){
|
||||
PrintArgumentInvalid("-exheader");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(!buildCXI && set->plain_region_path){
|
||||
if(!buildCXI && set->ncch.plainRegionPath){
|
||||
PrintArgumentInvalid("-plain-region");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(!buildCXI && set->include_exefs_logo){
|
||||
if(!set->ncch.buildNcch0 && set->ncch.includeExefsLogo){
|
||||
PrintArgumentInvalid("-exefslogo");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
if(!set->IsBuildingNCCH0 && set->romfs_path){
|
||||
if(!set->ncch.buildNcch0 && set->ncch.romfsPath){
|
||||
PrintArgumentInvalid("-romfs");
|
||||
return USR_BAD_ARG;
|
||||
}
|
||||
@@ -746,24 +855,31 @@ void free_RsfSettings(rsf_settings *set)
|
||||
void free_UserSettings(user_settings *usr_settings)
|
||||
{
|
||||
// Free Content Paths
|
||||
if(usr_settings->ContentPath){
|
||||
for(int i = 0; i < CIA_MAX_CONTENT; i++){
|
||||
free(usr_settings->ContentPath[i]);
|
||||
}
|
||||
free(usr_settings->ContentPath);
|
||||
if(usr_settings->common.contentPath){
|
||||
for(int i = 0; i < CIA_MAX_CONTENT; i++)
|
||||
free(usr_settings->common.contentPath[i]);
|
||||
free(usr_settings->common.contentPath);
|
||||
}
|
||||
|
||||
// free -DNAME=VALUE
|
||||
for(u32 i = 0; i < usr_settings->dname.u_items; i++){
|
||||
free(usr_settings->dname.items[i].name);
|
||||
free(usr_settings->dname.items[i].value);
|
||||
}
|
||||
free(usr_settings->dname.items);
|
||||
|
||||
// Free Spec File Setting
|
||||
free_RsfSettings(&usr_settings->yaml_set);
|
||||
free_RsfSettings(&usr_settings->common.rsfSet);
|
||||
|
||||
// Free Key Data
|
||||
FreeKeys(&usr_settings->keys);
|
||||
FreeKeys(&usr_settings->common.keys);
|
||||
|
||||
// Free Content0
|
||||
free(usr_settings->Content0.buffer);
|
||||
// Free Working File
|
||||
free(usr_settings->common.workingFile.buffer);
|
||||
|
||||
// Free outfile path, if malloc'd
|
||||
if(usr_settings->outfile_mallocd) free(usr_settings->outfile);
|
||||
if(usr_settings->common.outFileName_mallocd)
|
||||
free(usr_settings->common.outFileName);
|
||||
|
||||
// Clear settings
|
||||
init_UserSettings(usr_settings);
|
||||
@@ -774,22 +890,22 @@ void free_UserSettings(user_settings *usr_settings)
|
||||
|
||||
void PrintNeedsArgument(char *arg)
|
||||
{
|
||||
fprintf(stderr,"[SETTING ERROR] Argument '%s' is required\n",arg);
|
||||
fprintf(stderr,"[SETTING ERROR] Argument \"%s\" is required\n",arg);
|
||||
}
|
||||
|
||||
void PrintArgumentInvalid(char *arg)
|
||||
{
|
||||
fprintf(stderr,"[SETTING ERROR] Argument '%s' is invalid\n",arg);
|
||||
fprintf(stderr,"[SETTING ERROR] Argument \"%s\" is invalid\n",arg);
|
||||
}
|
||||
|
||||
void PrintNeedsParam(char *arg)
|
||||
{
|
||||
fprintf(stderr,"[SETTING ERROR] '%s' requires a parameter\n",arg);
|
||||
fprintf(stderr,"[SETTING ERROR] \"%s\" requires a parameter\n",arg);
|
||||
}
|
||||
|
||||
void PrintNoNeedParam(char *arg)
|
||||
{
|
||||
fprintf(stderr,"[SETTING ERROR] '%s' does not take a parameter\n",arg);
|
||||
fprintf(stderr,"[SETTING ERROR] \"%s\" does not take a parameter\n",arg);
|
||||
}
|
||||
|
||||
void DisplayHelp(char *app_name)
|
||||
@@ -803,25 +919,34 @@ void DisplayHelp(char *app_name)
|
||||
printf("Option Parameter Explanation\n");
|
||||
printf("GLOBAL OPTIONS:\n");
|
||||
printf(" -help Display this text\n");
|
||||
printf(" -rsf <rsf path> RSF File\n");
|
||||
printf(" -rsf <file> RSF File\n");
|
||||
printf(" -f <out format> Output Format (cxi|cfa|cci|cia)\n");
|
||||
printf(" -o <outfile> Output File\n");
|
||||
printf(" -o <file> Output File\n");
|
||||
//printf(" -v Verbose\n");
|
||||
//printf(" -DNAME=VALUE Substitute values in Spec files\n");
|
||||
printf(" -DNAME=VALUE Substitute values in Spec files\n");
|
||||
printf("KEY OPTIONS:\n");
|
||||
printf(" -sysfixedkey <32 hex chars> Specify SystemFixed Key\n");
|
||||
printf(" -commonkey <32 hex chars> <id> Specify commonkey and index\n");
|
||||
#ifndef PUBLIC_BUILD
|
||||
printf(" -target <value> Debug or Retail(Default)\n");
|
||||
#ifdef PUBLIC_BUILD
|
||||
printf(" -target <t|c> Target for crypto, defaults to 't'\n");
|
||||
printf(" 't' Test(false) Keys & prod Certs\n");
|
||||
printf(" 'c' User provides Keys & Certs\n");
|
||||
#else
|
||||
printf(" -target <t|d|p|c> Target for crypto, defaults to 't'\n");
|
||||
printf(" 't' Test(false) Keys & prod Certs\n");
|
||||
printf(" 'd' Development Keys & Certs\n");
|
||||
printf(" 'p' Production Keys & Certs\n");
|
||||
printf(" 'c' User provides Keys & Certs\n");
|
||||
#endif
|
||||
printf(" -keydir <dir> Key Directory (for use with \"-target c\")\n");
|
||||
printf(" -ckeyID <u8 value> Override the automatic commonKey selection\n");
|
||||
printf(" -showkeys Display the loaded keychain\n");
|
||||
printf("NCCH OPTIONS:\n");
|
||||
printf(" -elf <elf path> ELF File\n");
|
||||
printf(" -icon <icon path> Icon File\n");
|
||||
printf(" -banner <banner path> Banner File\n");
|
||||
printf(" -logo <logo path> Logo File (Overrides \"BasicInfo/Logo\" in RSF)\n");
|
||||
printf(" -accessdesc <apptype>:<fw> Specify AccessDesc Preset\n");
|
||||
printf(" -elf <file> ELF File\n");
|
||||
printf(" -icon <file> Icon File\n");
|
||||
printf(" -banner <file> Banner File\n");
|
||||
printf(" -logo <file> Logo File (Overrides \"BasicInfo/Logo\" in RSF)\n");
|
||||
printf(" -desc <apptype>:<fw> Specify Access Descriptor Preset\n");
|
||||
printf(" -exefslogo Include Logo in ExeFs (Required for usage on <5.X Systems)\n");
|
||||
printf(" -cfa Specify if building a Data Archive when \"-f cia\"\n");
|
||||
printf(" -data Specify if building a Data Archive when \"-f cia\"\n");
|
||||
printf("NCCH REBUILD OPTIONS:\n");
|
||||
printf(" -code <code path> Specify ExeFs code File\n");
|
||||
printf(" -exheader <exhdr path> ExHeader Template File\n");
|
||||
@@ -830,18 +955,20 @@ void DisplayHelp(char *app_name)
|
||||
printf("CCI OPTIONS:\n");
|
||||
#ifndef PUBLIC_BUILD
|
||||
printf(" -devcardcci Use SDK CardInfo Method\n");
|
||||
printf(" -omitncchhdr Omit NCCH Hdr for imported NCCH0\n");
|
||||
#endif
|
||||
printf(" -content <filepath>:<index> Specify content files\n");
|
||||
printf("CIA OPTIONS:\n");
|
||||
#ifndef PUBLIC_BUILD
|
||||
printf(" -cci <cci path> Convert CCI to CIA\n");
|
||||
printf(" -srl <srl path> Use TWL SRL as Content0\n");
|
||||
printf(" -dlc Create DLC CIA\n");
|
||||
#endif
|
||||
printf(" -content <filepath>:<index>:<id> Specify content files\n");
|
||||
printf(" -major <version major> Specify Title Version Major\n");
|
||||
printf(" -minor <version minor> Specify Title Version Minor\n");
|
||||
printf(" -micro <version micro> Specify Title Version Micro\n");
|
||||
printf(" -major <major version> Specify Major Version\n");
|
||||
printf(" -minor <minor version> Specify Minor Version\n");
|
||||
printf(" -micro <micro version> Specify Micro Version\n");
|
||||
printf(" -dver <datatitle ver> Specify Data Title Version\n");
|
||||
printf(" -savesize <size> Savedata size\n");
|
||||
printf(" -rand Use a random title key\n");
|
||||
printf(" -nocryptcia Don't encrypt CIA contents\n");
|
||||
}
|
||||
|
||||
+71
-37
@@ -15,6 +15,14 @@ typedef enum
|
||||
USR_MEM_ERROR = -6,
|
||||
} user_settings_errors;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
infile_none,
|
||||
infile_ncch,
|
||||
infile_ncsd,
|
||||
infile_srl,
|
||||
} infile_type;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
format_not_set,
|
||||
@@ -24,8 +32,23 @@ typedef enum
|
||||
CIA
|
||||
} output_format;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *name;
|
||||
char *value;
|
||||
} dname_item;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
dname_item *items;
|
||||
u32 m_items;
|
||||
u32 u_items;
|
||||
} dname_struct;
|
||||
|
||||
static const char output_extention[4][5] = {".cxi",".cfa",".cci",".cia"};
|
||||
|
||||
/* This does not follow style, so the rsf string names match the variables where they're stored */
|
||||
typedef struct
|
||||
{
|
||||
struct{
|
||||
@@ -206,52 +229,63 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
// General Settings
|
||||
char *rsf_path;
|
||||
bool outfile_mallocd;
|
||||
char *outfile;
|
||||
output_format out_format;
|
||||
struct{
|
||||
char *rsfPath;
|
||||
bool outFileName_mallocd;
|
||||
char *outFileName;
|
||||
output_format outFormat;
|
||||
|
||||
// Content0
|
||||
bool ConvertCci;
|
||||
char *CciPath;
|
||||
bool Content0IsSrl;
|
||||
char *SrlPath;
|
||||
// Keys
|
||||
keys_struct keys;
|
||||
|
||||
bool Content0IsNcch;
|
||||
COMPONENT_STRUCT Content0;
|
||||
char **ContentPath;
|
||||
u64 ContentID[CIA_MAX_CONTENT]; // For CIA
|
||||
// RSF Imported Settings
|
||||
rsf_settings rsfSet;
|
||||
|
||||
// Ncch0 Build
|
||||
bool IsBuildingNCCH0;
|
||||
output_format build_ncch_type;
|
||||
char *elf_path;
|
||||
char *icon_path;
|
||||
char *banner_path;
|
||||
char *logo_path;
|
||||
// Content Details
|
||||
char **contentPath;
|
||||
|
||||
bool include_exefs_logo;
|
||||
char *workingFilePath;
|
||||
infile_type workingFileType; // Could Be ncch/ncsd/srl. This is mainly used for CIA gen
|
||||
COMPONENT_STRUCT workingFile;
|
||||
} common;
|
||||
|
||||
char *exefs_code_path;
|
||||
char *exheader_path;
|
||||
char *plain_region_path;
|
||||
char *romfs_path;
|
||||
dname_struct dname; // For RSF value subsitution
|
||||
|
||||
// CCI Settings
|
||||
bool GenSDKCardInfoHeader;
|
||||
bool OmitImportedNcchHdr;
|
||||
struct{
|
||||
bool buildNcch0;
|
||||
output_format ncchType;
|
||||
char *elfPath;
|
||||
char *iconPath;
|
||||
char *bannerPath;
|
||||
char *logoPath; // override logo specs in RSF
|
||||
|
||||
// CIA Settings
|
||||
bool RandomTitleKey;
|
||||
bool EncryptContents;
|
||||
u16 Version[3];
|
||||
bool includeExefsLogo; // for <5.x compatibility
|
||||
|
||||
// ncch rebuild settings
|
||||
char *codePath; // uncompressed exefs .code
|
||||
char *exheaderPath; // for .code details
|
||||
char *plainRegionPath; // prebuilt Plain Region
|
||||
char *romfsPath; // Prebuild _cleartext_ romfs binary
|
||||
} ncch; // Ncch0 Build
|
||||
|
||||
struct{
|
||||
bool useSDKStockData; // incase we want to use the SDK stock data, for whatever reason.
|
||||
} cci; // CCI Settings
|
||||
|
||||
struct{
|
||||
char *overideSaveDataSize;
|
||||
bool randomTitleKey;
|
||||
bool encryptCia;
|
||||
bool DlcContent;
|
||||
|
||||
bool useNormTitleVer;
|
||||
bool useDataTitleVer;
|
||||
u16 titleVersion[3];
|
||||
|
||||
u64 contentId[CIA_MAX_CONTENT]; // For CIA
|
||||
} cia; // CIA Settings
|
||||
|
||||
// Keys
|
||||
keys_struct keys;
|
||||
|
||||
// RSF/DESC Imported Settings
|
||||
rsf_settings yaml_set;
|
||||
} user_settings;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -228,7 +228,7 @@ char *getcwdir(char *buffer,int maxlen)
|
||||
#endif
|
||||
}
|
||||
|
||||
//Data Size conversion
|
||||
//Data Size contitleVersion
|
||||
u16 u8_to_u16(u8 *value, u8 endianness)
|
||||
{
|
||||
u16 new_value;
|
||||
|
||||
@@ -34,7 +34,7 @@ int TruncateFile_u64(char *filename, u64 filelen);
|
||||
int fseek_64(FILE *fp, u64 file_pos, int whence);
|
||||
int makedir(const char* dir);
|
||||
char *getcwdir(char *buffer,int maxlen);
|
||||
//Data Size conversion
|
||||
//Data Size contitleVersion
|
||||
u16 u8_to_u16(u8 *value, u8 endianness);
|
||||
u32 u8_to_u32(u8 *value, u8 endianness);
|
||||
u64 u8_to_u64(u8 *value, u8 endianness);
|
||||
|
||||
+29
-17
@@ -3,7 +3,7 @@
|
||||
|
||||
// Private Prototypes
|
||||
void InitYamlContext(ctr_yaml_context *ctx);
|
||||
int ParseSpecFile(rsf_settings *set, char *path);
|
||||
int ParseSpecFile(rsf_settings *set, char *path, dname_struct *dname);
|
||||
void CheckEvent(ctr_yaml_context *ctx);
|
||||
|
||||
void BadYamlFormatting(void);
|
||||
@@ -11,21 +11,21 @@ void BadYamlFormatting(void);
|
||||
// Code
|
||||
int GetYamlSettings(user_settings *set)
|
||||
{
|
||||
memset(&set->yaml_set,0,sizeof(rsf_settings));
|
||||
memset(&set->common.rsfSet,0,sizeof(rsf_settings));
|
||||
int ret = 0;
|
||||
if(set->rsf_path) {
|
||||
FILE *tmp = fopen(set->rsf_path,"rb");
|
||||
if(!tmp) {
|
||||
fprintf(stderr,"[YAML ERROR] Failed to open %s\n",set->rsf_path);
|
||||
if(set->common.rsfPath) {
|
||||
FILE *rsf = fopen(set->common.rsfPath,"rb");
|
||||
if(!rsf) {
|
||||
fprintf(stderr,"[YAML ERROR] Failed to open %s\n",set->common.rsfPath);
|
||||
return FAILED_TO_OPEN_FILE;
|
||||
}
|
||||
fclose(tmp);
|
||||
ret = ParseSpecFile(&set->yaml_set,set->rsf_path);
|
||||
fclose(rsf);
|
||||
ret = ParseSpecFile(&set->common.rsfSet,set->common.rsfPath, &set->dname);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ParseSpecFile(rsf_settings *set, char *path)
|
||||
int ParseSpecFile(rsf_settings *set, char *path, dname_struct *dname)
|
||||
{
|
||||
ctr_yaml_context *ctx = malloc(sizeof(ctr_yaml_context));
|
||||
InitYamlContext(ctx);
|
||||
@@ -40,6 +40,7 @@ int ParseSpecFile(rsf_settings *set, char *path)
|
||||
yaml_parser_set_input_file(&ctx->parser, input);
|
||||
|
||||
|
||||
ctx->dname = dname;
|
||||
ctx->IsSequence = false;
|
||||
ctx->IsKey = true;
|
||||
ctx->prev_event = 0;
|
||||
@@ -100,21 +101,32 @@ void InitYamlContext(ctr_yaml_context *ctx)
|
||||
|
||||
char *GetYamlString(ctr_yaml_context *ctx)
|
||||
{
|
||||
/*
|
||||
if(EventIsScalar(ctx)){
|
||||
if(!GetYamlStringSize(ctx) && !ctx->event.data.scalar.value)
|
||||
return ctx->event.data.scalar.value;
|
||||
//return (char*)ctx->event.data.scalar.value;
|
||||
|
||||
if(!ctx->event.data.scalar.value)
|
||||
return NULL;
|
||||
|
||||
// Intercept values set from -DNAME=VALUE
|
||||
char *start = strstr((char*)ctx->event.data.scalar.value,"$(");
|
||||
char *end = strstr((char*)ctx->event.data.scalar.value,")");
|
||||
if(!start || !end)
|
||||
return (char*)ctx->event.data.scalar.value;
|
||||
|
||||
char *name = (start + 2);
|
||||
u32 name_len = (end - 1 - name);
|
||||
|
||||
for(u32 i = 0; i < ctx->dname->u_items; i++){
|
||||
if(strncmp(ctx->dname->items[i].name,name,name_len) == 0)
|
||||
return ctx->dname->items[i].value;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
*/
|
||||
return (char*)ctx->event.data.scalar.value;
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
u32 GetYamlStringSize(ctr_yaml_context *ctx)
|
||||
{
|
||||
return ctx->event.data.scalar.length;
|
||||
return strlen(GetYamlString(ctx)); // can't read size from yaml, as string may have been intercepted
|
||||
}
|
||||
|
||||
void GetEvent(ctr_yaml_context *ctx)
|
||||
|
||||
@@ -19,6 +19,7 @@ typedef struct
|
||||
int error;
|
||||
|
||||
// Important Details
|
||||
dname_struct *dname;
|
||||
bool IsSequence;
|
||||
bool IsKey;
|
||||
yaml_event_type_t prev_event;
|
||||
|
||||
Reference in New Issue
Block a user