From 814b93bd43e7cc4877653816b0798bf5c6794f7a Mon Sep 17 00:00:00 2001 From: Dario Castellano Date: Tue, 22 Jul 2025 12:54:14 +0200 Subject: [PATCH 1/3] fix: verifier with multiple certificate. --- .gitignore | 2 +- pymdoccbor/mso/verifier.py | 24 ++++++++++++++++++++---- pymdoccbor/tests/ic_cborservice_test.py | 14 ++++++++++++++ requirements-dev.txt | 3 ++- 4 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 pymdoccbor/tests/ic_cborservice_test.py diff --git a/.gitignore b/.gitignore index 68bc17f..2dc53ca 100644 --- a/.gitignore +++ b/.gitignore @@ -157,4 +157,4 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ +.idea/ diff --git a/pymdoccbor/mso/verifier.py b/pymdoccbor/mso/verifier.py index f8661de..dfcf531 100644 --- a/pymdoccbor/mso/verifier.py +++ b/pymdoccbor/mso/verifier.py @@ -5,7 +5,7 @@ from pycose.keys import CoseKey, EC2Key from pycose.messages import Sign1Message -from typing import Union +from typing import Union, Any from pymdoccbor.exceptions import ( MsoX509ChainNotFound, @@ -75,15 +75,31 @@ def payload_as_dict(self): ) @property - def raw_public_keys(self) -> bytes: + def raw_public_keys(self) -> list[Any]: """ it returns the public key extract from x509 certificates looking to both phdr and uhdr """ - _mixed_heads = self.object.phdr.items() | self.object.uhdr.items() + # _mixed_heads = self.object.phdr.items() | self.object.uhdr.items() + + merged = self.object.phdr.copy() + merged.update(self.object.uhdr) + _mixed_heads = merged.items() for h, v in _mixed_heads: if h.identifier == 33: - return list(self.object.uhdr.values()) + # return list(self.object.uhdr.values()) + if isinstance(v, bytes): + return [v] + elif isinstance(v, list): + return v + elif isinstance(v, dict): + return [v] + else: + logger.warning( + f"Unexpected type for public key: {type(v)}. " + "Expected bytes, list or dict." + ) + continue raise MsoX509ChainNotFound( "I can't find any valid X509certs, identified by label number 33, " diff --git a/pymdoccbor/tests/ic_cborservice_test.py b/pymdoccbor/tests/ic_cborservice_test.py new file mode 100644 index 0000000..b3a5d29 --- /dev/null +++ b/pymdoccbor/tests/ic_cborservice_test.py @@ -0,0 +1,14 @@ +from pymdoccbor.mso.verifier import MsoVerifier + +import binascii +import cbor2 + +# ISSUED_MDOC="a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a1716f72672e69736f2e31383031332e352e3186d8185863a4686469676573744944006672616e646f6d58208798645b20ea200e19ffabac92624bee6aec63aceedecfb1b80077d22bfc20e971656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d818586ca4686469676573744944036672616e646f6d5820b23f627e8999c706df0c0a4ed98ad74af988af619b4bb078b89058553f44615d71656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818586da4686469676573744944046672616e646f6d5820c7ffa307e5de921e67ba5878094787e8807ac8e7b5b3932d2ce80f00f3e9abaf71656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d818586da4686469676573744944076672616e646f6d582026052a42e5880557a806c1459af3fb7eb505d3781566329d0b604b845b5f9e6871656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569313233343536373839d818590471a4686469676573744944086672616e646f6d5820d094dad764a2eb9deb5210e9d899643efbd1d069cc311d3295516ca0b024412d71656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c7565590412ffd8ffe000104a46494600010101009000900000ffdb004300130d0e110e0c13110f11151413171d301f1d1a1a1d3a2a2c2330453d4947443d43414c566d5d4c51685241435f82606871757b7c7b4a5c869085778f6d787b76ffdb0043011415151d191d381f1f38764f434f7676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676ffc00011080018006403012200021101031101ffc4001b00000301000301000000000000000000000005060401020307ffc400321000010303030205020309000000000000010203040005110612211331141551617122410781a1163542527391b2c1f1ffc4001501010100000000000000000000000000000001ffc4001a110101010003010000000000000000000000014111213161ffda000c03010002110311003f00a5bbde22da2329c7d692bc7d0d03f52cfb0ff75e7a7ef3e7709723a1d0dae146ddfbb3c039ce07ad2bd47a7e32dbb8dd1d52d6ef4b284f64a480067dfb51f87ffb95ff00eb9ff14d215de66af089ce44b7dbde9cb6890a2838eddf18078f7add62d411ef4db9b10a65d6b95a147381ea0d495b933275fe6bba75c114104a8ba410413e983dff004f5af5d34b4b4cde632d0bf1fd1592bdd91c6411f3934c2fa6af6b54975d106dcf4a65ae56e856001ebc03c7ce29dd9eef1ef10fc447dc9da76ad2aee93537a1ba7e4f70dd8eff0057c6dffb5e1a19854a83758e54528750946ec6704850cd037bceb08b6d7d2cc76d3317fc7b5cc04fb6707269c5c6e0c5b60ae549242123b0e493f602a075559e359970d98db89525456b51c951c8afa13ea8e98e3c596836783d5c63f5a61a99fdb7290875db4be88ab384bbbbbfc7183fdeaa633e8951db7da396dc48524fb1a8bd611a5aa2a2432f30ab420a7a6d3240c718cf031fa9ef4c9ad550205aa02951df4a1d6c8421b015b769db8c9229837ea2be8b1b0d39d0eba9c51484efdb8c0efd8d258daf3c449699f2edbd4584e7af9c64e3f96b9beb28d4ac40931e6478c8e76a24a825449501d867d2b1dcdebae99b9c752ae4ecd6dde4a179c1c1e460938f9149ef655e515c03919a289cb3dca278fb7bf177f4faa829dd8ce3f2ac9a7ecde490971fafd7dce15eed9b71c018c64fa514514b24e8e4f8c5c9b75c1e82579dc1233dfec08238f6add62d391acc1c5256a79e706d52d431c7a0145140b9fd149eb3a60dc5e88cbbc2da092411e9dc71f39a7766b447b344e847dcac9dcb5abba8d145061d43a6fcf1e65cf15d0e90231d3dd9cfe62995c6dcc5ca12a2c904a15f71dd27d451453e09d1a21450961cbb3ea8a956433b781f1ce33dfed54f0e2b50a2b71d84ed6db18028a28175f74fc6bda105c529a791c25c4f3c7a11f71586268f4a66b726e33de9ea6f1b52b181c760724e47b514520a5a28a283ffd9d81858ffa4686469676573744944096672616e646f6d58204599f81beaa2b20bd0ffcc9aa03a6f985befab3f6beaffa41e6354cdb2ab2ce471656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d32306a697373756572417574688443a10126a118215901d2308201ce30820174a003020102021401ec51916031e6898e8fc7864af5e6d5f86602b6300a06082a8648ce3d04030230233114301206035504030c0b75746f7069612069616361310b3009060355040613025553301e170d3230313030313030303030305a170d3231313030313030303030305a30213112301006035504030c0975746f706961206473310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d03010703420004ace7ab7340e5d9648c5a72a9a6f56745c7aad436a03a43efea77b5fa7b88f0197d57d8983e1b37d3a539f4d588365e38cbbf5b94d68c547b5bc8731dcd2f146ba38187308184301e0603551d120417301581136578616d706c65406578616d706c652e636f6d301c0603551d1f041530133011a00fa00d820b6578616d706c652e636f6d301d0603551d0e0416041414e29017a6c35621ffc7a686b7b72db06cd12351300e0603551d0f0101ff04040302078030150603551d250101ff040b3009060728818c5d050102300a06082a8648ce3d0403020348003045022100bac6f93a8bacf0fc9aeac1c89a5c9293af2076942e9e972882a113640330702702207b7b73c0444371a4c94c9c888ddfe553ffde84ca492fd64dfbf02ad46a31cbc85903a2d81859039da66776657273696f6e63312e306f646967657374416c676f726974686d675348412d3235366c76616c756544696765737473a2716f72672e69736f2e31383031332e352e31ad00582075167333b47b6c2bfb86eccc1f438cf57af055371ac55e1e359e20f254adcebf01582067e539d6139ebd131aef441b445645dd831b2b375b390ca5ef6279b205ed45710258203394372ddb78053f36d5d869780e61eda313d44a392092ad8e0527a2fbfe55ae0358202e35ad3c4e514bb67b1a9db51ce74e4cb9b7146e41ac52dac9ce86b8613db555045820ea5c3304bb7c4a8dcb51c4c13b65264f845541341342093cca786e058fac2d59055820fae487f68b7a0e87a749774e56e9e1dc3a8ec7b77e490d21f0e1d3475661aa1d0658207d83e507ae77db815de4d803b88555d0511d894c897439f5774056416a1c7533075820f0549a145f1cf75cbeeffa881d4857dd438d627cf32174b1731c4c38e12ca936085820b68c8afcb2aaf7c581411d2877def155be2eb121a42bc9ba5b7312377e068f660958200b3587d1dd0c2a07a35bfb120d99a0abfb5df56865bb7fa15cc8b56a66df6e0c0a5820c98a170cf36e11abb724e98a75a5343dfa2b6ed3df2ecfbb8ef2ee55dd41c8810b5820b57dd036782f7b14c6a30faaaae6ccd5054ce88bdfa51a016ba75eda1edea9480c5820651f8736b18480fe252a03224ea087b5d10ca5485146c67c74ac4ec3112d4c3a746f72672e69736f2e31383031332e352e312e5553a4005820d80b83d25173c484c5640610ff1a31c949c1d934bf4cf7f18d5223b15dd4f21c0158204d80e1e2e4fb246d97895427ce7000bb59bb24c8cd003ecf94bf35bbd2917e340258208b331f3b685bca372e85351a25c9484ab7afcdf0d2233105511f778d98c2f544035820c343af1bd1690715439161aba73702c474abf992b20c9fb55c36a336ebe01a876d6465766963654b6579496e666fa1696465766963654b6579a40102200121582096313d6c63e24e3372742bfdb1a33ba2c897dcd68ab8c753e4fbd48dca6b7f9a2258201fb3269edd418857de1b39a4e4a44b92fa484caa722c228288f01d0c03a2c3d667646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c76616c6964697479496e666fa3667369676e6564c074323032302d31302d30315431333a33303a30325a6976616c696446726f6dc074323032302d31302d30315431333a33303a30325a6a76616c6964556e74696cc074323032312d31302d30315431333a33303a30325a5840cff12c17d4739aba806035a9cb2b34ae8a830cef4f329289f9a3ebd302dd6b99c584068257569397b92ba9aa5128554eb05d1273dafea313da4aff6b01a5fb3f6c6465766963655369676e6564a26a6e616d65537061636573d81841a06a64657669636541757468a1696465766963654d61638443a10105a0f65820200d73ded787c64652dc8ee743ea83a5260d5a3283fddc919b7b9cfb486addb26673746174757300" +ISSUED_MDOC="a26a697373756572417574688443a10126a118218359022d30820229308201cfa00302010202147be25ed81be4b1517138029d51cfaac7cc9a1b50300a06082a8648ce3d0403023063310b300906035504061302495431193017060355040a0c10496f5420496e666f43657274205370413123302106035504030c1a496f54205348415245442049505a532043424f52204543445341311430120603550405130b3037393435323131303036301e170d3235303632303037343931365a170d3330303631393037343931355a30453115301306035504030c0c43424f522053657276696365310b3009060355040613024954310c300a060355040b0c03496f543111300f060355040a0c08496e666f436572743059301306072a8648ce3d020106082a8648ce3d030107034200042d366f1fcd9bf55209f9aca98e7d96a93d4df38dcc427964cc4e5ddea92491b5dae420819561d87df0542a62cf999ab51e630edcc3dddc2d7dc9e249d57c7433a37f307d300e0603551d0f0101ff0404030204b0300c0603551d130101ff04023000301f0603551d230418301680140905a671fc4818f80e61cbfbee438b9ee74cd560301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e0416041408593e06e31b78f2055148695d39ba249904ada4300a06082a8648ce3d0403020348003045022024bc5cb2b4e0d21d127968cd07d42c3bb04ac12ca8f927f58f9a4775a9247225022100d3fc9d2e33ffbe04afba956384e3a34e63bfde3b821022b7c879421e83c39f965903233082031f308202c4a00302010202143ec1623673faeadd807c95cf52d9b47daa8335a8300a06082a8648ce3d0403023059310b300906035504061302495431193017060355040a0c10496f5420496e666f4365727420537041311430120603550405130b30373934353231313030363119301706035504030c10496f5420534841524544204543445341301e170d3235303631383133333130355a170d3430303631383133333130355a3063310b300906035504061302495431193017060355040a0c10496f5420496e666f43657274205370413123302106035504030c1a496f54205348415245442049505a532043424f52204543445341311430120603550405130b30373934353231313030363059301306072a8648ce3d020106082a8648ce3d03010703420004d4d7cbfb3836ac48119c40acb77b976c8c74b740eebf46f18aa92913d40aef1ef10999b2d186661d7b1bde2d35e5a0925829310910c890340e1617fabb3ccceaa382015e3082015a30120603551d130101ff040830060101ff02010030140603551d20040d300b300906072b06010402020130819306082b06010505070101048186308183303306082b060105050730018627687474703a2f2f696f742d6f6373702e696e666f636572742e6469676974616c2f736861726564304c06082b060105050730028640687474703a2f2f696f742e696e666f636572742e6469676974616c2f63612f7368617265642f65636473612f496f545f5348415245445f45434453412e63727430480603551d1f0441303f303da03ba0398637687474703a2f2f696f742e696e666f636572742e6469676974616c2f63726c2f7368617265642f65636473612f63612f43524c2e63726c300e0603551d0f0101ff040403020106301d0603551d0e041604140905a671fc4818f80e61cbfbee438b9ee74cd560301f0603551d2304183016801452927597ce92966d42a539c775a924c2f0032c6f300a06082a8648ce3d0403020349003046022100873dabd152cf5f439bffc7bcef2e454db82a5c062d26cfb83e016f4f9a7832690221009679a311ef422163e02bff44cc5325b4c5f25915e7d1c8d4ed8de24925e7ec7c5903823082037e30820324a003020102021470102e509414f5a4b853ab4063d6df8f6ec520d6300a06082a8648ce3d0403023055310b300906035504061302495431193017060355040a0c10496f5420496e666f4365727420537041311430120603550405130b30373934353231313030363115301306035504030c0c535320496f54204543445341301e170d3233303132343132313633365a170d3438303132343132313633365a3059310b300906035504061302495431193017060355040a0c10496f5420496e666f4365727420537041311430120603550405130b30373934353231313030363119301706035504030c10496f54205348415245442045434453413059301306072a8648ce3d020106082a8648ce3d03010703420004cd2fd980a7b81deb44ef4cf7186d45e8dbf67977396622e6e676836e86677722f72d6a3cf55dd4a972438ccc9d6d0017ba42c1b5b18f51dcbf9fd58b9c1199b9a38201cc308201c830818a06082b06010505070101047e307c302c06082b060105050730018620687474703a2f2f696f742d6f6373702e696e666f636572742e6469676974616c304c06082b060105050730028640687474703a2f2f696f742e696e666f636572742e6469676974616c2f63612f73656c667369676e65642f65636473612f53535f496f545f45434453412e63727430120603551d130101ff040830060101ff02010130130603551d20040c300a300806062b0601040202304c0603551d1f044530433041a03fa03d863b687474703a2f2f696f742e696e666f636572742e6469676974616c2f63726c2f73656c667369676e65642f65636473612f63612f43524c2e63726c300e0603551d0f0101ff040403020106301d0603551d0e0416041452927597ce92966d42a539c775a924c2f0032c6f3081920603551d2304818a3081878014d4695159597e21729e43e2b8fae8859aecb74d82a159a4573055310b300906035504061302495431193017060355040a0c10496f5420496e666f4365727420537041311430120603550405130b30373934353231313030363115301306035504030c0c535320496f54204543445341821426a29b12948cb43e901b367cc0ca925083795239300a06082a8648ce3d040302034800304502205be53976594432f33e1e76d90b03c278ddee677766cb67e71ff9c604ec2a19a9022100fed41f4021c7050722dec77e4898f7e14b123b77a988ca36f1f7f788f82c796359033bd818590336a667646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6776657273696f6e63312e306c76616c6964697479496e666fa3667369676e6564c074323032352d30372d32325430393a30373a34335a6976616c696446726f6dc074323032352d30372d32325430393a30373a34335a6a76616c6964556e74696cc074323033342d30312d30315432323a35393a35395a6c76616c756544696765737473a2716f72672e69736f2e31383031332e352e31ac005820b819f2c994591697d31ea10ce8ef46b6a041ba108dc85864248ab29f8080618f015820fe9f7a6f5c89d6a161db05c87a0b37200700683d272d461149cfc25daaaed020025820cadf64f641eefcd635c6414011c5a1d8be0e884b1c277c147015ecc1f03665e00358200c505330a71ff428132f2e95d44c66985fe2775f5cbd892d8738be34ff694623045820fe9307c63d4f2910e23fd7a8a80312ade34ea7078632222d6263f3ba80a188860558208ca88cbf76c42050557e6d6c7551e2fd821f6308ada90c9301291d4e37e71d92065820b8da35fdd3697db527b389d2ffdb06685a375f4b0d1cef479bc031bdd59d1872075820a7fe3df06d9b868899e6e1a5df7593397a49cc0e870c2cd89a2176a081c0bc510858203d6c75e05b314167c67a0aa1fd9d279df30aff629f1c37623f56d9fedbce1c8f0958200441ffac155ca465d015453080bf7e03df2a25de59c2342c66c6b10a2531c5770a582002caead3c2bdb2199f29527285447ecf9842ae29005881ad0ebe9e47d7c2adc60b582029c5a49b0776dddb657fafb95a803a0bc4a7048ef8895fdf907df4d9c24a01a4746f72672e69736f2e31383031332e352e312e4954a20c5820af94d4a9305370ff91329266f681e4ce204f36b9c25f8ce1b54b6f8593c520b20d5820a850bd508a426cc08e0208a07c6691c9c9c78c14c1a17424f138482f57f887e46d6465766963654b6579496e666fa1696465766963654b6579a501020326200121582030a0424cd21c2944838a2d75c92b37e76ea20d9f00893a3b4eee8a3c0aafec3e225820e04b65e92456d9888b52b379bdfbd51ee869ef1f0fc65b6659695b6cce0817236f646967657374416c676f726974686d675348412d3235365840940af31d026fb7a0c4b0d25e474885f8592d1bf196ee92ee5cc3f70bbbafac355f0bee08f3d3473fb5e08bf7016519d9d59f0d1f438d89991f7f7e9c274c933b6a6e616d65537061636573a2716f72672e69736f2e31383031332e352e318cd818590367a46672616e646f6d5820f43098de324de41c1e32914dea78fdfb2e1c8381bb69e9a3521c617e3bfe8f17686469676573744944006c656c656d656e7456616c7565590308ffd8ffe000104a46494600010100004800480000ffe1004c4578696600004d4d002a00000008000187690004000000010000001a000000000003a00100030000000100010000a00200040000000100000001a0030004000000010000000100000000ffed003850686f746f73686f7020332e30003842494d04040000000000003842494d0425000000000010d41d8cd98f00b204e9800998ecf8427effc00011080001000103012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffdb004300020202020202030202030403030304050404040405070505050505070807070707070708080808080808080a0a0a0a0a0a0b0b0b0b0b0d0d0d0d0d0d0d0d0d0dffdb004301020202030303060303060d0907090d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0dffdd00040001ffda000c03010002110311003f00fa628a28afcacff400ffd971656c656d656e744964656e74696669657268706f727472616974d818586ca46672616e646f6d58205b3541fb388abf7cb983641949488e5e90e8d583a88dceb4b722de75a984ad48686469676573744944016c656c656d656e7456616c756568414231323334353671656c656d656e744964656e7469666965726f646f63756d656e745f6e756d626572d81858dba46672616e646f6d582037781a36e007614dba2baa6fa54a307d32594a56c8d0dc96f44cd543ec78e635686469676573744944026c656c656d656e7456616c756581a465636f64657381a364636f6465623031647369676e613d6576616c75656a30312e30312e323032346a69737375655f64617465d903ec6a323032342d30312d30316b6578706972795f64617465d903ec6a323033342d30312d30317576656869636c655f63617465676f72795f636f6465614271656c656d656e744964656e7469666965727264726976696e675f70726976696c65676573d8185864a46672616e646f6d582011e6ef762a7bc363a693f9ef2058c335da4db4539fb46635196117bad12de6c1686469676573744944036c656c656d656e7456616c756564526f6d6571656c656d656e744964656e7469666965726b62697274685f706c616365d818586ca46672616e646f6d5820224795cf0880e52d701841fbd08dc429323957278e8d8e8745a84fe2c416eeec686469676573744944046c656c656d656e7456616c7565d903ec6a323032342d30312d303171656c656d656e744964656e7469666965726a69737375655f64617465d8185863a46672616e646f6d58200ae2b212913339cb4187499132b61962b1530e697c3a7bd724ecd687da5d411c686469676573744944056c656c656d656e7456616c756563446f6571656c656d656e744964656e7469666965726b66616d696c795f6e616d65d8185866a46672616e646f6d58203173ad18fb79033cf0443394710cd82a00eff7b874facea0abf77a66e4328c94686469676573744944066c656c656d656e7456616c756562495471656c656d656e744964656e7469666965726f69737375696e675f636f756e747279d818587ca46672616e646f6d5820c1d1afe667e0b3a8ab251b6db891a3a9682907e9f0857c46e0f87fdade0ffbc4686469676573744944076c656c656d656e7456616c7565764d696e69737465726f2064656c6c27496e7465726e6f71656c656d656e744964656e7469666965727169737375696e675f617574686f72697479d8185863a46672616e646f6d582052686a4bccd0f2bd5a964870a8a675b2abc41eccc031d147999b7e53fa2967fe686469676573744944086c656c656d656e7456616c7565644a6f686e71656c656d656e744964656e7469666965726a676976656e5f6e616d65d818586da46672616e646f6d582011f14de735ab80ff524b7d82c19bcdb4718de492bb12d86bc80788a7194f7f98686469676573744944096c656c656d656e7456616c7565d903ec6a323033342d30312d303171656c656d656e744964656e7469666965726b6578706972795f64617465d818586ca46672616e646f6d5820acc70f87ade6b9cfa7bb923de4fc8e589c3076de718e8fdc3c35aa1019a767066864696765737449440a6c656c656d656e7456616c7565d903ec6a313939302d30312d303171656c656d656e744964656e7469666965726a62697274685f64617465d818586ca46672616e646f6d5820e900bd7b90b96b499242f502c2fb502804bad2898d9296bcbed4481831075ea66864696765737449440b6c656c656d656e7456616c7565614971656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e746f72672e69736f2e31383031332e352e312e495482d818587da46672616e646f6d58206111fe4737a151fda43b9b710cc0ed651649630ff74c0740d7d61e7ff019033d6864696765737449440c6c656c656d656e7456616c7565782431323365343536372d653839622d343264332d613435362d34323636313431373430303071656c656d656e744964656e74696669657263737562d818590152a46672616e646f6d58204d800aebc8c1e85a3047bb3cee0e953f3deef5b89014447cbc2004af04a53fbe6864696765737449440d6c656c656d656e7456616c7565a36865766964656e636581a36474696d6573323032342d30312d30315430303a30303a303064747970656b69645f65766964656e63656b6174746573746174696f6ea464747970656e69645f6174746573746174696f6e67766f7563686572a16c6f7267616e697a6174696f6e754d6f746f72697a7a617a696f6e6520436976696c6570646174655f6f665f69737375616e636573323032342d30312d30315430303a30303a3030707265666572656e63655f6e756d626572695245463132333435366f6173737572616e63655f6c6576656c64686967686f74727573745f6672616d65776f726b6969745f77616c6c657471656c656d656e744964656e7469666965726c766572696669636174696f6e" +BIN_ISSUED_MDOC = binascii.unhexlify(ISSUED_MDOC) + +mdoc = cbor2.loads(BIN_ISSUED_MDOC) +# msop = MsoVerifier(mdoc['documents'][0]['issuerSigned']['issuerAuth']) +msop = MsoVerifier(mdoc['issuerAuth']) +isSignatureValid = msop.verify_signature() + diff --git a/requirements-dev.txt b/requirements-dev.txt index b0976ec..d1cbabb 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -6,4 +6,5 @@ isort autoflake bandit autopep8 -pycose>=1.0.1 \ No newline at end of file +pycose>=1.0.1 +cbor2>=5.4.0,<5.5.0 \ No newline at end of file From 36c177a47789f14662cf905e0f2e1152089b42b6 Mon Sep 17 00:00:00 2001 From: Dario Castellano Date: Tue, 22 Jul 2025 12:54:31 +0200 Subject: [PATCH 2/3] chore: Remove file from repository --- pymdoccbor/tests/ic_cborservice_test.py | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 pymdoccbor/tests/ic_cborservice_test.py diff --git a/pymdoccbor/tests/ic_cborservice_test.py b/pymdoccbor/tests/ic_cborservice_test.py deleted file mode 100644 index b3a5d29..0000000 --- a/pymdoccbor/tests/ic_cborservice_test.py +++ /dev/null @@ -1,14 +0,0 @@ -from pymdoccbor.mso.verifier import MsoVerifier - -import binascii -import cbor2 - -# ISSUED_MDOC="a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a1716f72672e69736f2e31383031332e352e3186d8185863a4686469676573744944006672616e646f6d58208798645b20ea200e19ffabac92624bee6aec63aceedecfb1b80077d22bfc20e971656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d818586ca4686469676573744944036672616e646f6d5820b23f627e8999c706df0c0a4ed98ad74af988af619b4bb078b89058553f44615d71656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818586da4686469676573744944046672616e646f6d5820c7ffa307e5de921e67ba5878094787e8807ac8e7b5b3932d2ce80f00f3e9abaf71656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d818586da4686469676573744944076672616e646f6d582026052a42e5880557a806c1459af3fb7eb505d3781566329d0b604b845b5f9e6871656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569313233343536373839d818590471a4686469676573744944086672616e646f6d5820d094dad764a2eb9deb5210e9d899643efbd1d069cc311d3295516ca0b024412d71656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c7565590412ffd8ffe000104a46494600010101009000900000ffdb004300130d0e110e0c13110f11151413171d301f1d1a1a1d3a2a2c2330453d4947443d43414c566d5d4c51685241435f82606871757b7c7b4a5c869085778f6d787b76ffdb0043011415151d191d381f1f38764f434f7676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676ffc00011080018006403012200021101031101ffc4001b00000301000301000000000000000000000005060401020307ffc400321000010303030205020309000000000000010203040005110612211331141551617122410781a1163542527391b2c1f1ffc4001501010100000000000000000000000000000001ffc4001a110101010003010000000000000000000000014111213161ffda000c03010002110311003f00a5bbde22da2329c7d692bc7d0d03f52cfb0ff75e7a7ef3e7709723a1d0dae146ddfbb3c039ce07ad2bd47a7e32dbb8dd1d52d6ef4b284f64a480067dfb51f87ffb95ff00eb9ff14d215de66af089ce44b7dbde9cb6890a2838eddf18078f7add62d411ef4db9b10a65d6b95a147381ea0d495b933275fe6bba75c114104a8ba410413e983dff004f5af5d34b4b4cde632d0bf1fd1592bdd91c6411f3934c2fa6af6b54975d106dcf4a65ae56e856001ebc03c7ce29dd9eef1ef10fc447dc9da76ad2aee93537a1ba7e4f70dd8eff0057c6dffb5e1a19854a83758e54528750946ec6704850cd037bceb08b6d7d2cc76d3317fc7b5cc04fb6707269c5c6e0c5b60ae549242123b0e493f602a075559e359970d98db89525456b51c951c8afa13ea8e98e3c596836783d5c63f5a61a99fdb7290875db4be88ab384bbbbbfc7183fdeaa633e8951db7da396dc48524fb1a8bd611a5aa2a2432f30ab420a7a6d3240c718cf031fa9ef4c9ad550205aa02951df4a1d6c8421b015b769db8c9229837ea2be8b1b0d39d0eba9c51484efdb8c0efd8d258daf3c449699f2edbd4584e7af9c64e3f96b9beb28d4ac40931e6478c8e76a24a825449501d867d2b1dcdebae99b9c752ae4ecd6dde4a179c1c1e460938f9149ef655e515c03919a289cb3dca278fb7bf177f4faa829dd8ce3f2ac9a7ecde490971fafd7dce15eed9b71c018c64fa514514b24e8e4f8c5c9b75c1e82579dc1233dfec08238f6add62d391acc1c5256a79e706d52d431c7a0145140b9fd149eb3a60dc5e88cbbc2da092411e9dc71f39a7766b447b344e847dcac9dcb5abba8d145061d43a6fcf1e65cf15d0e90231d3dd9cfe62995c6dcc5ca12a2c904a15f71dd27d451453e09d1a21450961cbb3ea8a956433b781f1ce33dfed54f0e2b50a2b71d84ed6db18028a28175f74fc6bda105c529a791c25c4f3c7a11f71586268f4a66b726e33de9ea6f1b52b181c760724e47b514520a5a28a283ffd9d81858ffa4686469676573744944096672616e646f6d58204599f81beaa2b20bd0ffcc9aa03a6f985befab3f6beaffa41e6354cdb2ab2ce471656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d32306a697373756572417574688443a10126a118215901d2308201ce30820174a003020102021401ec51916031e6898e8fc7864af5e6d5f86602b6300a06082a8648ce3d04030230233114301206035504030c0b75746f7069612069616361310b3009060355040613025553301e170d3230313030313030303030305a170d3231313030313030303030305a30213112301006035504030c0975746f706961206473310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d03010703420004ace7ab7340e5d9648c5a72a9a6f56745c7aad436a03a43efea77b5fa7b88f0197d57d8983e1b37d3a539f4d588365e38cbbf5b94d68c547b5bc8731dcd2f146ba38187308184301e0603551d120417301581136578616d706c65406578616d706c652e636f6d301c0603551d1f041530133011a00fa00d820b6578616d706c652e636f6d301d0603551d0e0416041414e29017a6c35621ffc7a686b7b72db06cd12351300e0603551d0f0101ff04040302078030150603551d250101ff040b3009060728818c5d050102300a06082a8648ce3d0403020348003045022100bac6f93a8bacf0fc9aeac1c89a5c9293af2076942e9e972882a113640330702702207b7b73c0444371a4c94c9c888ddfe553ffde84ca492fd64dfbf02ad46a31cbc85903a2d81859039da66776657273696f6e63312e306f646967657374416c676f726974686d675348412d3235366c76616c756544696765737473a2716f72672e69736f2e31383031332e352e31ad00582075167333b47b6c2bfb86eccc1f438cf57af055371ac55e1e359e20f254adcebf01582067e539d6139ebd131aef441b445645dd831b2b375b390ca5ef6279b205ed45710258203394372ddb78053f36d5d869780e61eda313d44a392092ad8e0527a2fbfe55ae0358202e35ad3c4e514bb67b1a9db51ce74e4cb9b7146e41ac52dac9ce86b8613db555045820ea5c3304bb7c4a8dcb51c4c13b65264f845541341342093cca786e058fac2d59055820fae487f68b7a0e87a749774e56e9e1dc3a8ec7b77e490d21f0e1d3475661aa1d0658207d83e507ae77db815de4d803b88555d0511d894c897439f5774056416a1c7533075820f0549a145f1cf75cbeeffa881d4857dd438d627cf32174b1731c4c38e12ca936085820b68c8afcb2aaf7c581411d2877def155be2eb121a42bc9ba5b7312377e068f660958200b3587d1dd0c2a07a35bfb120d99a0abfb5df56865bb7fa15cc8b56a66df6e0c0a5820c98a170cf36e11abb724e98a75a5343dfa2b6ed3df2ecfbb8ef2ee55dd41c8810b5820b57dd036782f7b14c6a30faaaae6ccd5054ce88bdfa51a016ba75eda1edea9480c5820651f8736b18480fe252a03224ea087b5d10ca5485146c67c74ac4ec3112d4c3a746f72672e69736f2e31383031332e352e312e5553a4005820d80b83d25173c484c5640610ff1a31c949c1d934bf4cf7f18d5223b15dd4f21c0158204d80e1e2e4fb246d97895427ce7000bb59bb24c8cd003ecf94bf35bbd2917e340258208b331f3b685bca372e85351a25c9484ab7afcdf0d2233105511f778d98c2f544035820c343af1bd1690715439161aba73702c474abf992b20c9fb55c36a336ebe01a876d6465766963654b6579496e666fa1696465766963654b6579a40102200121582096313d6c63e24e3372742bfdb1a33ba2c897dcd68ab8c753e4fbd48dca6b7f9a2258201fb3269edd418857de1b39a4e4a44b92fa484caa722c228288f01d0c03a2c3d667646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c76616c6964697479496e666fa3667369676e6564c074323032302d31302d30315431333a33303a30325a6976616c696446726f6dc074323032302d31302d30315431333a33303a30325a6a76616c6964556e74696cc074323032312d31302d30315431333a33303a30325a5840cff12c17d4739aba806035a9cb2b34ae8a830cef4f329289f9a3ebd302dd6b99c584068257569397b92ba9aa5128554eb05d1273dafea313da4aff6b01a5fb3f6c6465766963655369676e6564a26a6e616d65537061636573d81841a06a64657669636541757468a1696465766963654d61638443a10105a0f65820200d73ded787c64652dc8ee743ea83a5260d5a3283fddc919b7b9cfb486addb26673746174757300" -ISSUED_MDOC="a26a697373756572417574688443a10126a118218359022d30820229308201cfa00302010202147be25ed81be4b1517138029d51cfaac7cc9a1b50300a06082a8648ce3d0403023063310b300906035504061302495431193017060355040a0c10496f5420496e666f43657274205370413123302106035504030c1a496f54205348415245442049505a532043424f52204543445341311430120603550405130b3037393435323131303036301e170d3235303632303037343931365a170d3330303631393037343931355a30453115301306035504030c0c43424f522053657276696365310b3009060355040613024954310c300a060355040b0c03496f543111300f060355040a0c08496e666f436572743059301306072a8648ce3d020106082a8648ce3d030107034200042d366f1fcd9bf55209f9aca98e7d96a93d4df38dcc427964cc4e5ddea92491b5dae420819561d87df0542a62cf999ab51e630edcc3dddc2d7dc9e249d57c7433a37f307d300e0603551d0f0101ff0404030204b0300c0603551d130101ff04023000301f0603551d230418301680140905a671fc4818f80e61cbfbee438b9ee74cd560301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e0416041408593e06e31b78f2055148695d39ba249904ada4300a06082a8648ce3d0403020348003045022024bc5cb2b4e0d21d127968cd07d42c3bb04ac12ca8f927f58f9a4775a9247225022100d3fc9d2e33ffbe04afba956384e3a34e63bfde3b821022b7c879421e83c39f965903233082031f308202c4a00302010202143ec1623673faeadd807c95cf52d9b47daa8335a8300a06082a8648ce3d0403023059310b300906035504061302495431193017060355040a0c10496f5420496e666f4365727420537041311430120603550405130b30373934353231313030363119301706035504030c10496f5420534841524544204543445341301e170d3235303631383133333130355a170d3430303631383133333130355a3063310b300906035504061302495431193017060355040a0c10496f5420496e666f43657274205370413123302106035504030c1a496f54205348415245442049505a532043424f52204543445341311430120603550405130b30373934353231313030363059301306072a8648ce3d020106082a8648ce3d03010703420004d4d7cbfb3836ac48119c40acb77b976c8c74b740eebf46f18aa92913d40aef1ef10999b2d186661d7b1bde2d35e5a0925829310910c890340e1617fabb3ccceaa382015e3082015a30120603551d130101ff040830060101ff02010030140603551d20040d300b300906072b06010402020130819306082b06010505070101048186308183303306082b060105050730018627687474703a2f2f696f742d6f6373702e696e666f636572742e6469676974616c2f736861726564304c06082b060105050730028640687474703a2f2f696f742e696e666f636572742e6469676974616c2f63612f7368617265642f65636473612f496f545f5348415245445f45434453412e63727430480603551d1f0441303f303da03ba0398637687474703a2f2f696f742e696e666f636572742e6469676974616c2f63726c2f7368617265642f65636473612f63612f43524c2e63726c300e0603551d0f0101ff040403020106301d0603551d0e041604140905a671fc4818f80e61cbfbee438b9ee74cd560301f0603551d2304183016801452927597ce92966d42a539c775a924c2f0032c6f300a06082a8648ce3d0403020349003046022100873dabd152cf5f439bffc7bcef2e454db82a5c062d26cfb83e016f4f9a7832690221009679a311ef422163e02bff44cc5325b4c5f25915e7d1c8d4ed8de24925e7ec7c5903823082037e30820324a003020102021470102e509414f5a4b853ab4063d6df8f6ec520d6300a06082a8648ce3d0403023055310b300906035504061302495431193017060355040a0c10496f5420496e666f4365727420537041311430120603550405130b30373934353231313030363115301306035504030c0c535320496f54204543445341301e170d3233303132343132313633365a170d3438303132343132313633365a3059310b300906035504061302495431193017060355040a0c10496f5420496e666f4365727420537041311430120603550405130b30373934353231313030363119301706035504030c10496f54205348415245442045434453413059301306072a8648ce3d020106082a8648ce3d03010703420004cd2fd980a7b81deb44ef4cf7186d45e8dbf67977396622e6e676836e86677722f72d6a3cf55dd4a972438ccc9d6d0017ba42c1b5b18f51dcbf9fd58b9c1199b9a38201cc308201c830818a06082b06010505070101047e307c302c06082b060105050730018620687474703a2f2f696f742d6f6373702e696e666f636572742e6469676974616c304c06082b060105050730028640687474703a2f2f696f742e696e666f636572742e6469676974616c2f63612f73656c667369676e65642f65636473612f53535f496f545f45434453412e63727430120603551d130101ff040830060101ff02010130130603551d20040c300a300806062b0601040202304c0603551d1f044530433041a03fa03d863b687474703a2f2f696f742e696e666f636572742e6469676974616c2f63726c2f73656c667369676e65642f65636473612f63612f43524c2e63726c300e0603551d0f0101ff040403020106301d0603551d0e0416041452927597ce92966d42a539c775a924c2f0032c6f3081920603551d2304818a3081878014d4695159597e21729e43e2b8fae8859aecb74d82a159a4573055310b300906035504061302495431193017060355040a0c10496f5420496e666f4365727420537041311430120603550405130b30373934353231313030363115301306035504030c0c535320496f54204543445341821426a29b12948cb43e901b367cc0ca925083795239300a06082a8648ce3d040302034800304502205be53976594432f33e1e76d90b03c278ddee677766cb67e71ff9c604ec2a19a9022100fed41f4021c7050722dec77e4898f7e14b123b77a988ca36f1f7f788f82c796359033bd818590336a667646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6776657273696f6e63312e306c76616c6964697479496e666fa3667369676e6564c074323032352d30372d32325430393a30373a34335a6976616c696446726f6dc074323032352d30372d32325430393a30373a34335a6a76616c6964556e74696cc074323033342d30312d30315432323a35393a35395a6c76616c756544696765737473a2716f72672e69736f2e31383031332e352e31ac005820b819f2c994591697d31ea10ce8ef46b6a041ba108dc85864248ab29f8080618f015820fe9f7a6f5c89d6a161db05c87a0b37200700683d272d461149cfc25daaaed020025820cadf64f641eefcd635c6414011c5a1d8be0e884b1c277c147015ecc1f03665e00358200c505330a71ff428132f2e95d44c66985fe2775f5cbd892d8738be34ff694623045820fe9307c63d4f2910e23fd7a8a80312ade34ea7078632222d6263f3ba80a188860558208ca88cbf76c42050557e6d6c7551e2fd821f6308ada90c9301291d4e37e71d92065820b8da35fdd3697db527b389d2ffdb06685a375f4b0d1cef479bc031bdd59d1872075820a7fe3df06d9b868899e6e1a5df7593397a49cc0e870c2cd89a2176a081c0bc510858203d6c75e05b314167c67a0aa1fd9d279df30aff629f1c37623f56d9fedbce1c8f0958200441ffac155ca465d015453080bf7e03df2a25de59c2342c66c6b10a2531c5770a582002caead3c2bdb2199f29527285447ecf9842ae29005881ad0ebe9e47d7c2adc60b582029c5a49b0776dddb657fafb95a803a0bc4a7048ef8895fdf907df4d9c24a01a4746f72672e69736f2e31383031332e352e312e4954a20c5820af94d4a9305370ff91329266f681e4ce204f36b9c25f8ce1b54b6f8593c520b20d5820a850bd508a426cc08e0208a07c6691c9c9c78c14c1a17424f138482f57f887e46d6465766963654b6579496e666fa1696465766963654b6579a501020326200121582030a0424cd21c2944838a2d75c92b37e76ea20d9f00893a3b4eee8a3c0aafec3e225820e04b65e92456d9888b52b379bdfbd51ee869ef1f0fc65b6659695b6cce0817236f646967657374416c676f726974686d675348412d3235365840940af31d026fb7a0c4b0d25e474885f8592d1bf196ee92ee5cc3f70bbbafac355f0bee08f3d3473fb5e08bf7016519d9d59f0d1f438d89991f7f7e9c274c933b6a6e616d65537061636573a2716f72672e69736f2e31383031332e352e318cd818590367a46672616e646f6d5820f43098de324de41c1e32914dea78fdfb2e1c8381bb69e9a3521c617e3bfe8f17686469676573744944006c656c656d656e7456616c7565590308ffd8ffe000104a46494600010100004800480000ffe1004c4578696600004d4d002a00000008000187690004000000010000001a000000000003a00100030000000100010000a00200040000000100000001a0030004000000010000000100000000ffed003850686f746f73686f7020332e30003842494d04040000000000003842494d0425000000000010d41d8cd98f00b204e9800998ecf8427effc00011080001000103012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffdb004300020202020202030202030403030304050404040405070505050505070807070707070708080808080808080a0a0a0a0a0a0b0b0b0b0b0d0d0d0d0d0d0d0d0d0dffdb004301020202030303060303060d0907090d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0dffdd00040001ffda000c03010002110311003f00fa628a28afcacff400ffd971656c656d656e744964656e74696669657268706f727472616974d818586ca46672616e646f6d58205b3541fb388abf7cb983641949488e5e90e8d583a88dceb4b722de75a984ad48686469676573744944016c656c656d656e7456616c756568414231323334353671656c656d656e744964656e7469666965726f646f63756d656e745f6e756d626572d81858dba46672616e646f6d582037781a36e007614dba2baa6fa54a307d32594a56c8d0dc96f44cd543ec78e635686469676573744944026c656c656d656e7456616c756581a465636f64657381a364636f6465623031647369676e613d6576616c75656a30312e30312e323032346a69737375655f64617465d903ec6a323032342d30312d30316b6578706972795f64617465d903ec6a323033342d30312d30317576656869636c655f63617465676f72795f636f6465614271656c656d656e744964656e7469666965727264726976696e675f70726976696c65676573d8185864a46672616e646f6d582011e6ef762a7bc363a693f9ef2058c335da4db4539fb46635196117bad12de6c1686469676573744944036c656c656d656e7456616c756564526f6d6571656c656d656e744964656e7469666965726b62697274685f706c616365d818586ca46672616e646f6d5820224795cf0880e52d701841fbd08dc429323957278e8d8e8745a84fe2c416eeec686469676573744944046c656c656d656e7456616c7565d903ec6a323032342d30312d303171656c656d656e744964656e7469666965726a69737375655f64617465d8185863a46672616e646f6d58200ae2b212913339cb4187499132b61962b1530e697c3a7bd724ecd687da5d411c686469676573744944056c656c656d656e7456616c756563446f6571656c656d656e744964656e7469666965726b66616d696c795f6e616d65d8185866a46672616e646f6d58203173ad18fb79033cf0443394710cd82a00eff7b874facea0abf77a66e4328c94686469676573744944066c656c656d656e7456616c756562495471656c656d656e744964656e7469666965726f69737375696e675f636f756e747279d818587ca46672616e646f6d5820c1d1afe667e0b3a8ab251b6db891a3a9682907e9f0857c46e0f87fdade0ffbc4686469676573744944076c656c656d656e7456616c7565764d696e69737465726f2064656c6c27496e7465726e6f71656c656d656e744964656e7469666965727169737375696e675f617574686f72697479d8185863a46672616e646f6d582052686a4bccd0f2bd5a964870a8a675b2abc41eccc031d147999b7e53fa2967fe686469676573744944086c656c656d656e7456616c7565644a6f686e71656c656d656e744964656e7469666965726a676976656e5f6e616d65d818586da46672616e646f6d582011f14de735ab80ff524b7d82c19bcdb4718de492bb12d86bc80788a7194f7f98686469676573744944096c656c656d656e7456616c7565d903ec6a323033342d30312d303171656c656d656e744964656e7469666965726b6578706972795f64617465d818586ca46672616e646f6d5820acc70f87ade6b9cfa7bb923de4fc8e589c3076de718e8fdc3c35aa1019a767066864696765737449440a6c656c656d656e7456616c7565d903ec6a313939302d30312d303171656c656d656e744964656e7469666965726a62697274685f64617465d818586ca46672616e646f6d5820e900bd7b90b96b499242f502c2fb502804bad2898d9296bcbed4481831075ea66864696765737449440b6c656c656d656e7456616c7565614971656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e746f72672e69736f2e31383031332e352e312e495482d818587da46672616e646f6d58206111fe4737a151fda43b9b710cc0ed651649630ff74c0740d7d61e7ff019033d6864696765737449440c6c656c656d656e7456616c7565782431323365343536372d653839622d343264332d613435362d34323636313431373430303071656c656d656e744964656e74696669657263737562d818590152a46672616e646f6d58204d800aebc8c1e85a3047bb3cee0e953f3deef5b89014447cbc2004af04a53fbe6864696765737449440d6c656c656d656e7456616c7565a36865766964656e636581a36474696d6573323032342d30312d30315430303a30303a303064747970656b69645f65766964656e63656b6174746573746174696f6ea464747970656e69645f6174746573746174696f6e67766f7563686572a16c6f7267616e697a6174696f6e754d6f746f72697a7a617a696f6e6520436976696c6570646174655f6f665f69737375616e636573323032342d30312d30315430303a30303a3030707265666572656e63655f6e756d626572695245463132333435366f6173737572616e63655f6c6576656c64686967686f74727573745f6672616d65776f726b6969745f77616c6c657471656c656d656e744964656e7469666965726c766572696669636174696f6e" -BIN_ISSUED_MDOC = binascii.unhexlify(ISSUED_MDOC) - -mdoc = cbor2.loads(BIN_ISSUED_MDOC) -# msop = MsoVerifier(mdoc['documents'][0]['issuerSigned']['issuerAuth']) -msop = MsoVerifier(mdoc['issuerAuth']) -isSignatureValid = msop.verify_signature() - From d01aae5b2e414741360d56e141b14307a92ec739 Mon Sep 17 00:00:00 2001 From: Dario Castellano Date: Wed, 23 Jul 2025 18:01:41 +0200 Subject: [PATCH 3/3] chore: remove commented code and add description --- pymdoccbor/mso/verifier.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/pymdoccbor/mso/verifier.py b/pymdoccbor/mso/verifier.py index dfcf531..a2f9b2c 100644 --- a/pymdoccbor/mso/verifier.py +++ b/pymdoccbor/mso/verifier.py @@ -75,19 +75,25 @@ def payload_as_dict(self): ) @property - def raw_public_keys(self) -> list[Any]: + def raw_public_keys(self) -> list[Union[bytes, dict]]: """ - it returns the public key extract from x509 certificates - looking to both phdr and uhdr + Extracts public keys from x509 certificates found in the MSO. + This method searches for x509 certificates in both the protected header (phdr) + and unprotected header (uhdr) of the COSE_Sign1 object. It handles certificate + data in various formats, including: + - `bytes`: Returns a list containing the raw bytes of the certificate. + - `list`: Returns the list of certificates as-is. + - `dict`: Wraps the dictionary in a list and returns it. + If no valid x509 certificates are found, an `MsoX509ChainNotFound` exception + is raised. Unexpected types are logged as warnings. + :return: list[Any]: A list of certificates in their respective formats. + :raises MsoX509ChainNotFound: If no x509 certificates are found. """ - # _mixed_heads = self.object.phdr.items() | self.object.uhdr.items() - merged = self.object.phdr.copy() merged.update(self.object.uhdr) _mixed_heads = merged.items() for h, v in _mixed_heads: if h.identifier == 33: - # return list(self.object.uhdr.values()) if isinstance(v, bytes): return [v] elif isinstance(v, list):