blob: c9b7f3737ce46b3000ed0439b17a7678e9fc7314 [file] [log] [blame]
Mate Toth-Pal51b61982022-03-17 14:19:30 +01001#!/usr/bin/env python3
2#-------------------------------------------------------------------------------
3# Copyright (c) 2019-2022, Arm Limited. All rights reserved.
4#
5# SPDX-License-Identifier: BSD-3-Clause
6#
7#-------------------------------------------------------------------------------
8
Mate Toth-Palb9057ff2022-04-29 16:03:21 +02009"""CLI script for decompiling a cbor formatted IAT file"""
10
Mate Toth-Pal51b61982022-03-17 14:19:30 +010011import argparse
Mate Toth-Palb9057ff2022-04-29 16:03:21 +020012import logging
Mate Toth-Pal51b61982022-03-17 14:19:30 +010013import sys
14
15import yaml
Mate Toth-Pal51b61982022-03-17 14:19:30 +010016from iatverifier.psa_iot_profile1_token_verifier import PSAIoTProfile1TokenVerifier
Tamas Ban1e7944a2022-07-04 13:09:03 +020017from iatverifier.psa_2_0_0_token_verifier import PSA_2_0_0_TokenVerifier
Mate Toth-Palb9057ff2022-04-29 16:03:21 +020018from iatverifier.attest_token_verifier import AttestationTokenVerifier
Mate Toth-Pal5ebca512022-03-24 16:45:51 +010019from iatverifier.cca_token_verifier import CCATokenVerifier, CCAPlatformTokenVerifier
Mate Toth-Pal51b61982022-03-17 14:19:30 +010020
21
22if __name__ == '__main__':
Mate Toth-Palb9057ff2022-04-29 16:03:21 +020023 logging.basicConfig(level=logging.INFO)
Mate Toth-Pal6978f7c2022-03-30 14:38:55 +020024
25 token_verifiers = {
26 "PSA-IoT-Profile1-token": PSAIoTProfile1TokenVerifier,
Mate Toth-Pal5ebca512022-03-24 16:45:51 +010027 "CCA-token": CCATokenVerifier,
28 "CCA-plat-token": CCAPlatformTokenVerifier,
Tamas Ban1e7944a2022-07-04 13:09:03 +020029 "PSA-2.0.0-token": PSA_2_0_0_TokenVerifier,
Mate Toth-Pal6978f7c2022-03-30 14:38:55 +020030 }
31
Mate Toth-Pal51b61982022-03-17 14:19:30 +010032 parser = argparse.ArgumentParser()
33 parser.add_argument('source', help='A compiled COSE IAT token.')
34 parser.add_argument('-o', '--outfile',
35 help='''Output file for the depompiled claims. If this is not
36 specified, the claims will be written to standard output.''')
Mate Toth-Pal6978f7c2022-03-30 14:38:55 +020037 parser.add_argument('-t', '--token-type',
38 help='''The type of the Token.''',
39 choices=token_verifiers.keys(),
40 required=True)
Mate Toth-Pal51b61982022-03-17 14:19:30 +010041 args = parser.parse_args()
42
Mate Toth-Palb9057ff2022-04-29 16:03:21 +020043 verifier_class = token_verifiers[args.token_type]
44 if verifier_class == PSAIoTProfile1TokenVerifier:
45 verifier = PSAIoTProfile1TokenVerifier(
46 method=AttestationTokenVerifier.SIGN_METHOD_SIGN1,
47 cose_alg=AttestationTokenVerifier.COSE_ALG_ES256,
Mate Toth-Pal5ebca512022-03-24 16:45:51 +010048 signing_key=None,
49 configuration=None)
50 elif verifier_class == CCATokenVerifier:
51 realm_token_method = AttestationTokenVerifier.SIGN_METHOD_SIGN1
52 platform_token_method = AttestationTokenVerifier.SIGN_METHOD_SIGN1
53 realm_token_cose_alg = AttestationTokenVerifier.COSE_ALG_ES384
54 platform_token_cose_alg = AttestationTokenVerifier.COSE_ALG_ES384
55 verifier = CCATokenVerifier(
56 realm_token_method=realm_token_method,
57 realm_token_cose_alg=realm_token_cose_alg,
58 realm_token_key=None,
59 platform_token_method=platform_token_method,
60 platform_token_cose_alg=platform_token_cose_alg,
61 platform_token_key=None,
62 configuration=None)
63 elif verifier_class == CCAPlatformTokenVerifier:
64 cose_alg = AttestationTokenVerifier.COSE_ALG_ES384
65 verifier = CCAPlatformTokenVerifier(
66 method=AttestationTokenVerifier.SIGN_METHOD_SIGN1,
67 cose_alg=cose_alg,
68 signing_key=None,
69 configuration=None,
70 necessity=None)
Tamas Ban1e7944a2022-07-04 13:09:03 +020071 elif verifier_class == PSA_2_0_0_TokenVerifier:
72 verifier = PSA_2_0_0_TokenVerifier(
73 method=AttestationTokenVerifier.SIGN_METHOD_SIGN1,
74 cose_alg=AttestationTokenVerifier.COSE_ALG_ES256,
75 signing_key=None,
76 configuration=None)
Mate Toth-Palb9057ff2022-04-29 16:03:21 +020077 else:
78 logging.error(f'Invalid token type:{verifier_class}\n\t')
79 sys.exit(1)
Mate Toth-Pal51b61982022-03-17 14:19:30 +010080 with open(args.source, 'rb') as fh:
Mate Toth-Palb9057ff2022-04-29 16:03:21 +020081 token_map = verifier.parse_token(
82 token=fh.read(),
83 verify=False,
84 check_p_header=False,
85 lower_case_key=True)
Mate Toth-Pal51b61982022-03-17 14:19:30 +010086
87 if args.outfile:
Mate Toth-Palb9057ff2022-04-29 16:03:21 +020088 with open(args.outfile, 'w', encoding="UTF-8") as wfh:
Mate Toth-Pal51b61982022-03-17 14:19:30 +010089 yaml.dump(token_map, wfh)
90 else:
91 yaml.dump(token_map, sys.stdout)