first working version

This commit is contained in:
eta 2022-12-29 00:09:59 +00:00
commit d1de3f3137
13 changed files with 1194 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/target

3
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

6
.idea/misc.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/rsp6-decoder-rs.iml" filepath="$PROJECT_DIR$/rsp6-decoder-rs.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

409
Cargo.lock generated Normal file
View File

@ -0,0 +1,409 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "anyhow"
version = "1.0.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "base64ct"
version = "1.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf"
[[package]]
name = "byteorder"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "const-oid"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b"
[[package]]
name = "crypto-common"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array",
"typenum",
]
[[package]]
name = "der"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
dependencies = [
"const-oid",
"pem-rfc7468",
"zeroize",
]
[[package]]
name = "digest"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
dependencies = [
"const-oid",
"crypto-common",
]
[[package]]
name = "generic-array"
version = "0.14.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
dependencies = [
"typenum",
"version_check",
]
[[package]]
name = "getrandom"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
dependencies = [
"serde",
]
[[package]]
name = "itoa"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
dependencies = [
"spin",
]
[[package]]
name = "libc"
version = "0.2.139"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
[[package]]
name = "libm"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
[[package]]
name = "num-bigint-dig"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2399c9463abc5f909349d8aa9ba080e0b88b3ce2885389b60b993f39b1a56905"
dependencies = [
"byteorder",
"lazy_static",
"libm",
"num-integer",
"num-iter",
"num-traits",
"rand",
"smallvec",
"zeroize",
]
[[package]]
name = "num-integer"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-iter"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
dependencies = [
"autocfg",
"libm",
]
[[package]]
name = "pem-rfc7468"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac"
dependencies = [
"base64ct",
]
[[package]]
name = "pkcs1"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719"
dependencies = [
"der",
"pkcs8",
"spki",
"zeroize",
]
[[package]]
name = "pkcs8"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba"
dependencies = [
"der",
"spki",
]
[[package]]
name = "ppv-lite86"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "proc-macro2"
version = "1.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom",
]
[[package]]
name = "rsa"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c"
dependencies = [
"byteorder",
"digest",
"num-bigint-dig",
"num-integer",
"num-iter",
"num-traits",
"pkcs1",
"pkcs8",
"rand_core",
"signature",
"smallvec",
"subtle",
"zeroize",
]
[[package]]
name = "rsp6-decoder"
version = "0.1.0"
dependencies = [
"anyhow",
"hex",
"rand",
"rsa",
"serde",
"serde_json",
]
[[package]]
name = "ryu"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
[[package]]
name = "serde"
version = "1.0.152"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.152"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.91"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "signature"
version = "1.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
dependencies = [
"digest",
"rand_core",
]
[[package]]
name = "smallvec"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]]
name = "spin"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "spki"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b"
dependencies = [
"base64ct",
"der",
]
[[package]]
name = "subtle"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]]
name = "syn"
version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "typenum"
version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
[[package]]
name = "unicode-ident"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "zeroize"
version = "1.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"

14
Cargo.toml Normal file
View File

@ -0,0 +1,14 @@
[package]
name = "rsp6-decoder"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
serde = { version = "1.0", features = ["derive"] }
anyhow = "1.0"
serde_json = "1.0"
rsa = "0.7"
rand = "0.8"
hex = { version = "0.4", features = ["serde"] }

25
decode.py Normal file
View File

@ -0,0 +1,25 @@
import ccl_bplist
import json
f = open("/home/eta/Downloads/key_store.archive", "rb")
plist = ccl_bplist.load(f)
ccl_bplist.set_object_converter(ccl_bplist.NSKeyedArchiver_common_objects_convertor)
obj = ccl_bplist.deserialise_NsKeyedArchiver(plist)
ret = dict()
store = obj["store"]
for issuer in store:
print("issuer: " + issuer)
issobjs = []
fobs = store[issuer]["fob"]
if len(fobs) > 1:
print("WARNING: Issuer " + issuer + " has " + str(len(fobs)) + " keys!")
for fob in fobs:
issobj = dict()
for key in fob:
if key == '$class':
continue
issobj[key] = fob[key]
issobjs.append(issobj)
ret[issuer] = issobjs
f2 = open("./lol.json", "w")
f2.write(json.dumps(ret, indent=4, sort_keys=True, default=str))
f2.close()

566
keys.json Normal file
View File

