@@ -64,10 +64,14 @@ from cwt import COSEKey, CWTClaims
6464mac_key = COSEKey.generate_symmetric_key(alg = " HS256" , kid = " 01" )
6565
6666# The sender side:
67- token = encode({
68- CWTClaims.ISS : " coaps://as.example" ,
69- CWTClaims.SUB : " dajiaji" ,
70- CWTClaims.CTI : b " 123" }, mac_key)
67+ token = encode(
68+ {
69+ CWTClaims.ISS : " coaps://as.example" ,
70+ CWTClaims.SUB : " dajiaji" ,
71+ CWTClaims.CTI : b " 123" ,
72+ },
73+ mac_key,
74+ )
7175
7276# The recipient side:
7377decoded = decode(token, mac_key)
@@ -285,7 +289,9 @@ mac_key = COSEKey.generate_symmetric_key(alg="HS512", kid="01")
285289r = Recipient.new(unprotected = {" alg" : " direct" , " kid" : mac_key.kid})
286290
287291sender = COSE .new()
288- encoded = sender.encode(b " Hello world!" , mac_key, protected = {" alg" : " HS512" }, recipients = [r])
292+ encoded = sender.encode(
293+ b " Hello world!" , mac_key, protected = {" alg" : " HS512" }, recipients = [r]
294+ )
289295
290296# The recipient side:
291297recipient = COSE .new()
@@ -319,7 +325,9 @@ encoded = sender.encode(
319325
320326# The recipient side:
321327recipient = COSE .new()
322- assert b " Hello world!" == recipient.decode(encoded, shared_key, context = {" alg" : " HS256" })
328+ assert b " Hello world!" == recipient.decode(
329+ encoded, shared_key, context = {" alg" : " HS256" }
330+ )
323331```
324332
325333#### AES Key Wrap for MAC
@@ -463,7 +471,9 @@ mac_key = COSEKey.generate_symmetric_key(alg="HS256", kid="01")
463471# The sender side:
464472r = Recipient.new(unprotected = {" alg" : " direct" , " kid" : mac_key.kid})
465473sender = COSE .new()
466- encoded = sender.encode(b " Hello world!" , mac_key, protected = {" alg" : " HS256" }, recipients = [r])
474+ encoded = sender.encode(
475+ b " Hello world!" , mac_key, protected = {" alg" : " HS256" }, recipients = [r]
476+ )
467477
468478# The notary side:
469479notary = Signer.from_jwk(
@@ -762,7 +772,9 @@ encoded = sender.encode(
762772
763773# The recipient side:
764774recipient = COSE .new()
765- assert b " Hello world!" == recipient.decode(encoded, shared_key, context = {" alg" : " A256GCM" })
775+ assert b " Hello world!" == recipient.decode(
776+ encoded, shared_key, context = {" alg" : " A256GCM" }
777+ )
766778```
767779
768780#### AES Key Wrap for encryption
@@ -816,9 +828,9 @@ pub_key = COSEKey.from_jwk(
816828 }
817829)
818830r = Recipient.new(
819- unprotected = {" alg" : " ECDH-ES+HKDF-256" },
820- recipient_key = pub_key,
821- context = {" alg" : " A128GCM" },
831+ unprotected = {" alg" : " ECDH-ES+HKDF-256" },
832+ recipient_key = pub_key,
833+ context = {" alg" : " A128GCM" },
822834)
823835sender = COSE .new(alg_auto_inclusion = True )
824836encoded = sender.encode(
@@ -839,7 +851,9 @@ priv_key = COSEKey.from_jwk(
839851 " d" : " r_kHyZ-a06rmxM3yESK84r1otSg-aQcVStkRhA-iCM8" ,
840852 }
841853)
842- assert b " Hello world!" == recipient.decode(encoded, priv_key, context = {" alg" : " A128GCM" })
854+ assert b " Hello world!" == recipient.decode(
855+ encoded, priv_key, context = {" alg" : " A128GCM" }
856+ )
843857```
844858
845859#### Key Agreement with Key Wrap for encryption
@@ -870,10 +884,10 @@ s_priv_key = COSEKey.from_jwk(
870884 }
871885)
872886r = Recipient.new(
873- unprotected = {" alg" : " ECDH-SS+A128KW" },
874- sender_key = s_priv_key,
875- recipient_key = r_pub_key,
876- context = {" alg" : " A128GCM" },
887+ unprotected = {" alg" : " ECDH-SS+A128KW" },
888+ sender_key = s_priv_key,
889+ recipient_key = r_pub_key,
890+ context = {" alg" : " A128GCM" },
877891)
878892sender = COSE .new(alg_auto_inclusion = True )
879893encoded = sender.encode(
@@ -896,7 +910,9 @@ r_priv_key = COSEKey.from_jwk(
896910 " d" : " r_kHyZ-a06rmxM3yESK84r1otSg-aQcVStkRhA-iCM8" ,
897911 }
898912)
899- assert b " Hello world!" == recipient.decode(encoded, r_priv_key, context = {" alg" : " A128GCM" })
913+ assert b " Hello world!" == recipient.decode(
914+ encoded, r_priv_key, context = {" alg" : " A128GCM" }
915+ )
900916```
901917
902918#### Countersign (Encrypt)
@@ -1243,14 +1259,16 @@ from cwt import Claims, COSEKey
12431259
12441260try :
12451261 key = COSEKey.generate_symmetric_key(alg = " HS256" , kid = " 01" )
1246- token = cwt.encode({" iss" : " coaps://as.example" , " sub" : " dajiaji" , " cti" : " 123" }, key)
1262+ token = cwt.encode(
1263+ {" iss" : " coaps://as.example" , " sub" : " dajiaji" , " cti" : " 123" }, key
1264+ )
12471265 decoded = cwt.decode(token, key)
12481266
12491267 # If you want to treat the result like a JWT;
12501268 readable = Claims.new(decoded)
1251- assert readable.iss == ' coaps://as.example'
1252- assert readable.sub == ' dajiaji'
1253- assert readable.cti == ' 123'
1269+ assert readable.iss == " coaps://as.example"
1270+ assert readable.sub == " dajiaji"
1271+ assert readable.cti == " 123"
12541272 # readable.exp == 1620088759
12551273 # readable.nbf == 1620085159
12561274 # readable.iat == 1620085159
@@ -1272,7 +1290,14 @@ import cwt
12721290from cwt import COSEKey, CWTClaims
12731291
12741292key = COSEKey.generate_symmetric_key(alg = " HS256" , kid = " 01" )
1275- token = cwt.encode({CWTClaims.ISS : " coaps://as.example" , CWTClaims.SUB : " dajiaji" , CWTClaims.CTI : b " 123" }, key)
1293+ token = cwt.encode(
1294+ {
1295+ CWTClaims.ISS : " coaps://as.example" ,
1296+ CWTClaims.SUB : " dajiaji" ,
1297+ CWTClaims.CTI : b " 123" ,
1298+ },
1299+ key,
1300+ )
12761301decoded = cwt.decode(token, key)
12771302```
12781303
@@ -1314,27 +1339,31 @@ import cwt
13141339from cwt import COSEKey
13151340
13161341# The sender side:
1317- private_key = COSEKey.from_jwk({
1318- " kid" : " 01" ,
1319- " kty" : " OKP" ,
1320- " key_ops" : [" sign" ],
1321- " alg" : " EdDSA" ,
1322- " crv" : " Ed25519" ,
1323- " x" : " 2E6dX83gqD_D0eAmqnaHe1TC1xuld6iAKXfw2OVATr0" ,
1324- " d" : " L8JS08VsFZoZxGa9JvzYmCWOwg7zaKcei3KZmYsj7dc" ,
1325- })
1342+ private_key = COSEKey.from_jwk(
1343+ {
1344+ " kid" : " 01" ,
1345+ " kty" : " OKP" ,
1346+ " key_ops" : [" sign" ],
1347+ " alg" : " EdDSA" ,
1348+ " crv" : " Ed25519" ,
1349+ " x" : " 2E6dX83gqD_D0eAmqnaHe1TC1xuld6iAKXfw2OVATr0" ,
1350+ " d" : " L8JS08VsFZoZxGa9JvzYmCWOwg7zaKcei3KZmYsj7dc" ,
1351+ }
1352+ )
13261353token = cwt.encode(
13271354 {" iss" : " coaps://as.example" , " sub" : " dajiaji" , " cti" : " 123" }, private_key
13281355)
13291356
13301357# The recipient side:
1331- public_key = COSEKey.from_jwk({
1332- " kid" : " 01" ,
1333- " kty" : " OKP" ,
1334- " key_ops" : [" verify" ],
1335- " crv" : " Ed25519" ,
1336- " x" : " 2E6dX83gqD_D0eAmqnaHe1TC1xuld6iAKXfw2OVATr0" ,
1337- })
1358+ public_key = COSEKey.from_jwk(
1359+ {
1360+ " kid" : " 01" ,
1361+ " kty" : " OKP" ,
1362+ " key_ops" : [" verify" ],
1363+ " crv" : " Ed25519" ,
1364+ " x" : " 2E6dX83gqD_D0eAmqnaHe1TC1xuld6iAKXfw2OVATr0" ,
1365+ }
1366+ )
13381367decoded = cwt.decode(token, public_key)
13391368```
13401369
@@ -1350,7 +1379,9 @@ import cwt
13501379from cwt import COSEKey
13511380
13521381enc_key = COSEKey.generate_symmetric_key(alg = " ChaCha20/Poly1305" , kid = " 01" )
1353- token = cwt.encode({" iss" : " coaps://as.example" , " sub" : " dajiaji" , " cti" : " 123" }, enc_key)
1382+ token = cwt.encode(
1383+ {" iss" : " coaps://as.example" , " sub" : " dajiaji" , " cti" : " 123" }, enc_key
1384+ )
13541385decoded = cwt.decode(token, enc_key)
13551386```
13561387
@@ -1397,7 +1428,7 @@ If you want to change the settings, you can create your own `CWT` class instance
13971428from cwt import COSEKey, CWT
13981429
13991430key = COSEKey.generate_symmetric_key(alg = " HS256" , kid = " 01" )
1400- mycwt = CWT .new(expires_in = 3600 * 24 , leeway = 10 )
1431+ mycwt = CWT .new(expires_in = 3600 * 24 , leeway = 10 )
14011432token = mycwt.encode({" iss" : " coaps://as.example" , " sub" : " dajiaji" , " cti" : " 123" }, key)
14021433decoded = mycwt.decode(token, key)
14031434```
@@ -1621,7 +1652,7 @@ import cwt
16211652from cwt import Claims, COSEKey
16221653
16231654# The sernder side:
1624- with open (" ./private_key_of_cert.pem" )) as f:
1655+ with open (" ./private_key_of_cert.pem" ) as f:
16251656 private_key = COSEKey.from_pem(f.read(), kid = " 01" )
16261657
16271658token = cwt.encode(
@@ -1638,13 +1669,14 @@ public_key = COSEKey.from_jwk(
16381669 " x" : " oONCv1QoiajIbcW21Dqy6EnGvBTuF26GU7dy6JzOfXk" ,
16391670 " y" : " sl6k77K0TS36FW-TyEGLHY14ovZfdZ9DZWsbA8BTHGc" ,
16401671 " x5c" : [
1641- # The DER formatted X509 certificate which pairs with the private_key_of_cert.pem above.
1642- " MIIClDCCAXygAwIBAgIBBDANBgkqhkiG9w0BAQsFADBmMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xEDAOBgNVBAoMB2RhamlhamkxEzARBgNVBAMMCnB5dGhvbi1jd3QxIDAeBgkqhkiG9w0BCQEWEWRhamlhamlAZ21haWwuY29tMB4XDTIxMTAwMzEzMDE1MFoXDTMxMTAwMTEzMDE1MFowZDELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMQ0wCwYDVQQKDAR0ZXN0MRUwEwYDVQQDDAx0ZXN0LmV4YW1wbGUxHzAdBgkqhkiG9w0BCQEWEHRlc3RAZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASg40K_VCiJqMhtxbbUOrLoSca8FO4XboZTt3LonM59ebJepO-ytE0t-hVvk8hBix2NeKL2X3WfQ2VrGwPAUxxnoxowGDAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DANBgkqhkiG9w0BAQsFAAOCAQEAZFfvFbaDk_DmG2cPGTwqwnFok1QnH2Tzkjk7p4vs1ycWzEDltkhyzcJxTSHoQGdykf7fG8NCrEqfi1G3hOyAtGxVIVcqsI-KIJCESp43zrNz5HsbwEY8l5rvcwohKGlE_idIFt5IuDTv7vsg_FaCIDeruw0NrXAACnLTwksawsxaCvtY12U0wsI2aC2Sb6V3HL-OLgcN6ZWzZ054L88JllckYnqJB8wCVBzzX2K2sZH3yeS39oRWZOVG6fwXsX4k0fHFx-Fn6KlrBU15pbjMLMn0ow0X3Y8e7FOgfkkph-N7e2SxceXNjrLiumOdclPm9yGSWoGsOJdId53dPvqAsQ" ,
1643- # The root certificate which is used for signing the above certificate (optional).
1644- "MIIDrzCCApegAwIBAgIUIK_CYzdq4BLLVXqSclNBgXy6mgswDQYJKoZIhvcNAQELBQAwZjELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMRAwDgYDVQQKDAdkYWppYWppMRMwEQYDVQQDDApweXRob24tY3d0MSAwHgYJKoZIhvcNAQkBFhFkYWppYWppQGdtYWlsLmNvbTAgFw0yMTEwMDIyMzU0NTZaGA8yMDcxMDkyMDIzNTQ1NlowZjELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMRAwDgYDVQQKDAdkYWppYWppMRMwEQYDVQQDDApweXRob24tY3d0MSAwHgYJKoZIhvcNAQkBFhFkYWppYWppQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFg4sw-uPWbPBbkJuohXc89O0gaqG1H2i1wzxxka32XNKIdwrxOJvsB2eALo3q7dTqLKCgzrjdd5N07gi0KzqjoIXIXqKpV5tm0fP5gCzEOWgxySCfBJOJyyvO6WvYXdvukEBnL-48D8RSjQH9fQEju5RG0taFZE-0nQ7n3P0J-Q-OfBUEoRiHvCd8oUx0s-fBpKdfhMAbD1sGAQ9CokUFeWc49em8inNqia5xljBtSYo6_2Zx9eb7B53wvBC0EmtS4SRyksR2emlr6GxMj_EZW7hcTfZCM4V2JYXliuAEdxA0sB7q-WqLg4OvltBQxCBgTTEXRCzxj3XXZy7QyUacCAwEAAaNTMFEwHQYDVR0OBBYEFA9id2cL_Chjv6liRN3HD849TARsMB8GA1UdIwQYMBaAFA9id2cL_Chjv6liRN3HD849TARsMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAArIej5eJN1OmD3l3ef9QzosCxKThNwqNY55CoSSC3IRl-IAXy9Lvx7cgiliwBgCv99RbXZ1ZnptTHC_1kzMzPhPg9pGKDowFP-rywaB9-NTuHTWQ4hkKDsru5dpf75ILNI5PTUi1iiBM7TdgSerpEVroUWZiOpGAdlKkmE1h4gkR6eQY9Q0IvVXwagy_PPoQ1XO1i5Hyg3aXeDZBgkE7AuW9uxtYQHzg8JG2TNko_yp497yf_Ew4t6KzGDhSa8L1euMPtclALDWFhgl6WmYsHOqAOsyZOLwpsifWa533wI9mtTvLEg8TFKMOdU0sbAoQSbrrI9m4QS7mzDLchngj3E"
1672+ # The DER formatted X509 certificate which pairs with the private_key_of_cert.pem above.
1673+ " MIIClDCCAXygAwIBAgIBBDANBgkqhkiG9w0BAQsFADBmMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xEDAOBgNVBAoMB2RhamlhamkxEzARBgNVBAMMCnB5dGhvbi1jd3QxIDAeBgkqhkiG9w0BCQEWEWRhamlhamlAZ21haWwuY29tMB4XDTIxMTAwMzEzMDE1MFoXDTMxMTAwMTEzMDE1MFowZDELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMQ0wCwYDVQQKDAR0ZXN0MRUwEwYDVQQDDAx0ZXN0LmV4YW1wbGUxHzAdBgkqhkiG9w0BCQEWEHRlc3RAZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASg40K_VCiJqMhtxbbUOrLoSca8FO4XboZTt3LonM59ebJepO-ytE0t-hVvk8hBix2NeKL2X3WfQ2VrGwPAUxxnoxowGDAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DANBgkqhkiG9w0BAQsFAAOCAQEAZFfvFbaDk_DmG2cPGTwqwnFok1QnH2Tzkjk7p4vs1ycWzEDltkhyzcJxTSHoQGdykf7fG8NCrEqfi1G3hOyAtGxVIVcqsI-KIJCESp43zrNz5HsbwEY8l5rvcwohKGlE_idIFt5IuDTv7vsg_FaCIDeruw0NrXAACnLTwksawsxaCvtY12U0wsI2aC2Sb6V3HL-OLgcN6ZWzZ054L88JllckYnqJB8wCVBzzX2K2sZH3yeS39oRWZOVG6fwXsX4k0fHFx-Fn6KlrBU15pbjMLMn0ow0X3Y8e7FOgfkkph-N7e2SxceXNjrLiumOdclPm9yGSWoGsOJdId53dPvqAsQ" ,
1674+ # The root certificate which is used for signing the above certificate (optional).
1675+ "MIIDrzCCApegAwIBAgIUIK_CYzdq4BLLVXqSclNBgXy6mgswDQYJKoZIhvcNAQELBQAwZjELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMRAwDgYDVQQKDAdkYWppYWppMRMwEQYDVQQDDApweXRob24tY3d0MSAwHgYJKoZIhvcNAQkBFhFkYWppYWppQGdtYWlsLmNvbTAgFw0yMTEwMDIyMzU0NTZaGA8yMDcxMDkyMDIzNTQ1NlowZjELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMRAwDgYDVQQKDAdkYWppYWppMRMwEQYDVQQDDApweXRob24tY3d0MSAwHgYJKoZIhvcNAQkBFhFkYWppYWppQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFg4sw-uPWbPBbkJuohXc89O0gaqG1H2i1wzxxka32XNKIdwrxOJvsB2eALo3q7dTqLKCgzrjdd5N07gi0KzqjoIXIXqKpV5tm0fP5gCzEOWgxySCfBJOJyyvO6WvYXdvukEBnL-48D8RSjQH9fQEju5RG0taFZE-0nQ7n3P0J-Q-OfBUEoRiHvCd8oUx0s-fBpKdfhMAbD1sGAQ9CokUFeWc49em8inNqia5xljBtSYo6_2Zx9eb7B53wvBC0EmtS4SRyksR2emlr6GxMj_EZW7hcTfZCM4V2JYXliuAEdxA0sB7q-WqLg4OvltBQxCBgTTEXRCzxj3XXZy7QyUacCAwEAAaNTMFEwHQYDVR0OBBYEFA9id2cL_Chjv6liRN3HD849TARsMB8GA1UdIwQYMBaAFA9id2cL_Chjv6liRN3HD849TARsMA8GA1UdEwEB_wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAArIej5eJN1OmD3l3ef9QzosCxKThNwqNY55CoSSC3IRl-IAXy9Lvx7cgiliwBgCv99RbXZ1ZnptTHC_1kzMzPhPg9pGKDowFP-rywaB9-NTuHTWQ4hkKDsru5dpf75ILNI5PTUi1iiBM7TdgSerpEVroUWZiOpGAdlKkmE1h4gkR6eQY9Q0IvVXwagy_PPoQ1XO1i5Hyg3aXeDZBgkE7AuW9uxtYQHzg8JG2TNko_yp497yf_Ew4t6KzGDhSa8L1euMPtclALDWFhgl6WmYsHOqAOsyZOLwpsifWa533wI9mtTvLEg8TFKMOdU0sbAoQSbrrI9m4QS7mzDLchngj3E",
16451676 ],
1646- " alg" : " ES256"
1647- })
1677+ " alg" : " ES256" ,
1678+ }
1679+ )
16481680
16491681# The recipient can specify trusted CAs as follows:
16501682decoder = CWT .new(ca_certs = " /path/to/cacerts.pem" )
0 commit comments