@ -0,0 +1,566 @@
{
"AA": [
{
"is_private": false,
"is_test": false,
"issuer_id": "AA",
"modulus_hex": "9140AA61F7D9A2E943C0510BACA5FA9CA7D12D78E301A36D640F2D28D8C0AA4D6A7102555CECF138E467730B797509EC1AB5BBA77CA6384BC8F483F609B121E75AE42660EDFE15EF91ADD4DA68C355F830FAAC6FFB25FBCFE1E61C7AF37C4AE8C85E264C151BD9C9AA4DE41D2756A9E260C0CC89AE2ADDD19E452A675E88DA47",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2000-01-01 00:00:00",
"valid_until": "2999-12-31 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "AA",
"modulus_hex": "9140aa61f7d9a2e943c0510baca5fa9ca7d12d78e301a36d640f2d28d8c0aa4d6a7102555cecf138e467730b797509ec1ab5bba77ca6384bc8f483f609b121e75ae42660edfe15ef91add4da68c355f830faac6ffb25fbcfe1e61c7af37c4ae8c85e264c151bd9c9aa4de41d2756a9e260c0cc89ae2addd19e452a675e88da47",
"public_exponent_hex": "10001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCRQKph99mi6UPAUQuspfqcp9Et\neOMBo21kDy0o2MCqTWpxAlVc7PE45GdzC3l1CewatbunfKY4S8j0g/YJsSHnWuQm\nYO3+Fe+RrdTaaMNV+DD6rG/7JfvP4eYcevN8SujIXiZMFRvZyapN5B0nVqniYMDM\nia4q3dGeRSpnXojaRwIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2015-05-31 23:00:00",
"valid_until": "2040-12-31 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "AA",
"modulus_hex": "D31BB29968B34794F8362FCDAE4B559F1CB468D7F087155BB65625F808018303E2C54B35ACFD9C38903720A6DF0DBD6C327C2F65CD543ADAB17197690C06F01C4FBAA636512C8EBC46B6875071B6BEAD45750F71A1235D1F2A929A97B6D5EC796401B721E7331089E6939F60F3DE931D310D2876A5C016A2DD9DEE6BC54B0A03",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2018-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "AA",
"modulus_hex": "d31bb29968b34794f8362fcdae4b559f1cb468d7f087155bb65625f808018303e2c54b35acfd9c38903720a6df0dbd6c327c2f65cd543adab17197690c06f01c4fbaa636512c8ebc46b6875071b6bead45750f71a1235d1f2a929a97b6d5ec796401b721e7331089e6939f60f3de931d310d2876a5c016a2dd9dee6bc54b0a03",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2018-01-16 00:00:00",
"valid_until": "2999-12-31 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "AA",
"modulus_hex": "bd4bca07a1f9c5e091bdf0f492d74b33fa62dcfd8c632237de70c2a291b85f90bba41ce465a2519325ab99b1d3d6381509c394ee9e4af0db5363f18fbda1ca645c85491166ea41508be1ee5c9d834d079a6125f6df1e023eedd3bccb41c1bf12b8d6a343ae9db957b7d72a8171308dc635f191e2c7c36c41b551f301cfe76045",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2018-09-03 23:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"AC": [
{
"is_private": false,
"is_test": false,
"issuer_id": "AC",
"modulus_hex": "B4F9BAA16C9AE4FE386D3D93F4B74948043DB10F589376E389838ACC24D60F5FE9C5FC5BBDA32D5EA61C9873A5186B734814F98AF83F7B5E6D75E17E993F19586F9231CD4FD1F21CA6845DBB87DCD55EAD6C183D0C2CCC294269EA36818E38C36E49FB6CE2F2A01307656A9DB86CD7EC0962DBF2380CD58F5E2D06F55ADDD8AD",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2017-06-30 23:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"AO": [
{
"is_private": false,
"is_test": false,
"issuer_id": "AO",
"modulus_hex": "C603E50C87047BECB15165105D9DCF4FF93D302DD70BE259F5CB3F4481501769DE9E242261F7ECA11C8AD36697C3B3A336B4C792EC5AF037A943B2055C9C2217EA1449CE91064FCE37B87C43F15F14797AB3383A782D8FE87EAEC9C187A19FE149F06A1DFAC46C3A9856823A30C5190B83F162AFF7CF374530788EEE33733149",
"public_exponent_hex": "10001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGA+UMhwR77LFRZRBdnc9P+T0w\nLdcL4ln1yz9EgVAXad6eJCJh9+yhHIrTZpfDs6M2tMeS7FrwN6lDsgVcnCIX6hRJ\nzpEGT843uHxD8V8UeXqzODp4LY/ofq7JwYehn+FJ8God+sRsOphWgjowxRkLg/Fi\nr/fPN0UweI7uM3MxSQIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2008-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"AT": [
{
"is_private": false,
"is_test": false,
"issuer_id": "AT",
"modulus_hex": "DBF589744B93EC40F090F167B0F7F6E24CB18E85548D87ED8D17C30FF636B4A15A9901CCB1154A138265242A229915963611704EE975A0E12E4B34BA162C15E94E3B474940DEE620F2FF7DBDA491CC3E3A55B245608024063D8549FD49AAF57E9B9CE642B55C6900986A2265104303E5A4E7D21B02F9AC12AA4C8E06E35CA3B7",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2018-09-30 23:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"CB": [
{
"is_private": false,
"is_test": false,
"issuer_id": "CB",
"modulus_hex": "CC3087C83E7A0C410B186A4E298F1D3A203A7FBC3E29A8E90936D7382AFE8CD85B3091618F022A8EB46F23185C6C12724779EC28D40FF9399D702B81C404390621B72D229DBA1F0BE0F44E27CE98632D9742F7AA92B92F046604C737B1BB4D98AFA920D6F09860D40BE66952A5CAF814025EB14928A84CD3021086370007FC25",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2017-03-09 00:00:00",
"valid_until": "2999-12-31 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "CB",
"modulus_hex": "00cc3087c83e7a0c410b186a4e298f1d3a203a7fbc3e29a8e90936d7382afe8cd85b3091618f022a8eb46f23185c6c12724779ec28d40ff9399d702b81c404390621b72d229dba1f0be0f44e27ce98632d9742f7aa92b92f046604c737b1bb4d98afa920d6f09860d40be66952a5caf814025eb14928a84cd3021086370007fc25",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2017-05-31 23:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"CP": [
{
"is_private": false,
"is_test": false,
"issuer_id": "CP",
"modulus_hex": "B0C7F7159EEB81AA04B1A2E5D74A690AE381D68366972540802F8DCC57A9650AFCE70341AC59F06A05309EF779B269AC77C15E9CFC3173B1933A6C4E4552F26A4FA2A1F8ED023B5B1BA7F91B263F18391042F652E8EB9E92727BE19A7ECA9262A771525F0BCD1A5B02357DBD451814002EE7DFEAEBC1E6EBC02C10EA709610DF",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2020-07-22 23:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"CS": [
{
"is_private": false,
"is_test": false,
"issuer_id": "CS",
"modulus_hex": "F8025F582071D296CEA30CFA7D29AA58B206CE52783563B93E4A0BBA2558A29527DBB2D0B2D14E06DB2BB66BE5D890F9313DE8535338847017181F7E86BF43213FFCAD2F1F5A931362940468137775FF347CD1633C3AA5531B6B9C983801765053C5DA02331DDF74F0ED4886296F2EBCFCF3093F27EA9F7221DE64D5AD5230B3",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2018-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"CT": [
{
"is_private": false,
"is_test": false,
"issuer_id": "CT",
"modulus_hex": "CB606882FCE6FB77CC3D6A68EEB2E9457799CF19B954EC84BDB8BE88C7085FBCE15BCFADEFEADD55AD635EF0FEE4B44698397D8CBA5F4613FE8E89B15D37D7620C6007519BCDB590BC395E71B99E358C3C409CAA56C36D961A3133846D8F59C1A133C7BE74E8E768BD9288938BDD25EEDBF8BF07625578D26AACEF019036F85B",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2018-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"DF": [
{
"is_private": false,
"is_test": false,
"issuer_id": "DF",
"modulus_hex": "BD9E2181CCA3F4E33569D745AAF03D748A954F77431203EDBD8DCD0D44BA21996B26049FF85903273F8A78D27F4E471FB1A5834100217DC9A9C0CB7DF4A6B815C6E6A78D007F969B6F5ABC191AD6F7A49D94A61E51D0269C261616DA535DF6A254CB5B3AF4024A998EEB46A24A5824B13F0416FC9037E7C59B4DCF8797567407",
"public_exponent_hex": "25",
"public_key_x509": null,
"valid_from": "2020-06-29 23:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"EN": [
{
"is_private": false,
"is_test": false,
"issuer_id": "EN",
"modulus_hex": "DF32F851531CA6A9E5D318C1E2477346FD512E45CCBFDB893814BC7B358A8B2AE7450253832FE79D3C6DF613ABB73976B2638C19BA054046AED942C35A7F17BE4AAB5D84B7D27F8C1D3B21DA89F4A43571DF5192BB1576DFEF6EDFFAF54AEBA5B7D9B9157C3067C246B9091CE44E7B35249AD272E3487A5D3B85A38059ADA579",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2016-06-20 23:00:00",
"valid_until": "2026-06-18 23:00:00"
}
],
"EV": [
{
"is_private": false,
"is_test": false,
"issuer_id": "EV",
"modulus_hex": "bab8797afc2e41beb302f52f1476a1599c3a0de84d41a393bb1e2d6919b25578c69d0c85102c2ce11a46b753bdcb31eb31eb70a903a7801883ba7ff2d25bff7ad4f955718a2e11c46e1a1c2b4cf9192ebff06bbad7aae3cc9fe04da4854796a9d0165d8194614c24f1e1f7ff433e697daa602f6a7ace9a88f08930cc10a7b8a5",
"public_exponent_hex": "10001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6uHl6/C5BvrMC9S8UdqFZnDoN\n6E1Bo5O7Hi1pGbJVeMadDIUQLCzhGka3U73LMesx63CpA6eAGIO6f/LSW/961PlV\ncYouEcRuGhwrTPkZLr/wa7rXquPMn+BNpIVHlqnQFl2BlGFMJPHh9/9DPml9qmAv\nanrOmojwiTDMEKe4pQIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2000-01-01 00:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"F7": [
{
"is_private": false,
"is_test": false,
"issuer_id": "F7",
"modulus_hex": "BAC2E5720E629873767E334D55DF64B9FCF5DB592D53F54D153068C763B0F323317CE2ACF6610E48FCA00D174DE362B377A917580638E7DBF93D89FED035D8FCE7AA8D03F542E33BE5925D69EDF83B6E39B531BCBD9BC455AA2F973D4E8484E006939BC6035A04A9A8C3F1B7B7569676EE2B23BFE2E106B9E03B961386B6742F",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2016-11-02 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"FJ": [
{
"is_private": false,
"is_test": false,
"issuer_id": "FJ",
"modulus_hex": "BAC2E5720E629873767E334D55DF64B9FCF5DB592D53F54D153068C763B0F323317CE2ACF6610E48FCA00D174DE362B377A917580638E7DBF93D89FED035D8FCE7AA8D03F542E33BE5925D69EDF83B6E39B531BCBD9BC455AA2F973D4E8484E006939BC6035A04A9A8C3F1B7B7569676EE2B23BFE2E106B9E03B961386B6742F",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2016-05-31 23:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"GR": [
{
"is_private": false,
"is_test": false,
"issuer_id": "GR",
"modulus_hex": "C1A026E424DA6A9C622127C83DE4AB675F767B1EEC1A8CE3BB5DD58C457C9F91031365418CD4A69C0EE45D04C034C76EB3BA413FBF903AD56550A0CD2145BEC965BED68A0B6432621F48B1D7C744B25E450FF001155F6D7A10AB6AF1E88002CA5CA8797FDF16057F8A3562B8F532CA35AA2A2927E5F4CC4BDF87CFBC31E59EF5",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2021-04-22 23:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"HX": [
{
"is_private": false,
"is_test": false,
"issuer_id": "HX",
"modulus_hex": "F509DFA365C557847451F60E72C5C95DD7CBD4758FA4D4E415BFF81D2154D166FB9247BB2F026E1D24C636B0397CBA21F12184B926B51566EB89313D8EE9720D993FE0F44E52BDC9FA3965366E5C14C58B12D88918F1EA4878C9F2C87E4E71B32E1E8E5C50933CB013921CB2C57EBF660649EDAA55CA3FADB2DC8393C5569F79",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2018-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"IB": [
{
"is_private": false,
"is_test": false,
"issuer_id": "IB",
"modulus_hex": "CDCFD81DA220A00962C56098FADBBBC612BC7F7ACC23C34247916D58F96D5972BFB5F585752A318BCCD94DFC186CD8C2C6FDF27550CEDE3C79DC63932DB7E28DBE0C3796EE882E9C77E49434C3F256F2BCDF71982A1333B73A479C3545EE929EFAD4C9AC37AD5C727A3B35FBCCD5F18EB9F669470D30172A03F19C6F1EC075E1",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2022-09-14 23:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"OP": [
{
"is_private": false,
"is_test": false,
"issuer_id": "OP",
"modulus_hex": "BDF3E021442DCC02A2AAC8C172B2309B05A4298E9EBA53484BA45FA3933C6377FEFBEF0D8298EB5429E8365B83298A3FD5F939D32994D546DEA31641EEA032C695C71A1D1BAA3DF984C23BBFF0FAD017EF7774B65E83AF598D9860D466F43C938EC08CC83BC7B3B53E2F087D1A1CC6BC7CDB678B69A5EC360C898C702EE10889",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2019-07-28 23:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"OR": [
{
"is_private": false,
"is_test": false,
"issuer_id": "OR",
"modulus_hex": "c7122d349c1d242ceb45bb4d15b28973a9bee96e5cf74a16d78bfd950cf18ff58342cd69075e8b846584f6452d9948a1358a8c31e84f1ad8f1b96d44cf8f1bbe3166092d42353b16d7626e4e6e6ca2229faf609ecd3a4a9327b048f07fe3eb3ebc2342ff3f04b64c3527b9965d3ac21ae3b3ec127e388869d61c9c4cff886791",
"public_exponent_hex": "10001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHEi00nB0kLOtFu00Vsolzqb7p\nblz3ShbXi/2VDPGP9YNCzWkHXouEZYT2RS2ZSKE1iowx6E8a2PG5bUTPjxu+MWYJ\nLUI1OxbXYm5ObmyiIp+vYJ7NOkqTJ7BI8H/j6z68I0L/PwS2TDUnuZZdOsIa47Ps\nEn44iGnWHJxM/4hnkQIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2000-01-01 00:00:00",
"valid_until": "2017-09-29 23:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "OR",
"modulus_hex": "acd4b094f2b8d2ee89df368a384ae82279870060ae8c2e38bfaacc4f4054c60bac51c9957ea659f476b0ca66a1ccc7b01f9a4f1cad7dce95343a5e30ed48af4102b9e9b3c157fec86d274e4ecfd6e37563394f486e41721d45cd20efd7544383793605730e2183717704a64a1377b7c3644fec7041c0f4a90b09abcf545cf2df",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2017-09-30 23:00:00",
"valid_until": "1999-12-31 00:00:00"
}
],
"PC": [
{
"is_private": false,
"is_test": false,
"issuer_id": "PC",
"modulus_hex": "A63B6EAEFA5485C1EEEABBE29D7A3EC75E04F906D46073DE3364E29AD50831DD3E317FB02125C9264BC5D1133A43FD203F9F70B679ACC23F458B291C4F73691E99D1103752C1BAAA7A1268763CA1418BEA377A0FB11C68BE944753A5487D98EBC9E86A0966200E267A23F34A8C0493FC6608DAB8DCDDDDCC6FEB780419BD2F73",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2020-03-27 00:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"PI": [
{
"is_private": false,
"is_test": false,
"issuer_id": "PI",
"modulus_hex": "8219C18C01B859A708392F58B1BF76CD239926CCAB0DF1CA6088335A85D698BC15AE602D4C6B429A872D9B3E34827D61DCA930E535345E129E37DA63C79A1949D8E6C379D96E5D4CC1CB1EEDF884B3AAD24E9AC3713275A7B0BD7AD5E1322167108EB788D3A032BA4B0F14BF153E191F441BF7064EF6A7088F9373EB5AECA203",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2020-03-27 00:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"RC": [
{
"is_private": false,
"is_test": false,
"issuer_id": "RC",
"modulus_hex": "DBDA8187974002344899D09544C8254F07AEC89546BAB847184D904DF23D31D844A6C700187F9355C898112AA53F4DCC3B9972BE9F485E0092AF10F2A6985A0D158089B52A7715BFB4679F8A9C788157A58D798B98A614364357A44A26558502BE0FBC98F854871606641749C0E2EC1284274981529D1A6BA9F53B13CE5DB2C1",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2017-05-31 23:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"RE": [
{
"is_private": false,
"is_test": false,
"issuer_id": "RE",
"modulus_hex": "e8e9a0caf393f7fce5bea9d7f64842acd82aa50ad69244899328801b56b0ebc0044010a30261ce312170df9c752c311f2bd07f7d5f46d61fbcc642c2cfa2dbf7c1fb806dd46dbd6cb32822ec738d8a3b2260bb864b657706eeb0196ba9fab150209f336f5e918818a7255c84a1726abd0254c019a0bdcf6da27449957d4cb877",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2019-06-10 23:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"RP": [
{
"is_private": false,
"is_test": false,
"issuer_id": "RP",
"modulus_hex": "A4501098E22E825495AE4A51380F31CFF636D57A418768C3CC10E6D85A234183656D494FA9BAE70A38A4F95540D9FFD7EF5C6411ABC637921E80F03364571481D8CEDF3603635CD0D0EF09B7AF1F9256673696DFE2180EDA96776DB3C1421DF36828EE462C2EC52C018C1E22304BFE9283B829BA045D62DF93CCBA8D8040E459",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2018-02-06 00:00:00",
"valid_until": "2999-12-31 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "RP",
"modulus_hex": "a4501098e22e825495ae4a51380f31cff636d57a418768c3cc10e6d85a234183656d494fa9bae70a38a4f95540d9ffd7ef5c6411abc637921e80f03364571481d8cedf3603635cd0d0ef09b7af1f9256673696dfe2180eda96776db3c1421df36828ee462c2ec52c018c1e22304bfe9283b829ba045d62df93ccba8d8040e459",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2018-03-06 23:12:59",
"valid_until": "2040-12-31 00:00:00"
}
],
"SE": [
{
"is_private": false,
"is_test": false,
"issuer_id": "SE",
"modulus_hex": "b34383d130821eb8e7c47950fc72eb0d938ba07fb3648976273430120d3ae14eac508b3981b4e333fb464676496cbb12812da6bfc62a9c2681db6aaa6e5d37163747c25dae03cd2ed28a68ab887ca9f36e5af6515a765f5c8e51b007f6cee84e05aac787d10cda80dda3491ba9d5caf4cdf1c313363497cb3dd465d920afa1c1",
"public_exponent_hex": "10001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzQ4PRMIIeuOfEeVD8cusNk4ug\nf7NkiXYnNDASDTrhTqxQizmBtOMz+0ZGdklsuxKBLaa/xiqcJoHbaqpuXTcWN0fC\nXa4DzS7SimiriHyp825a9lFadl9cjlGwB/bO6E4FqseH0QzagN2jSRup1cr0zfHD\nEzY0l8s91GXZIK+hwQIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2000-01-01 00:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"SR": [
{
"is_private": false,
"is_test": false,
"issuer_id": "SR",
"modulus_hex": "d28b68816ee1e2f007d5f66276051ba3aa88e3c12798058e4f4959a75551a8459c1e30c9f777c19def531d40a7b6f584f443ded8255b2ab049200c8111fcb065c910838d5ecc78c3e12042b831044b0a14d01087cfbb56ccc2be5e88edc4b5d087097fb72d059d6c2d94e23eb6306b9f20be0ec769a7970ef603b820cd64c7f9",
"public_exponent_hex": "010001",
"public_key_x509": null,
"valid_from": "2017-07-31 23:00:00",
"valid_until": "2040-12-31 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "SR",
"modulus_hex": "D28B68816EE1E2F007D5F66276051BA3AA88E3C12798058E4F4959A75551A8459C1E30C9F777C19DEF531D40A7B6F584F443DED8255B2AB049200C8111FCB065C910838D5ECC78C3E12042B831044B0A14D01087CFBB56CCC2BE5E88EDC4B5D087097FB72D059D6C2D94E23EB6306B9F20BE0EC769A7970EF603B820CD64C7F9",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2017-08-08 23:00:00",
"valid_until": "2999-12-31 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "SR",
"modulus_hex": "A3E5DCEABF576BCE005F86A8E3800806EFBE344A85BCFE75E07579FC5B6DE5A40E78ADA1F952AB6B6DED2F5A214BAD30375EE501A7D1973FFBF60623442EB7D83BC8DB4977417AF4E8FFB76A45897E1B23929D39EA8EB49910BC227E80DB9E43AC79930C57C3FA8F29EB8C7EDC1B2400C80645AC45FF8E04EF685CF914C59BDB",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2020-03-12 00:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"T2": [
{
"is_private": false,
"is_test": false,
"issuer_id": "T2",
"modulus_hex": "A18211904E26A027776BBB8451879C2C05EF3B4F1CA19A05795E0EE728BA6721D356ED70BD6745E85BC0C9C198E797D7616003132CF52EB0AC83E435828E1916204D1D8B88FEBDFE815D11718477C96F477D813ECA91247DFAFBA06B23FFFD7B816F0B4BF7AD437B39A0A471F1EA7C5CAE9C2F0C842D14F090B5A7B7B8873029",
"public_exponent_hex": "10001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChghGQTiagJ3dru4RRh5wsBe87\nTxyhmgV5Xg7nKLpnIdNW7XC9Z0XoW8DJwZjnl9dhYAMTLPUusKyD5DWCjhkWIE0d\ni4j+vf6BXRFxhHfJb0d9gT7KkSR9+vugayP//XuBbwtL961DezmgpHHx6nxcrpwv\nDIQtFPCQtae3uIcwKQIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2008-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"TK": [
{
"is_private": false,
"is_test": false,
"issuer_id": "TK",
"modulus_hex": "BA2ADC5EB09EC28D42E9247B3120EF46245C14F815EE6B4BA87A657060EA556A409FA1FC76435CA4E65A293A9E034AAB5262BBF8F0A257C775196AB94E2E1CBA56B2B83B9D930EDA9B8F9766B484468E872761036531AF8DE0E6962B9F0AAE655C5C2786404FA0D395BD0C65E301ED1EC6B1285DB638BD08A2B601AF09A00301",
"public_exponent_hex": "010001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6KtxesJ7CjULpJHsxIO9GJFwU\n+BXua0uoemVwYOpVakCfofx2Q1yk5lopOp4DSqtSYrv48KJXx3UZarlOLhy6VrK4\nO52TDtqbj5dmtIRGjocnYQNlMa+N4OaWK58KrmVcXCeGQE+g05W9DGXjAe0exrEo\nXbY4vQiitgGvCaADAQIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2016-06-30 23:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"TR": [
{
"is_private": false,
"is_test": false,
"issuer_id": "TR",
"modulus_hex": "B29CC5905585CF5BB1E75C16B45DABC3623866F6926D7A701185536A6CAEBAAFF818017AFCEC11514CD90C2141FA1358DFA088460FA26C15BF02923B8C9E1CC155BFEBA580C4B5552CE3D6464D524878612EA2B8022CE8B02C79FAA71B7ADF8C345AE0261AFEEA42A04EA5848FD1D011791D5C171A5D417FD699C866B2017CCB",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2015-11-01 00:00:00",
"valid_until": "2040-12-12 00:00:00"
}
],
"TT": [
{
"is_private": false,
"is_test": true,
"issuer_id": "TT",
"modulus_hex": "C8D75C530F796A893FC2FECE2AE2037A815502CFB32C2C0CF25FE0FEDDE58D5DDA86FF673C17BC1272333D4D3D14E7A71ECAF054A6DE808968CDEF40CB1A5FAF8AE248E46497611F948ACBB12996C38FB22F9427D8D932B11F78958E53EF9275EAED2153C411192CF8BC804DF7784BE07EF68ED06738C238F96ACEA5EF740C35",
"public_exponent_hex": "10001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI11xTD3lqiT/C/s4q4gN6gVUC\nz7MsLAzyX+D+3eWNXdqG/2c8F7wScjM9TT0U56ceyvBUpt6AiWjN70DLGl+viuJI\n5GSXYR+UisuxKZbDj7IvlCfY2TKxH3iVjlPvknXq7SFTxBEZLPi8gE33eEvgfvaO\n0Gc4wjj5as6l73QMNQIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2009-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "TT",
"modulus_hex": "9774021C2BAD13DC31C1EC8192E084D60D82DC327016862E95ED093AD41CC9082A6015631C8E6B8148A15EC9856E2A5E16519E52EDC0C3DF2836935055EF53E1738293256464F0AD4AE3C01AE3CDD910CB1CBDC0AB35C1AD8CF0A9376B3921DEE3D1FC26FFA3409C4DC8F813A5E326D78C63ABA9A59120D74043DBA1141047AF",
"public_exponent_hex": "10001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCXdAIcK60T3DHB7IGS4ITWDYLc\nMnAWhi6V7Qk61BzJCCpgFWMcjmuBSKFeyYVuKl4WUZ5S7cDD3yg2k1BV71Phc4KT\nJWRk8K1K48Aa483ZEMscvcCrNcGtjPCpN2s5Id7j0fwm/6NAnE3I+BOl4ybXjGOr\nqaWRINdAQ9uhFBBHrwIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2010-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"TV": [
{
"is_private": false,
"is_test": false,
"issuer_id": "TV",
"modulus_hex": "B77951EF77B2CFF362008609B20BA37408D8E412CA6B3ACB36242C7C929F707B5905BE779020A84CA2055FE4B3BAAD455A9B865290D36C2C0B982F79A8D875C7E2BEFB1954B95E9B1D5830DAE53899517D8A631442A5E8F94C1567B1A205458BF980BB3CBD290451915AF9A0A500D65D174BF25AA7EDED8502C6FA7E5AD48777",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2018-05-21 23:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"UC": [
{
"is_private": false,
"is_test": false,
"issuer_id": "UC",
"modulus_hex": "B694677D39F4E3442E336894984E3A5B6B784BA5C55DA738F9883F217F5A54E2FD96E67C2C67B2E652CCC745927A42081B7DD56FEA960A366E3D2DF9FBE6EC7F02951ACA79484AA89454ECFC935D652C668DE0E41DEDE3A9EC838C6C4E46F185557BEE0E863A40CB905D4B98780C15E49A2FBF5DB7EF95ED44A5D73BFE08CDBB",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2022-07-07 23:00:00",
"valid_until": "2999-12-31 00:00:00"
}
],
"VE": [
{
"is_private": false,
"is_test": true,
"issuer_id": "VE",
"modulus_hex": "CE893969CE6C4D53484D240F3810D5B3481E2BE2F342B91B436DA63613FCC741BCF7CC63F127B0AC59291779F78A7261796162A2993D78230B0E29F3FE90C79AD0CCE2D3D820FD80E4CEF665A898AE847D25E428890CB081E8030F5661DC1554EEB8253A91066CB8A6C3C065F28781D7DEC9026337891A3B3A25DB58835462DD",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2015-09-30 23:00:00",
"valid_until": "2015-12-12 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "VE",
"modulus_hex": "bab8797afc2e41beb302f52f1476a1599c3a0de84d41a393bb1e2d6919b25578c69d0c85102c2ce11a46b753bdcb31eb31eb70a903a7801883ba7ff2d25bff7ad4f955718a2e11c46e1a1c2b4cf9192ebff06bbad7aae3cc9fe04da4854796a9d0165d8194614c24f1e1f7ff433e697daa602f6a7ace9a88f08930cc10a7b8a5",
"public_exponent_hex": "10001",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6uHl6/C5BvrMC9S8UdqFZnDoN\n6E1Bo5O7Hi1pGbJVeMadDIUQLCzhGka3U73LMesx63CpA6eAGIO6f/LSW/961PlV\ncYouEcRuGhwrTPkZLr/wa7rXquPMn+BNpIVHlqnQFl2BlGFMJPHh9/9DPml9qmAv\nanrOmojwiTDMEKe4pQIDAQAB\n-----END PUBLIC KEY-----",
"valid_from": "2018-01-01 00:00:00",
"valid_until": "2040-12-12 00:00:00"
},
{
"is_private": false,
"is_test": false,
"issuer_id": "VE",
"modulus_hex": "B29F9C93CFF2146D5B1009F08868BF054C42C7CC9F042AB5F97AACBC86C3E0B9303EBEF7EC30DD8879EBA527E40127E67FBEEFF9196E48EDA77A7EA627DE6771DBDD34C5036271DA5B4F00FE906CE52616BACC72345D132EE2CECFE389FF601C7395E6C7C4467D54596B9A0E35DAD538EC5C8521B1AD81F1EE63ADC9F5B938B3",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2018-03-01 00:00:00",
"valid_until": "2040-12-12 00:00:00"
}
],
"YO": [
{
"is_private": false,
"is_test": false,
"issuer_id": "YO",
"modulus_hex": "F0C8F6058674FC0636F314C414B848CB022CE2519618404350E6D609EF24A859D43E06389733379429227F84968EE90C56A699A2ED8DFFAB216BE60DF3AC51154B0D72DADCCE1B0600851AF7F9AA47783ABCB8F54C32C7619E9F1DA64F4C394F106CFAD78E7131A56123A7068485EAAF579997CE0975AD7D44CA89695ECAD533",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2020-11-01 00:00:00",
"valid_until": "2049-12-31 00:00:00"
}
],
"ZE": [
{
"is_private": false,
"is_test": false,
"issuer_id": "ZE",
"modulus_hex": "ACC795572F2E99B99EF68480B41122C0ED99B7C3A01D9C6BCDCBA5BE70CD8F0FDB7BDA8C9D8B32C09C40812ACB03BDBCB45861EE56AC76DD86190020DFA3E406F5B2778A42E9909D2C3D276A8A6A18E6880073B40B9E03E814A57A9FFAF225FB3C747F33DFDDE93166A8D1E6A74BADB33AA3EEA36BE6F509D60CFDE4B882EEE7",
"public_exponent_hex": "23",
"public_key_x509": "-----BEGIN PUBLIC KEY-----\nMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCsx5VXLy6ZuZ72hIC0ESLA7Zm3\nw6AdnGvNy6W+cM2PD9t72oydizLAnECBKssDvby0WGHuVqx23YYZACDfo+QG9bJ3\nikLpkJ0sPSdqimoY5ogAc7QLngPoFKV6n/ryJfs8dH8z393pMWao0eanS62zOqPu\no2vm9QnWDP3kuILu5wIBIw==\n-----END PUBLIC KEY-----",
"valid_from": "2013-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"ZS": [
{
"is_private": false,
"is_test": false,
"issuer_id": "ZS",
"modulus_hex": "95ACB49DC7C73B444863A1F325879B6FD996654545BC99CEE81BF1B8C10951314BE28BA391AEE7DB921F9AC286CB7C2AAAFB9343CF4034AD00415625FF5DA291F165B8F260A818BA15DCB741516A40459EFC6AC4050AC34859236EB7C0DCB56EB44E36A32BD756772E20E891C42ED45B0341B43A5D7733DEB5FE67356B313DA5",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2019-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"ZT": [
{
"is_private": false,
"is_test": false,
"issuer_id": "ZT",
"modulus_hex": "DDAC4058B60394559C7480D5B0615B8265C7FC27DA6723C583B560A45C0BED0DA9CD48F98B39FD650A6413512F54985D7906870272726BF2BEAE4363A2A9F998850E5759D752A4012E720BD2421A8D6341DFC43BE7E0BD44F7BB446AA7DC8557780AD3D6D648B143CD41A381F3E94E99837A81428CFEF438D324AAE388A4A9D3",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2016-12-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
],
"ZX": [
{
"is_private": false,
"is_test": false,
"issuer_id": "ZX",
"modulus_hex": "ADEB299B0F2A5A49DE80AC9CC840E7F31390FE3D0BF43606676FD9E3150DA51F9D0370D15F2EA43005A85CC73EB8B65780C0DF870A627D4CFB8BE9995828F174650526D26AF3E3D84187CB631C620C00BB2E8D1E503D833D1EAF6F6F495A1C2DFC9931D5AD163719DA431AB9A7391094277DD59A31A2C3C7792F80BEE97BA4C3",
"public_exponent_hex": "10001",
"public_key_x509": null,
"valid_from": "2018-01-01 00:00:00",
"valid_until": "2040-12-31 00:00:00"
}
]
}

12
rsp6-decoder-rs.iml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="RUST_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

52
src/keys.rs Normal file
View File

@ -0,0 +1,52 @@
//! Decoding and using the RSA public keys needed to decrypt the ticket data.
use rsa::{BigUint, RsaPublicKey};
use serde::{Deserialize, Deserializer};
use std::collections::HashMap;
static KEYS_JSON: &'static str = include_str!("../keys.json");
fn deserialize_exponent_hex<'de, D>(deserializer: D) -> Result<u64, D::Error>
where
D: Deserializer<'de>,
{
let buf = String::deserialize(deserializer)?;
u64::from_str_radix(&buf, 16).map_err(serde::de::Error::custom)
}
#[derive(Deserialize, Debug)]
pub struct IssuerKey {
is_private: bool,
is_test: bool,
issuer_id: String,
#[serde(rename = "modulus_hex", deserialize_with = "hex::serde::deserialize")]
pub modulus: Vec<u8>,
pub public_exponent_hex: String,
public_key_x509: Option<String>,
}
#[derive(Debug)]
pub struct IssuerKeyStore {
pub keys: HashMap<String, Vec<IssuerKey>>,
}
impl IssuerKeyStore {
pub fn new() -> Self {
let keys = serde_json::from_str(KEYS_JSON).expect("failed to parse embedded keys.json");
Self { keys }
}
/*
pub fn get_key(&self, issuer: &str) -> Vec<RsaPublicKey> {
let issuer_key = match self.keys.get(issuer) {
Some(x) => x,
None => return vec![],
};
let modulus = BigUint::from_bytes_be(&issuer_key.modulus);
let exponent = BigUint::from(issuer_key.public_exponent);
RsaPublicKey::new(modulus, exponent).expect("failed to parse embedded RSA public key")
}
*/
}

91
src/main.rs Normal file
View File

@ -0,0 +1,91 @@
use crate::keys::IssuerKeyStore;
use anyhow::anyhow;
use rsa::BigUint;
use std::fs;
mod keys;
fn base26_decode(input: &str) -> BigUint {
let mut out = BigUint::new(Vec::new());
for val in input.as_bytes().iter().rev() {
out *= 26u32;
out += *val - b'A';
}
BigUint::from_bytes_le(&out.to_bytes_be())
}
/*
fn base26_decode(input: &str) -> Vec<u8> {
let mut alphabets = input
.chars()
.map(|x| (u32::from(x) - u32::from('A')) as u8)
.collect::<Vec<_>>();
let length = (((alphabets.len() * 500) + 851) - 1) / 851;
let mut ret = vec![0u8; length];
for c in ret.iter_mut() {
let mut k = 0;
for j in (0..=alphabets.len()).rev() {
let a = (k * 26) + alphabets[j];
alphabets[j] = a;
k = a;
}
*c = k;
}
ret
}
*/
fn strip_padding(tkt: &[u8]) -> Option<&[u8]> {
if tkt.is_empty() || tkt[0] != 1 {
return None;
}
let tkt = &tkt[1..];
let mut iter = tkt.iter();
loop {
match iter.next()? {
0 => {
return Some(iter.as_slice());
}
255 => {}
_ => return None,
}
}
}
fn main() -> anyhow::Result<()> {
let iks = IssuerKeyStore::new();
println!("[+] Loaded {} public keys!", iks.keys.len());
println!("[+] Reading ticket.dat...");
let ticket = fs::read_to_string("./ticket.dat")?;
let issuer_id = &ticket[13..15];
println!("[+] Ticket issuer: {}", issuer_id);
let ticket = base26_decode(&ticket[15..]);
let keys = iks
.keys
.get(issuer_id)
.ok_or_else(|| anyhow!("unknown issuer ID {}", issuer_id))?;
for key in keys {
let modulus = BigUint::from_bytes_be(&key.modulus);
let exponent = BigUint::parse_bytes(key.public_exponent_hex.as_bytes(), 16)
.ok_or_else(|| anyhow!("failed to parse exponent in key"))?;
let message = ticket.modpow(&exponent, &modulus).to_bytes_be();
if let Some(unpadded) = strip_padding(&message) {
println!("done! {:?}", unpadded);
return Ok(());
} else {
println!("failed decrypt: {:?}", message);
}
}
Err(anyhow!("no valid decryptions"))
}
#[cfg(test)]
mod test {
#[test]
fn test_base26() {
assert_eq!(
super::base26_decode("RANEBZCYPNQVMMYJBOJBONYSIYXTREYFSHTZFZEXWTVBNXJBFVOFBMXVQPZTFWVYSWYKINRXRVDCCUWUERKQZKYBPVIIAPJOOFJJXUBFGNVXGXTCFPBHXYVPEKWIURBEOYTYNZUXWVIXHAODACOQLZEQKRUNGWSJHIIWOYSNXJKVYWIGLWCIZKAHFKKAKRDUQSQBGEJMOFCSHSKXSFDDKYCFQI").to_bytes_be(),
[53, 242, 184, 141, 14, 99, 169, 215, 200, 223, 85, 250, 45, 253, 184, 100, 225, 124, 82, 70, 138, 222, 246, 185, 192, 129, 247, 218, 24, 26, 249, 112, 74, 225, 71, 139, 27, 50, 218, 11, 93, 238, 232, 163, 151, 68, 159, 146, 80, 133, 11, 45, 57, 245, 163, 117, 218, 11, 187, 246, 18, 147, 88, 171, 133, 216, 166, 47, 232, 246, 198, 170, 99, 36, 120, 114, 73, 207, 19, 218, 202, 146, 158, 223, 107, 234, 171, 172, 20, 189, 133, 246, 192, 248, 57, 111, 65, 65, 135, 64, 241, 99, 87, 107, 75, 40, 224, 223, 100, 53, 180, 212, 53, 200, 172, 117, 127, 248, 193, 0, 147, 167, 222, 81, 135, 158, 135, 137]
)
}
}

1
ticket.dat Normal file
View File

@ -0,0 +1 @@
06DNQL8KK5H00TTRANEBZCYPNQVMMYJBOJBONYSIYXTREYFSHTZFZEXWTVBNXJBFVOFBMXVQPZTFWVYSWYKINRXRVDCCUWUERKQZKYBPVIIAPJOOFJJXUBFGNVXGXTCFPBHXYVPEKWIURBEOYTYNZUXWVIXHAODACOQLZEQKRUNGWSJHIIWOYSNXJKVYWIGLWCIZKAHFKKAKRDUQSQBGEJMOFCSHSKXSFDDKYCFQI