diff --git a/sdk/keyvault/keyvault-keys/CHANGELOG.md b/sdk/keyvault/keyvault-keys/CHANGELOG.md index 4dc84e6f9656..47759adda1c8 100644 --- a/sdk/keyvault/keyvault-keys/CHANGELOG.md +++ b/sdk/keyvault/keyvault-keys/CHANGELOG.md @@ -4,6 +4,10 @@ ### Features Added +- Added support for Secure key Release from a Managed HSM. + - Added `KeyClient.releaseKey` to release a key from a Managed HSM. + - Added `exportable` and `releasePolicy` to `KeyVaultKey.properties`, `createKeyOptions`, and `importKeyOptions` in order to specify whether the key is exportable and the associated release policy. + ### Breaking Changes ### Bugs Fixed diff --git a/sdk/keyvault/keyvault-keys/karma.conf.js b/sdk/keyvault/keyvault-keys/karma.conf.js index 1b46936fbd6c..7dec62fb5783 100644 --- a/sdk/keyvault/keyvault-keys/karma.conf.js +++ b/sdk/keyvault/keyvault-keys/karma.conf.js @@ -48,6 +48,7 @@ module.exports = function(config) { "KEYVAULT_NAME", "KEYVAULT_URI", "AZURE_MANAGEDHSM_URI", + "AZURE_KEYVAULT_ATTESTATION_URI", "TEST_MODE" ], diff --git a/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_create_an_exportable_key_and_release_it.json b/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_create_an_exportable_key_and_release_it.json new file mode 100644 index 000000000000..9abe79cd4a6d --- /dev/null +++ b/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_create_an_exportable_key_and_release_it.json @@ -0,0 +1,119 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://skrattestation.azurewebsites.net//generate-test-token", + "query": {}, + "requestBody": null, + "status": 200, + "response": "{\"token\":\"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiJxOHNpZ2trZDNHVTNjdnVaY2syUTBMVmtkWHdQUktNS05GV1RYUzczQ1J0YVBxNkVSV0VHQ2ZZMkdOR3UzZGstUXpzYWcyX1gyRjdreGVnS09oNDQwQm5ONlZ4NGFJZlRLcXlEbW1HdFo4bDdqQ3QtNEJUSmhLaV9jcU9xQkpVZFZXMmthQ3lYSUhTRUxDOTE5UDJWVVBnMTZBRFNhd19oandSQ0Fvek9JNEJHR09rV2h2QV9aVGVfVG1HNXNnU3I1cEFDTU93YXo3UzR6MFVWT3pXTUQ2c2ljdW82bjBtQl9scy04VTVxa2xueGp0SUd3a0FnTWFqaHp0c1ZZTnk1X254eEF0M0pWVWppaGN4OHJDMFUxWGZxU0JIV0xUTVlHTHp3LXhidWlDNmlhbHBQODJIMUkwelZIcTRSc3pVQ3RwcERzZmNaYkwwYlRXUHFPVXVKcHcifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyNDUsImV4cCI6MTk0MjY2NDI0NX0.SSYB9PW_94C-EYg9ZKTI0qvUPAX-Mgzj3kymIrWMFnyULn7O9O3s8XrtjFSvJeSMayibePuajC3Lr2E4jC96mpKJPKrNn3VYjsnOsCDYZfKCU4lOssGzkfoNMgvKgQRBeguBputfSdZKz8opCLjQqN2GgEPyEN27dsf3yfmrkn-C0t0bRxFxJsyQY81-pyPX2HprxZqEXOSSv-0BJDa9EFHqlFTN7eybRSDvqNbFW95sdWwIVhZgA3jf3wAX-vkQLgbxpON0BFKkcppAcV-TOLHNdY-TDidXN2z-33APdX4Uf5xPDi0NUBKHOZinzpd0JShhcmBGdKyr2TNtDteUZA\"}", + "responseHeaders": { + "content-length": "1305", + "content-type": "application/json; charset=utf-8", + "date": "Sat, 24 Jul 2021 00:57:24 GMT", + "etag": "W/\"519-gQG+KMRJ8cEJ5UemMq0VcK8Qwjo\"", + "status": "200", + "x-powered-by": "Express" + } + }, + { + "method": "POST", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/exportkey162708824569905873/create", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "", + "status": 401, + "response": "", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "0", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "www-authenticate": "Bearer authorization=\"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012\", resource=\"https://managedhsm.azure.net\"", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-request-id": "1c8d380c-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "0" + } + }, + { + "method": "POST", + "url": "https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token", + "query": {}, + "requestBody": "response_type=token&grant_type=client_credentials&client_id=azure_client_id&client_secret=azure_client_secret&scope=https%3A%2F%2Fsanitized%2F", + "status": 200, + "response": "{\"token_type\":\"Bearer\",\"expires_in\":86399,\"ext_expires_in\":86399,\"access_token\":\"access_token\"}", + "responseHeaders": { + "cache-control": "no-store, no-cache", + "content-length": "1322", + "content-type": "application/json; charset=utf-8", + "date": "Sat, 24 Jul 2021 00:57:25 GMT", + "expires": "-1", + "nel": "{\"report_to\":\"network-errors\",\"max_age\":86400,\"success_fraction\":0.001,\"failure_fraction\":1.0}", + "p3p": "CP=\"DSP CUR OTPi IND OTRi ONL FIN\"", + "pragma": "no-cache", + "referrer-policy": "strict-origin-when-cross-origin", + "report-to": "{\"group\":\"network-errors\",\"max_age\":86400,\"endpoints\":[{\"url\":\"https://identity.nel.measure.office.net/api/report?catId=GW+estsfd+san\"}]}", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-ests-server": "2.1.11898.8 - NCUS ProdSlices", + "x-ms-request-id": "eaa536bb-bbd6-40e9-884c-63eac7662400" + } + }, + { + "method": "POST", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/exportkey162708824569905873/create", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "{\"kty\":\"RSA\",\"key_ops\":[\"encrypt\",\"decrypt\"],\"attributes\":{\"exportable\":true},\"release_policy\":{\"data\":\"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJjb25kaXRpb24iOiJlcXVhbHMiLCJ2YWx1ZSI6InRydWUifV0sImF1dGhvcml0eSI6Imh0dHBzOi8vc2tyYXR0ZXN0YXRpb24uYXp1cmV3ZWJzaXRlcy5uZXQvIn1dLCJ2ZXJzaW9uIjoiMS4wIn0\"}}", + "status": 200, + "response": "{\"attributes\":{\"created\":1627088246,\"enabled\":true,\"exportable\":true,\"recoverableDays\":7,\"recoveryLevel\":\"CustomizedRecoverable+Purgeable\",\"updated\":1627088246},\"key\":{\"e\":\"AQAB\",\"key_ops\":[\"decrypt\",\"encrypt\"],\"kid\":\"https://azure_managedhsm.managedhsm.azure.net/keys/exportkey162708824569905873/25ae059eb8850ae8a623a72f7fe5e731\",\"kty\":\"RSA-HSM\",\"n\":\"j1zOvQBDuS8gqIdpA2Cv7g8SgmjPpEkdDrsDIn_BS8XQU06z4GUrSHQCH1avhrIbLBrYYSqp612UmCjdV3YuMyGGtnLq_33uOPP3PWi0U2B_sUvlomaaDSs5r2UDjTD6rW9bmV6rqojxcoJjYwVVn4ZFFV1TwBLnsPoYDYlDd-jCDoIYCmif7EWsL5ffX5PgBfMNeCtkeg9GtYdYnH39H2FmuUFUZU4ZzBrWqfYZ8-dh9HgcTjbY1EBO_2XuMNmflNuhssRj3yBmlAH6w0OHKN18LE-8mEvGE8dUcOOwM-omnnbKqd_eJT74U1SlwHOhkTx4QSc0IRbixEI9DkJvDQ\"},\"release_policy\":{\"contentType\":\"application/json; charset=utf-8\",\"data\":\"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJlcXVhbHMiOiJ0cnVlIn1dLCJhdXRob3JpdHkiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyJ9XSwidmVyc2lvbiI6IjEuMC4wIn0\"}}", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "952", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=50.35.231.105;act_addr_fam=Ipv4;", + "x-ms-keyvault-region": "eastus2", + "x-ms-request-id": "1ccb359e-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "688" + } + }, + { + "method": "POST", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/exportkey162708824569905873//release", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "{\"target\":\"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiJxOHNpZ2trZDNHVTNjdnVaY2syUTBMVmtkWHdQUktNS05GV1RYUzczQ1J0YVBxNkVSV0VHQ2ZZMkdOR3UzZGstUXpzYWcyX1gyRjdreGVnS09oNDQwQm5ONlZ4NGFJZlRLcXlEbW1HdFo4bDdqQ3QtNEJUSmhLaV9jcU9xQkpVZFZXMmthQ3lYSUhTRUxDOTE5UDJWVVBnMTZBRFNhd19oandSQ0Fvek9JNEJHR09rV2h2QV9aVGVfVG1HNXNnU3I1cEFDTU93YXo3UzR6MFVWT3pXTUQ2c2ljdW82bjBtQl9scy04VTVxa2xueGp0SUd3a0FnTWFqaHp0c1ZZTnk1X254eEF0M0pWVWppaGN4OHJDMFUxWGZxU0JIV0xUTVlHTHp3LXhidWlDNmlhbHBQODJIMUkwelZIcTRSc3pVQ3RwcERzZmNaYkwwYlRXUHFPVXVKcHcifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyNDUsImV4cCI6MTk0MjY2NDI0NX0.SSYB9PW_94C-EYg9ZKTI0qvUPAX-Mgzj3kymIrWMFnyULn7O9O3s8XrtjFSvJeSMayibePuajC3Lr2E4jC96mpKJPKrNn3VYjsnOsCDYZfKCU4lOssGzkfoNMgvKgQRBeguBputfSdZKz8opCLjQqN2GgEPyEN27dsf3yfmrkn-C0t0bRxFxJsyQY81-pyPX2HprxZqEXOSSv-0BJDa9EFHqlFTN7eybRSDvqNbFW95sdWwIVhZgA3jf3wAX-vkQLgbxpON0BFKkcppAcV-TOLHNdY-TDidXN2z-33APdX4Uf5xPDi0NUBKHOZinzpd0JShhcmBGdKyr2TNtDteUZA\"}", + "status": 200, + "response": "{\"value\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6IlU0NXdTcDZrT2tQZUQxX2M1WURSZlVHb0JseThxSDlHMTlaZnVGVkx5WWsiLCJ4NWMiOlsiTUlJSW1UQ0NCb0dnQXdJQkFnSVRNd0FXKzlEby9manlOampiYkFBQUFCYjcwREFOQmdrcWhraUc5dzBCQVF3RkFEQlpNUXN3Q1FZRFZRUUdFd0pWVXpFZU1Cd0dBMVVFQ2hNVlRXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVNU293S0FZRFZRUURFeUZOYVdOeWIzTnZablFnUVhwMWNtVWdWRXhUSUVsemMzVnBibWNnUTBFZ01EVXdIaGNOTWpFd056STBNREF6T0RNNFdoY05Nakl3TnpFNU1EQXpPRE00V2pCOU1Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DVjBFeEVEQU9CZ05WQkFjVEIxSmxaRzF2Ym1ReEhqQWNCZ05WQkFvVEZVMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiakV2TUMwR0ExVUVBd3dtS2k1dFlXeGxaMlZ6YTNKbGJqSm9jMjB1YldGdVlXZGxaR2h6YlM1aGVuVnlaUzV1WlhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURoSjZnSlljek5VbnBrZmgrNktXbXk5UnRXYm1RMXIxaEpoK2tnc3pCc2F0UW9zaEpWa1IzMWxFdkU4dUJtalA5TnNwSHY3SHJWVHRRcVFtcDVwNUw1UGRacys5ZVUwdHBWdGhWUGxqUE5iN1REaUZrWWlPV0JuVXFOaFQwQ1RGVHpRWWV1NUZOazV0QkhvbGloVWRwVVZWUjJXZkpQSWNIY3h6SFBIcjRMeEwza0liZFc5aXdEdlYwSlFnU2MvSmp6OWZXK092SWlKMUpNdXBsbndOc2VhTVo2U0hrdVN1enp4MnBYQWgwck9XUDZ6ZGJXUVpvZjBMN3VRK0VqTTFiQW1SMU5NbWN1V2tLeUkzaTJEblJraEpMRDlZdlcrcWkvMzBDbWVSRWQxczd1UkZkRGxsdCtOVFYxMit1OWZ2Z1ZlWHhGVHA4U3Z3dW1XWTFpVVhRZkFnTUJBQUdqZ2dRME1JSUVNRENDQVg0R0Npc0dBUVFCMW5rQ0JBSUVnZ0Z1QklJQmFnRm9BSFlBN2t1OXQzWE9ZTHJoUW1rZnErR2VacU1QZmwrd2N0aURBTVI3aVhxby9jc0FBQUY2MWZ4THFnQUFCQU1BUnpCRkFpQmNYYm9NSUk1OUdRTVZpdDJGMkkzTTF0RDhNMDJlSTFJVVRyRXkvbWlSY1FJaEFOY256QTdzUWJ3Q3lNQXdadUVxUDlLNGFGNDU2aGpESjVSOE9EamRhUkhDQUhZQVFjaktzZDhpUmtvUXhxRTZDVUtIWGs0eGl4c0Q2K3RMeDJqd2tHS1dCdllBQUFGNjFmeEwrZ0FBQkFNQVJ6QkZBaUVBalBoclZpZDYxMjh4cjV3UFI0bytCQ0FYbUpTTHY0MVhsZE9zaU9uYWVmQUNJQmp1Z242UUd5ZjA1RXU1L3lsNjVabmJvbFhodUZmT2NJRlNoTm1EZFFUSkFIWUFVYU93OWYwQmVaeFdiYmczZUk4TXBIck1HeWZMOTU2SVFwb04vdFNMQmVVQUFBRjYxZnhNSUFBQUJBTUFSekJGQWlFQW1wK2JXMXFrUWZkaWJQOEoreUh1SC92L0ExZk9MaGVQcVIwSnpJVVBhMjRDSUgzS2FZc3Z6RnNES3FsZm1YZ2E4UlhYWHM4T0d5WkhHY0U3dGx6TEJFSkFNQ2NHQ1NzR0FRUUJnamNWQ2dRYU1CZ3dDZ1lJS3dZQkJRVUhBd0l3Q2dZSUt3WUJCUVVIQXdFd1BBWUpLd1lCQkFHQ054VUhCQzh3TFFZbEt3WUJCQUdDTnhVSWg3M1hHNEhuNjBhQ2daMHVqdEFNaC9EYUhWMkNoT1ZwZ3ZPblBnSUJaQUlCSXpDQnJnWUlLd1lCQlFVSEFRRUVnYUV3Z1o0d2JRWUlLd1lCQlFVSE1BS0dZV2gwZEhBNkx5OTNkM2N1YldsamNtOXpiMlowTG1OdmJTOXdhMmx2Y0hNdlkyVnlkSE12VFdsamNtOXpiMlowSlRJd1FYcDFjbVVsTWpCVVRGTWxNakJKYzNOMWFXNW5KVEl3UTBFbE1qQXdOU1V5TUMwbE1qQjRjMmxuYmk1amNuUXdMUVlJS3dZQkJRVUhNQUdHSVdoMGRIQTZMeTl2Ym1WdlkzTndMbTFwWTNKdmMyOW1kQzVqYjIwdmIyTnpjREFkQmdOVkhRNEVGZ1FVZEJLWmN4NnRITWw4MVFqbkpqSGFkNjRqdEwwd0RnWURWUjBQQVFIL0JBUURBZ1N3TUZjR0ExVWRFUVJRTUU2Q0ppb3ViV0ZzWldkbGMydHlaVzR5YUhOdExtMWhibUZuWldSb2MyMHVZWHAxY21VdWJtVjBnaVJ0WVd4bFoyVnphM0psYmpKb2MyMHViV0Z1WVdkbFpHaHpiUzVoZW5WeVpTNXVaWFF3WkFZRFZSMGZCRjB3V3pCWm9GZWdWWVpUYUhSMGNEb3ZMM2QzZHk1dGFXTnliM052Wm5RdVkyOXRMM0JyYVc5d2N5OWpjbXd2VFdsamNtOXpiMlowSlRJd1FYcDFjbVVsTWpCVVRGTWxNakJKYzNOMWFXNW5KVEl3UTBFbE1qQXdOUzVqY213d1pnWURWUjBnQkY4d1hUQlJCZ3dyQmdFRUFZSTNUSU45QVFFd1FUQS9CZ2dyQmdFRkJRY0NBUll6YUhSMGNEb3ZMM2QzZHk1dGFXTnliM052Wm5RdVkyOXRMM0JyYVc5d2N5OUViMk56TDFKbGNHOXphWFJ2Y25rdWFIUnRNQWdHQm1lQkRBRUNBakFmQmdOVkhTTUVHREFXZ0JUSHNweC9IT080V3UvcGFCcW9YWlRCSmxKcWFEQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBZ1lJS3dZQkJRVUhBd0V3RFFZSktvWklodmNOQVFFTUJRQURnZ0lCQUtkcWp3TlEzd1NlbWpma3VmaHFPQXpZNUZzRmMvQ3NIenltOFhNTkRwTzNhUjFCRkM0VFlyQ0dQdmFBZ2FDcjZPUlpVYmpKVHliWWxzMDBVYjJwM2lyUlVOdXJMNlcrQlROZUczNFBWTFVHaFBLVG9TZ0p6Q2t0ZzNkY2dHL2ZHMmd6Zmp4SFl1UEFiN3pwRlFjY1c1d1pIeTg2eEhlRVdadkdsR014c21DSTNJbGpaVXg2bnBQWSs5ZGhqYmRrN0hmUTRFMTRZOFFXaXBsR1dUY04zVE1GY0RiRVpCdlY0SjZsblptWHJINlZMbkdBbi9Tc0ozbFZNbXdpNGNvQWJkM3VWaTZZQm9CZDVmY1lTV2JFYmRjcG1JOVdVNUhOMGtRUmFMYTdkVE1mK0hnSkp6QlFUWFNybWJ2aGVFWklkWnlLY3BNSWluQUZyZGJMRWphZEVORW90MzJ1T2Z1eVpXeXAvcGg1bWFoaC9HSkJCZ3NvRzJzL3o4YzRoMVFneC9KQ0JKS09VRWF3WXQ2UTZSL3Byaklnc2Q0RXZuWGhtbS93djJHeDFHa0NVQ2RpcW5aZ09CQ3RKYWpNUnBiczVQblYwajczTFROUHp4TmpyWjFrM2ZkL1Y4dzFIb1hYSDBZTHoxc25idzJPSlpEMzRJMk8zVVlrV3pPR1lzMUVWUWtXZWJtdlVjVjNOK291UUFXK0gxY0hmR01memt0Q0tSdkFUNHI0b3FIY0p6dVdSeVcvM2VNNEdCOUdzY01kTFBNdEJjVkplU29YTkRqWDh6cWw5RnlyUWROaWUyTS9YNEozc0ZTNG9hMGx5SmhsRU11d2dWbytSc01SQm8valFiZ3ZsSXZsWmdaem95TU9WNlB3c1E5b3lQNEl5ZjB2eVVLejkzS3RkNWxmIiwiTUlJRjh6Q0NCTnVnQXdJQkFnSVFEWHZ0NlgyQ0NaWjZVbU1iaTkwWXZUQU5CZ2txaGtpRzl3MEJBUXdGQURCaE1Rc3dDUVlEVlFRR0V3SlZVekVWTUJNR0ExVUVDaE1NUkdsbmFVTmxjblFnU1c1ak1Sa3dGd1lEVlFRTEV4QjNkM2N1WkdsbmFXTmxjblF1WTI5dE1TQXdIZ1lEVlFRREV4ZEVhV2RwUTJWeWRDQkhiRzlpWVd3Z1VtOXZkQ0JITWpBZUZ3MHlNREEzTWpreE1qTXdNREJhRncweU5EQTJNamN5TXpVNU5UbGFNRmt4Q3pBSkJnTlZCQVlUQWxWVE1SNHdIQVlEVlFRS0V4Vk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR4S2pBb0JnTlZCQU1USVUxcFkzSnZjMjltZENCQmVuVnlaU0JVVEZNZ1NYTnpkV2x1WnlCRFFTQXdOVENDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFLcGxEVG1ROWFmd1ZQUWVsRHV1K05reE5KMDg0Q05LbnJaMjFBQmV3RStVVTRHS0Rud3lnWmRLNmFnTlNNczVVb2NoVUVEeno5Q3BkVjV0ZFB6TDE0Ty9HZUUyZ081L2FVRlRVTUc5YzZuZXl4azV0cTFXZEtzUGtpdFB3czZWOE1XYTVkMUwveTRSRmhaSFVzZ3h4VXlTbFlsR3BOY0hoaHN5cjdFdkZlY1pHQTFNZnNpdEFXVnA2aGlXQU5rV0tJTmZSY2R0M1oyQTIzaG1NSDlNUlNHQmNjSGlQdXp3clZzU21Md3Z0M1dsUkRnT2JKa0U0MHRGWXZKNkdYQVFpYUdIQ0lXU1ZPYmdPM3pqNnhrZGJFRk1tSi96cjJXZXQ1S0VjVUR0VUJoQTRkVVVvYVBWejY5dTQ2VjU2VnNjeTNsWHUxWWxzazg0ajVsVVBMZHNBeHR1bHRQNE9QUW9PVHBuWThreFdrSDZrZ081Z1RLRTNIUnZvVklqVTR4SjBKUTc0Nnp5LzhHZFFBMzZTYU5pejRVM3UxMHpGWmcyUmt2MmRMMUx2NThFWEwwMnI1cTVCL25oVkgvTTFqb1R2cFJ2YWVFcEFKaGtJQTlOa3B2YkdFcFNkY0EwT3J0T09lR3Ryc2lPeU1CWWtqcEI1bncwY0pZMVFIT3Izbkl2SjJPblkrT0tKYkRTcmhGcVdzazgvMXE2WjFXTnZPTno3dGUxcEF0SGVyZFBpNXBDSGVpWENOcHYrZmFkd1AwazhjemFmMlZzMTluWXNnV241dUl5TFFMOEVlaGRCekNiT0tKeTlzbDg2UzRGcWU0SEd5QXRtcUdsYVdPc3EyQTZPL3BhTWkzQlNtV1REYmdQTENQQmJQdGUvYnN1QUVGNGFqa1BFRVMzR0hQOUFnTUJBQUdqZ2dHdE1JSUJxVEFkQmdOVkhRNEVGZ1FVeDdLY2Z4emp1RnJ2NldnYXFGMlV3U1pTYW1nd0h3WURWUjBqQkJnd0ZvQVVUaUpVSUJpVjV1TnU1Zy82K3JrUzdRWVhqemt3RGdZRFZSMFBBUUgvQkFRREFnR0dNQjBHQTFVZEpRUVdNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQU1IWUdDQ3NHQVFVRkJ3RUJCR293YURBa0JnZ3JCZ0VGQlFjd0FZWVlhSFIwY0RvdkwyOWpjM0F1WkdsbmFXTmxjblF1WTI5dE1FQUdDQ3NHQVFVRkJ6QUNoalJvZEhSd09pOHZZMkZqWlhKMGN5NWthV2RwWTJWeWRDNWpiMjB2UkdsbmFVTmxjblJIYkc5aVlXeFNiMjkwUnpJdVkzSjBNSHNHQTFVZEh3UjBNSEl3TjZBMW9ET0dNV2gwZEhBNkx5OWpjbXd6TG1ScFoybGpaWEowTG1OdmJTOUVhV2RwUTJWeWRFZHNiMkpoYkZKdmIzUkhNaTVqY213d042QTFvRE9HTVdoMGRIQTZMeTlqY213MExtUnBaMmxqWlhKMExtTnZiUzlFYVdkcFEyVnlkRWRzYjJKaGJGSnZiM1JITWk1amNtd3dIUVlEVlIwZ0JCWXdGREFJQmdabmdRd0JBZ0V3Q0FZR1o0RU1BUUlDTUJBR0NTc0dBUVFCZ2pjVkFRUURBZ0VBTUEwR0NTcUdTSWIzRFFFQkRBVUFBNElCQVFBZStHK0cyUkZkV3RZeExJS01SNUgvYVZORmpOUDdKZGV1K29aYUthSXU3VTNOaWR5a0ZyOTk0alN4TUJNVjc2OHVrSjUvaExTS3N1ai9TTGptQWZ3UkFaK3cwUkdxaS9rT3ZQWVVsQnIvc0tPd3IzdFZrZzljY1pCZWJuQlZHK0RMS1RwMk94MCtqWUJDUHhsYTVGTzI1MnFwazcvNnd0OFNaazNkaVNVMTJKbTdpZi9qamtoa0dCL2U4VWRmcktvTHl0RHZxVmVpd1BBNUZQenFLb1NxTjc1YnlManNJS0pFZE5pMDdTWTQ1aE4vUlVuc21Jb0FmOTNxbGFIUi9TSldWUmhyV3QzSm1lb0JKMlJESzQ5MnpGNlRHdTFtb2g0YUU2ZTAwWWt3VFBXcmV1d3ZhTEIyMjB2V210Z1pQcytEU0liMmQ5aFBCZENKZ3ZjaG8xYzciLCJNSUlEampDQ0FuYWdBd0lCQWdJUUF6cng1cWNScWFDN0tHU3hIUW42NVRBTkJna3Foa2lHOXcwQkFRc0ZBREJoTVFzd0NRWURWUVFHRXdKVlV6RVZNQk1HQTFVRUNoTU1SR2xuYVVObGNuUWdTVzVqTVJrd0Z3WURWUVFMRXhCM2QzY3VaR2xuYVdObGNuUXVZMjl0TVNBd0hnWURWUVFERXhkRWFXZHBRMlZ5ZENCSGJHOWlZV3dnVW05dmRDQkhNakFlRncweE16QTRNREV4TWpBd01EQmFGdzB6T0RBeE1UVXhNakF3TURCYU1HRXhDekFKQmdOVkJBWVRBbFZUTVJVd0V3WURWUVFLRXd4RWFXZHBRMlZ5ZENCSmJtTXhHVEFYQmdOVkJBc1RFSGQzZHk1a2FXZHBZMlZ5ZEM1amIyMHhJREFlQmdOVkJBTVRGMFJwWjJsRFpYSjBJRWRzYjJKaGJDQlNiMjkwSUVjeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdXpmTk5OeDdhOG15YUpDdFNuWC9Scm9oQ2dpTjlSbFV5ZnVJMi9PdThqcUprVHg2NXFzR0dtdlByQzNvWGdra1JMcGltbjdXbzZoKzRGUjFJQVdzVUxlY1l4cHNNTnphSHhteDF4N2UvZGZneTVTRE42N3NIME5PM1hzczByMHVwUy9rcWJpdE90U1pwTFlsNlp0ckFHQ1NZUDlQSVVrWTkyZVFxMkVHbkkveXV1bTA2Wkl5YTdYelYraGRHODJNSGF1VkJKVko4elV0bHVOSmJkMTM0L3RKUzdTc1ZRZXBqNVd6dENPN1RHMUY4UGFwc3BVd3RQMU1WWXduU2xjVWZJS2R6WE9TMHhaS0JneU1VTkdQSGdtK0Y2SG1JY3I5ZytVUXZJT2xDc1JuS1BaekZCUTlSbmJEaHhTSklUUk5ydzlGREtaSm9icTduTVd4TTRNcGhRSURBUUFCbzBJd1FEQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCaGpBZEJnTlZIUTRFRmdRVVRpSlVJQmlWNXVOdTVnLzYrcmtTN1FZWGp6a3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR0JuS0pSdkRraGo2ekhkNm1jWTFZbDlQTVdMU24vcHZ0c3JGOSt3WDNOM0tqSVRPWUZuUW9RajhrVm5OZXlJdi9pUHNHRU1OS1N1SUV5RXh0djROZUYyMmQrbVFydkhSQWlHZnpaMEpGcmFiQTBVV1RXOThrbmR0aC9Kc3cxSEtqMlpMN3RjdTdYVUlPR1pYMU5HRmR0b20vRHpNTlUrTWVLTmhKN2ppdHJhbGo0MUU2VmY4UGx3VUhCSFFSRlhHVTdBajY0R3hKVVRGeThiSlo5MThyR09tYUZ2RTdGQmNmNklLc2hQRUNCVjEvTVVSZVhnUlBUcWg1VXlrdzcrVTBiNkxKMy9peUs1UzlrSlJhVGVwTGlhV04wYmZWS2ZqbGxEaUlHa25pYlZiNjNkRGNZM2ZlMERraHZsZDE5MjdqeU54RjFXVzZMWlptNnpOVGZsTXJZPSJdLCJ4NXQjUzI1NiI6IlU0NXdTcDZrT2tQZUQxX2M1WURSZlVHb0JseThxSDlHMTlaZnVGVkx5WWsifQ.eyJyZXF1ZXN0Ijp7ImFwaS12ZXJzaW9uIjoiNy4zLXByZXZpZXciLCJlbmMiOiJDS01fUlNBX0FFU19LRVlfV1JBUCIsImtpZCI6Imh0dHBzOi8vbWFsZWdlc2tyZW4yaHNtLm1hbmFnZWRoc20uYXp1cmUubmV0L2tleXMvZXhwb3J0a2V5MTYyNzA4ODI0NTY5OTA1ODczIn0sInJlc3BvbnNlIjp7ImtleSI6eyJhdHRyaWJ1dGVzIjp7ImNyZWF0ZWQiOjE2MjcwODgyNDYsImVuYWJsZWQiOnRydWUsImV4cG9ydGFibGUiOnRydWUsInJlY292ZXJhYmxlRGF5cyI6NywicmVjb3ZlcnlMZXZlbCI6IkN1c3RvbWl6ZWRSZWNvdmVyYWJsZStQdXJnZWFibGUiLCJ1cGRhdGVkIjoxNjI3MDg4MjQ2fSwia2V5Ijp7ImUiOiJBUUFCIiwia2V5X2hzbSI6ImV5SmphWEJvWlhKMFpYaDBJam9pUzFwbVpXMWpPV1p0WVdaUVUwNW1ZakYxVjNadWVsSjJibEpqWDFodlNGZFFhSGQwUzNKdVJuZG1UMFkzY3pGRWF5MDJNMFJOV2xkR2NFUndjWEJUVFdSNmNrRnNTa2t3VVZwWmIydDJNVWxuVFhOdVJIZEljR05FVlVwb1JUZFNaSEJLZWtWTWFVcEhVMVp4TjJ0TmQxQmtSSFF4T0ZGMU9WYzNNa2xPVFhOWFZXZFFlVU5KTUhWUVJWWjZXV05xTlhaaWNIQTFPRnBDU2t3MlMxYzNkMHhuTlVwT1owaHBia2RrTlhSMVlWaFdibFZoYmpGdmNFUkZORFpyYVV4SU0ycFNOVWs0WjJkMVFtdHVjbHA1Umt3M1FYb3hlWGsyUVZoc05EWk9Tazh4U3pKb2VEWkpXRXhOY0VSUFlXcFJVVXh2TFRoa05XNUJUemhRUm1KUWFFdHVXRk5qZVZGb1gybGthbmxHVUVaNVRGRXpVMUF5UkZKUmJuSnFZUzF2TjNBNFNtcGhVbEZEWXprNFJHZFBWMDlmTFhoSGFVOXRaMnhQWVhVM01IcGtNVFUyY25SRGFXRnNjelZYYlRWaVdXRlFkM1puWDFOaVVHbE1jWGhKTUU5Q1NsWk1WemxtU0dwT1F6Wk9keTF0Tm5aWlJXeGxaMXBSTTI1MGJuVnVXRFZqUm1aa1ZXMXRSbTlxVkhnNFVUZzRNelYwYjJaSVYyOUZla2RPTVcxR2FtaEpVM3A1YTNOQ1JXaEpUMmRNTjJWc2FrTllSazVFU0RnMGVXTTRlRWcxYWs1c1RGWkRTVzAxWW5KUlNHZFljR1J5T0RsR1FqRmtOMmMwV2xwUGRubG5kVTFYTkhGRWJrZERibGxyUkZOM2FtSTVNWEZpUkc5R1F6WkpNakZxWTNWVWJXRnRTRXRTV201T2FWWTNNRzVVYkRoS2RESkdPRzlCUmxkQ2NrdGxZVU4xTVRNeldHTjJSM2xTWm5ZNGIwSnFYeTF0TlVsdE1XMUNSM0ptY0hsMGRrZGlOR3B5VW0xZmJsUjZNVzFwY1VVMVVuUjBTMlV0TVdaU1kxWklYMGxLVWpsT1dIaFZjVVoxVFdsTVVUaEVkVGRCWjBSdWVHaElSak5hY25oNU9FMTFPVGRaVTJNMlFVRkZTRTF1Y2xOSlowSk5VamxvWkhSc1ZrdDFXV1ZwV1hKaE5URkVYMVpNTTFKV1lWSmhZbWxXV1RKRFNsTkxjSFo1VFhFeVFVSnFXRTl1TlVKdFVEVjRjM1YwVGxKM1FXVlZMVVZqVG1KS0xWOWliRU5mUldoc1RWcDRlVGN0Ym1KTk1rRldkMWwxVG0xVVJEZFdjVWhsUzB4NFoxOXdSMjVtYzBWbGRHRkdXakJUYW5GT2MxZGxMVlZDYXpKNE9EQjBSblJuZWxwZmFuZHRielZOTW1Sb1QxWkhkSFpCTlRVeWJuazNWazFZTUZkNmJWUmpaa3RZTkZsQlUweHNOV2h0TTFoQkxVcFlSbDlpVGtGU01YQm1iMVpRYzFSVWQySkNZMlZGUzNGYWJEVlJkbmN6ZVVGcVZsbEdUbWxwWkRrNVQzcHpORzlxUmkxTWNrbHJXalphV2xsa1ZtNXZNR04yYlVoa1F5MWlXa1p3YkhwWGNtZEVXRlF4U1VRMFRsQmtWRVJNZG1WRGNGaFlUbkEwYlRWMFh6a3hNMUZIVVd4eGRpMUlXRnBTV1Rod1ZrSnJOR3cxTUcxV1drZGxhR1pHU1RjNE9GSndMVU5ZVlY5aGMxUXpUMkp5VGxCc1NYcDFiazlSUVhCUE1ITTFTR3MxZVVrdFNucFNReTFuVFdWaGVHRlpTekkwYWxJNGJ6bHpZVU5aVDNCWmVrMVFUalZWV1hwZlgxQXRjbUZvUW5sdGVtRnlaa1ZwU0RKSmVHUmpVSHBGVWxOME9TMTBjRFpCTjA1SllXSkhVVlYzVEZoU09IUlNXbmRSYjJ4blppMXpOVmw1WVdoV1VYWTFOM28xWjNreldHWnNNWFJuZFZnME1UVnpUMGhtVTNKM1IwOVVabW8xUzFKWFZYcGZTVTl6UVhCVWVFeEtVazB3UTE5dlZrWXphSFJrZGxjM1ptdzROM05FV2xwdWVFVXpUSEZ5ZVZwamVUSklNVWRvZDFOT1VYUjNTV2RLYm5GbVVsVlFja2x1U21zeWNFWTJOSGhWVlROd1drZ3daVzlaUWpCVVkyZzJMVkpwWmtKaVRYcGpURTR4T1dSVmQwOXZOMkl6VlZrelltbG5hMHROWVV4aVVsOHhlRmR6V2xOTVVWbDFPVWw1UXpOU04wTmpjVEJSWkU5MVltWTBNVkZYZG1wTWNtTlBOVFpZTmxwQ1l5MURVM0pUUVY5RWRFbFZZWGxHVEdWc2RuTnRVMGxXV1ZkdVZXNWxSR1oxTldOZmN6bEthR2xLUzJkRmNTMUhaRUpqTUZCNU1DMWxhM2xuZGxaUWVIRlVhV3h2TjNCUVdHUjVURFpRTTBwc1Z6TmFhRXczVERRd01sbGhXWHB0Y21aQ2QzTjVjSEpXT1hsZk5tTnJaMEowYVZOUGFVcElXVnBVTmxwYWFYTjNSREpKUTFoTVVVcHNOVmx6YkZaTlRHcEdhRzFrT1ROSGRXczVaM1UyUldoYVRFTlVNVUpDWlZaRGFrYzBkamR2TWt4d1VtZExOelI1WjBaMmRWaFZTM0J1TFVKNmJsWTVPV3hhUzFWNlNHUjBWVGRCTlhKdVFrMXRNbGRUYVZkT1ZFTlFSVEJWZEZFMmJsQmpOWHBPVFdoMFRGTktiemhIUjJVM0xYQTJUa1J4WW5GbFVUUldkMHhRYTA1U1MzQmlaRkpTTjBWYVdreEpiVGMxTkhaNWRUWnlja052ZUU5RGNXWm9iRWQ0UVV4bWIwMXhOM05rWVRsWGRWRjNiRWMzT0Mxa2JETnpaVlJpWTNkNk5XUlBUVFpGV1VaNlpFSk1jakZPVldwNU0yNXRVREphV2tGUk9IcE1TVEF5ZDBKM2RHbG5PRU16T1VwMVZGOWpOVmhNY1VWRVEybHZjVUpFZVVwQlgwUjRiVkp5WW0xR1IwaDZVV1ZLTXpKclZWTlVjWHBFVFVsc01teG9NWEphWlVwb1pHWnBkV2haZW0xcU5GWlpObWxWZUdWcWMxSjFSVXhtVVV0cVdsVjVURlpJWDBaSGEzRm5VWGh5WjBGSVdFRm1YMDkwVWpGd2RUbFFjR2t5TlhRd01FcE5WekpIVmtwdVVFWmhMWFZ4WmtNMmEwTmxka1I0TFhaeFNUaGFUR1ZyWWxrdE5UWkZVWFJCWlVKeFMwRmlMWFZ5VUhrdGRVcGFTMTlDU21Kb1JFMXNUR3d4VDE5YU1UaGFXVUpLTlROa1VVazVYMjVIZFVkbmIzWkZjM1F3TlcxNFRrRlVlRlo2UjAxM1RISmFia05hUkhOQ04zVklaV0kyT1RCVk1qSlplVzFGYTFGSlJrSlZTVm81YmtkcFNXVnVUME54WW5Oc1Z5SXNJbWhsWVdSbGNpSTZleUpoYkdjaU9pSmthWElpTENKbGJtTWlPaUpEUzAxZlVsTkJYMEZGVTE5TFJWbGZWMUpCVUNJc0ltdHBaQ0k2SW1aaGEyVXRjbVZzWldGelpTMXJaWGtpZlN3aWMyTm9aVzFoWDNabGNuTnBiMjRpT2lJeExqQWlmUSIsImtleV9vcHMiOlsiZGVjcnlwdCIsImVuY3J5cHQiXSwia2lkIjoiaHR0cHM6Ly9tYWxlZ2Vza3JlbjJoc20ubWFuYWdlZGhzbS5henVyZS5uZXQva2V5cy9leHBvcnRrZXkxNjI3MDg4MjQ1Njk5MDU4NzMvMjVhZTA1OWViODg1MGFlOGE2MjNhNzJmN2ZlNWU3MzEiLCJrdHkiOiJSU0EiLCJuIjoiajF6T3ZRQkR1UzhncUlkcEEyQ3Y3ZzhTZ21qUHBFa2REcnNESW5fQlM4WFFVMDZ6NEdVclNIUUNIMWF2aHJJYkxCcllZU3FwNjEyVW1DamRWM1l1TXlHR3RuTHFfMzN1T1BQM1BXaTBVMkJfc1V2bG9tYWFEU3M1cjJVRGpURDZyVzlibVY2cnFvanhjb0pqWXdWVm40WkZGVjFUd0JMbnNQb1lEWWxEZC1qQ0RvSVlDbWlmN0VXc0w1ZmZYNVBnQmZNTmVDdGtlZzlHdFlkWW5IMzlIMkZtdVVGVVpVNFp6QnJXcWZZWjgtZGg5SGdjVGpiWTFFQk9fMlh1TU5tZmxOdWhzc1JqM3lCbWxBSDZ3ME9IS04xOExFLThtRXZHRThkVWNPT3dNLW9tbm5iS3FkX2VKVDc0VTFTbHdIT2hrVHg0UVNjMElSYml4RUk5RGtKdkRRIn0sInJlbGVhc2VfcG9saWN5Ijp7ImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsImRhdGEiOiJleUpoYm5sUFppSTZXM3NpWVc1NVQyWWlPbHQ3SW1Oc1lXbHRJam9pYzJSckxYUmxjM1FpTENKbGNYVmhiSE1pT2lKMGNuVmxJbjFkTENKaGRYUm9iM0pwZEhraU9pSm9kSFJ3Y3pvdkwzTnJjbUYwZEdWemRHRjBhVzl1TG1GNmRYSmxkMlZpYzJsMFpYTXVibVYwTHlKOVhTd2lkbVZ5YzJsdmJpSTZJakV1TUM0d0luMCJ9fX19.LRRNch328LEGaA-LkrT-k94M5fkeq2OMrYLdaSlvoAH4_ty0CVqdg4MhEneGrOTeZFlODEDfP3RoKVJddBwc8_X-OBSWVczMjcqdVjKmlX0kerlasOLL_a_Ks3ojcTwHkyP0R5hB5zE2LCRAgQGicVGR5MV7eRpX61e8mq11d9jOgB5OrCbSGbkWRvjJZzOqy-p6Ve6Tb-J0449Albdnk4xo0luhySY-iC5O93j1lsgVaerw_bWnUuL1KlL6EjBRUzKlWmC_Ef6UVjJSlmPjNlrA7ZcgdbSUpYA7KUBkChM10n_oF1TTrrTMaxLDFwv_L6OWey_OLSv8l1oQypb_cg\"}", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "14058", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=50.35.231.105;act_addr_fam=Ipv4;", + "x-ms-keyvault-region": "eastus2", + "x-ms-request-id": "1d410670-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "583" + } + } + ], + "uniqueTestInfo": { + "uniqueName": { + "exportkey": "exportkey162708824569905873" + }, + "newDate": {} + }, + "hash": "7b3fff06a6e71c0d0f5072b3242d166c" +} \ No newline at end of file diff --git a/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_import_an_exportable_key_and_release_it.json b/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_import_an_exportable_key_and_release_it.json new file mode 100644 index 000000000000..ea184d710f56 --- /dev/null +++ b/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_import_an_exportable_key_and_release_it.json @@ -0,0 +1,119 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://skrattestation.azurewebsites.net//generate-test-token", + "query": {}, + "requestBody": null, + "status": 200, + "response": "{\"token\":\"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiJzbXlYWThEVGE1Z3dyY1d2X2VvM1RETGhvYTlUR3RYcWM3aUpNak9HcTV3Q3RaMm9hMXVmeTZJLWhuQUdnVVlaZ25LX05QRGF0Um1ocy1pWGEtRGFRZ25RdzBzTS1WNWdYN0dCbUJBelJFR0k0QlhzWXJxNC1XVldDSnZlYVlEN00xYVBERHdxMmx0NTZWakkzeGFUYldZUGRjVWpONnpnVjFEOUNXZmZvLWZLTUoxMllQeEhDRnZQVGcwN25EM0w4NHIyb3hUWk54aG1aWlp2cGVsU1NoUll5NVlWVVdMV2pveENtNFFJN1pQWXRha0Z6Q0ROUTJfZDZHYmdiMTl2djk3Y2d2NF9vWHhCUWplamZvQ2dUa0dqeE16enUwZm5SSUJ2Z3BKNWZZZUJUTE5xU3o1bXdISFhxbkpkWGc4WVV5OXBnLUxXNGVlTGhOUGN3R2FiRHcifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyNDcsImV4cCI6MTk0MjY2NDI0N30.X-WjkI6RFNwSdlFccgGyn-1l1Ha1XGZwoidZn1Nx6pH_9XglAgW8QTkUCgi0l0sme_oSlhZszPuEulcxAZSDsSwz4dfNo7orOfP5RmqIc88hODLOSSExMw-NQkx-S7jG51OcY-UXs78jSIXPt3o_-I6acr6k72HqLn11yqjW8xjvAA3ROaJ5SqvQihmW7jIH_YxHFLzeRAfFa62bS6_EJ2vARSnSJpOMpf18vao3AbrZImVx99VjlX1DBQ0TuDlPcydMnjJFgULazft73L8-X_3BGOXtpmYcOE0ttztZ4tkZEBklJPdonqZJBOtIZaGzbE91haRN-9RaP1WbUwLKjg\"}", + "responseHeaders": { + "content-length": "1305", + "content-type": "application/json; charset=utf-8", + "date": "Sat, 24 Jul 2021 00:57:26 GMT", + "etag": "W/\"519-qGY15SX6c6xzCgL+zwAwW8/ezEM\"", + "status": "200", + "x-powered-by": "Express" + } + }, + { + "method": "PUT", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/importreleasekey162708824834309157", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "", + "status": 401, + "response": "", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "0", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "www-authenticate": "Bearer authorization=\"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012\", resource=\"https://managedhsm.azure.net\"", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-request-id": "1de44452-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "1" + } + }, + { + "method": "POST", + "url": "https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token", + "query": {}, + "requestBody": "response_type=token&grant_type=client_credentials&client_id=azure_client_id&client_secret=azure_client_secret&scope=https%3A%2F%2Fsanitized%2F", + "status": 200, + "response": "{\"token_type\":\"Bearer\",\"expires_in\":86399,\"ext_expires_in\":86399,\"access_token\":\"access_token\"}", + "responseHeaders": { + "cache-control": "no-store, no-cache", + "content-length": "1322", + "content-type": "application/json; charset=utf-8", + "date": "Sat, 24 Jul 2021 00:57:27 GMT", + "expires": "-1", + "nel": "{\"report_to\":\"network-errors\",\"max_age\":86400,\"success_fraction\":0.001,\"failure_fraction\":1.0}", + "p3p": "CP=\"DSP CUR OTPi IND OTRi ONL FIN\"", + "pragma": "no-cache", + "referrer-policy": "strict-origin-when-cross-origin", + "report-to": "{\"group\":\"network-errors\",\"max_age\":86400,\"endpoints\":[{\"url\":\"https://identity.nel.measure.office.net/api/report?catId=GW+estsfd+san\"}]}", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-ests-server": "2.1.11898.8 - NCUS ProdSlices", + "x-ms-request-id": "ede66456-16e8-4a1a-82da-f1a4da137800" + } + }, + { + "method": "PUT", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/importreleasekey162708824834309157", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "{\"key\":{\"kty\":\"RSA\",\"key_ops\":[\"encrypt\",\"decrypt\",\"sign\",\"verify\",\"wrapKey\",\"unwrapKey\"],\"n\":\"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU\",\"e\":\"AQAB\",\"d\":\"Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ\",\"dp\":\"AMmhWb5yZcu6vJr8xJZ-t0_likxJRUMZAtEULaWZt2DgODj4y9JrZDJP6mvckzhQP0WXk2NuWbU2HR5pUeCN2wieG1B76VKoH76vfnaJDqT1NuJVBcP2SLHog3ffwZtMME5zjfygchG3kihqOSpwTQ9ETAqAJTkRC38fEhwAz_Cp\",\"dq\":\"AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH\",\"qi\":\"AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH\",\"p\":\"ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz\",\"q\":\"AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3\"},\"attributes\":{\"exportable\":true},\"release_policy\":{\"data\":\"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJjb25kaXRpb24iOiJlcXVhbHMiLCJ2YWx1ZSI6InRydWUifV0sImF1dGhvcml0eSI6Imh0dHBzOi8vc2tyYXR0ZXN0YXRpb24uYXp1cmV3ZWJzaXRlcy5uZXQvIn1dLCJ2ZXJzaW9uIjoiMS4wIn0\"}}", + "status": 200, + "response": "{\"attributes\":{\"created\":1627088248,\"enabled\":true,\"exportable\":true,\"recoverableDays\":7,\"recoveryLevel\":\"CustomizedRecoverable+Purgeable\",\"updated\":1627088248},\"key\":{\"e\":\"AQAB\",\"key_ops\":[\"decrypt\",\"encrypt\",\"unwrapKey\",\"sign\",\"verify\",\"wrapKey\"],\"kid\":\"https://azure_managedhsm.managedhsm.azure.net/keys/importreleasekey162708824834309157/db71a595b9a648472ca5b5b5fc76fe8f\",\"kty\":\"RSA-HSM\",\"n\":\"oJFNACNKxoOyG0wV1b7Yh73JWcLlevVK5zTo8Acg13XSdeRVIH43hM7rYKUKRlXdcqepTScejuj3lZpmnKbndb8OI7ra6ZG0Up2XhSi0vZBSHTLdJlZ5a6gra7_HZoyPXutQU3R_0ZkxnSmoRA0I9EEtUn_5MR7acYJZILR7HEaxGrPpHXMWQH6Jx_NA97haNAQs5RdDsn1HGEA9NMe0OK9hgb4F5NEeuYXTglPX_pv1P8LxsALSLS15P6eaUEtqtC0EkoBNcHHXJ6Bs86iJOqVCsVA_gyspY3G2cH1NxuNy-P5n2N7RyQj95FzgO8CGpxSH-nXkOqDgZ5qg0g7-NQ\"},\"release_policy\":{\"contentType\":\"application/json; charset=utf-8\",\"data\":\"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJlcXVhbHMiOiJ0cnVlIn1dLCJhdXRob3JpdHkiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyJ9XSwidmVyc2lvbiI6IjEuMC4wIn0\"}}", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "997", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=50.35.231.105;act_addr_fam=Ipv4;", + "x-ms-keyvault-region": "eastus2", + "x-ms-request-id": "1e06a18c-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "759" + } + }, + { + "method": "POST", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/importreleasekey162708824834309157/db71a595b9a648472ca5b5b5fc76fe8f/release", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "{\"target\":\"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiJzbXlYWThEVGE1Z3dyY1d2X2VvM1RETGhvYTlUR3RYcWM3aUpNak9HcTV3Q3RaMm9hMXVmeTZJLWhuQUdnVVlaZ25LX05QRGF0Um1ocy1pWGEtRGFRZ25RdzBzTS1WNWdYN0dCbUJBelJFR0k0QlhzWXJxNC1XVldDSnZlYVlEN00xYVBERHdxMmx0NTZWakkzeGFUYldZUGRjVWpONnpnVjFEOUNXZmZvLWZLTUoxMllQeEhDRnZQVGcwN25EM0w4NHIyb3hUWk54aG1aWlp2cGVsU1NoUll5NVlWVVdMV2pveENtNFFJN1pQWXRha0Z6Q0ROUTJfZDZHYmdiMTl2djk3Y2d2NF9vWHhCUWplamZvQ2dUa0dqeE16enUwZm5SSUJ2Z3BKNWZZZUJUTE5xU3o1bXdISFhxbkpkWGc4WVV5OXBnLUxXNGVlTGhOUGN3R2FiRHcifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyNDcsImV4cCI6MTk0MjY2NDI0N30.X-WjkI6RFNwSdlFccgGyn-1l1Ha1XGZwoidZn1Nx6pH_9XglAgW8QTkUCgi0l0sme_oSlhZszPuEulcxAZSDsSwz4dfNo7orOfP5RmqIc88hODLOSSExMw-NQkx-S7jG51OcY-UXs78jSIXPt3o_-I6acr6k72HqLn11yqjW8xjvAA3ROaJ5SqvQihmW7jIH_YxHFLzeRAfFa62bS6_EJ2vARSnSJpOMpf18vao3AbrZImVx99VjlX1DBQ0TuDlPcydMnjJFgULazft73L8-X_3BGOXtpmYcOE0ttztZ4tkZEBklJPdonqZJBOtIZaGzbE91haRN-9RaP1WbUwLKjg\",\"nonce\":\"nonce\",\"enc\":\"RSA_AES_KEY_WRAP_256\"}", + "status": 200, + "response": "{\"value\":\"eyJhbGciOiJSUzI1NiIsImtpZCI6IlU0NXdTcDZrT2tQZUQxX2M1WURSZlVHb0JseThxSDlHMTlaZnVGVkx5WWsiLCJ4NWMiOlsiTUlJSW1UQ0NCb0dnQXdJQkFnSVRNd0FXKzlEby9manlOampiYkFBQUFCYjcwREFOQmdrcWhraUc5dzBCQVF3RkFEQlpNUXN3Q1FZRFZRUUdFd0pWVXpFZU1Cd0dBMVVFQ2hNVlRXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVNU293S0FZRFZRUURFeUZOYVdOeWIzTnZablFnUVhwMWNtVWdWRXhUSUVsemMzVnBibWNnUTBFZ01EVXdIaGNOTWpFd056STBNREF6T0RNNFdoY05Nakl3TnpFNU1EQXpPRE00V2pCOU1Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DVjBFeEVEQU9CZ05WQkFjVEIxSmxaRzF2Ym1ReEhqQWNCZ05WQkFvVEZVMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiakV2TUMwR0ExVUVBd3dtS2k1dFlXeGxaMlZ6YTNKbGJqSm9jMjB1YldGdVlXZGxaR2h6YlM1aGVuVnlaUzV1WlhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURoSjZnSlljek5VbnBrZmgrNktXbXk5UnRXYm1RMXIxaEpoK2tnc3pCc2F0UW9zaEpWa1IzMWxFdkU4dUJtalA5TnNwSHY3SHJWVHRRcVFtcDVwNUw1UGRacys5ZVUwdHBWdGhWUGxqUE5iN1REaUZrWWlPV0JuVXFOaFQwQ1RGVHpRWWV1NUZOazV0QkhvbGloVWRwVVZWUjJXZkpQSWNIY3h6SFBIcjRMeEwza0liZFc5aXdEdlYwSlFnU2MvSmp6OWZXK092SWlKMUpNdXBsbndOc2VhTVo2U0hrdVN1enp4MnBYQWgwck9XUDZ6ZGJXUVpvZjBMN3VRK0VqTTFiQW1SMU5NbWN1V2tLeUkzaTJEblJraEpMRDlZdlcrcWkvMzBDbWVSRWQxczd1UkZkRGxsdCtOVFYxMit1OWZ2Z1ZlWHhGVHA4U3Z3dW1XWTFpVVhRZkFnTUJBQUdqZ2dRME1JSUVNRENDQVg0R0Npc0dBUVFCMW5rQ0JBSUVnZ0Z1QklJQmFnRm9BSFlBN2t1OXQzWE9ZTHJoUW1rZnErR2VacU1QZmwrd2N0aURBTVI3aVhxby9jc0FBQUY2MWZ4THFnQUFCQU1BUnpCRkFpQmNYYm9NSUk1OUdRTVZpdDJGMkkzTTF0RDhNMDJlSTFJVVRyRXkvbWlSY1FJaEFOY256QTdzUWJ3Q3lNQXdadUVxUDlLNGFGNDU2aGpESjVSOE9EamRhUkhDQUhZQVFjaktzZDhpUmtvUXhxRTZDVUtIWGs0eGl4c0Q2K3RMeDJqd2tHS1dCdllBQUFGNjFmeEwrZ0FBQkFNQVJ6QkZBaUVBalBoclZpZDYxMjh4cjV3UFI0bytCQ0FYbUpTTHY0MVhsZE9zaU9uYWVmQUNJQmp1Z242UUd5ZjA1RXU1L3lsNjVabmJvbFhodUZmT2NJRlNoTm1EZFFUSkFIWUFVYU93OWYwQmVaeFdiYmczZUk4TXBIck1HeWZMOTU2SVFwb04vdFNMQmVVQUFBRjYxZnhNSUFBQUJBTUFSekJGQWlFQW1wK2JXMXFrUWZkaWJQOEoreUh1SC92L0ExZk9MaGVQcVIwSnpJVVBhMjRDSUgzS2FZc3Z6RnNES3FsZm1YZ2E4UlhYWHM4T0d5WkhHY0U3dGx6TEJFSkFNQ2NHQ1NzR0FRUUJnamNWQ2dRYU1CZ3dDZ1lJS3dZQkJRVUhBd0l3Q2dZSUt3WUJCUVVIQXdFd1BBWUpLd1lCQkFHQ054VUhCQzh3TFFZbEt3WUJCQUdDTnhVSWg3M1hHNEhuNjBhQ2daMHVqdEFNaC9EYUhWMkNoT1ZwZ3ZPblBnSUJaQUlCSXpDQnJnWUlLd1lCQlFVSEFRRUVnYUV3Z1o0d2JRWUlLd1lCQlFVSE1BS0dZV2gwZEhBNkx5OTNkM2N1YldsamNtOXpiMlowTG1OdmJTOXdhMmx2Y0hNdlkyVnlkSE12VFdsamNtOXpiMlowSlRJd1FYcDFjbVVsTWpCVVRGTWxNakJKYzNOMWFXNW5KVEl3UTBFbE1qQXdOU1V5TUMwbE1qQjRjMmxuYmk1amNuUXdMUVlJS3dZQkJRVUhNQUdHSVdoMGRIQTZMeTl2Ym1WdlkzTndMbTFwWTNKdmMyOW1kQzVqYjIwdmIyTnpjREFkQmdOVkhRNEVGZ1FVZEJLWmN4NnRITWw4MVFqbkpqSGFkNjRqdEwwd0RnWURWUjBQQVFIL0JBUURBZ1N3TUZjR0ExVWRFUVJRTUU2Q0ppb3ViV0ZzWldkbGMydHlaVzR5YUhOdExtMWhibUZuWldSb2MyMHVZWHAxY21VdWJtVjBnaVJ0WVd4bFoyVnphM0psYmpKb2MyMHViV0Z1WVdkbFpHaHpiUzVoZW5WeVpTNXVaWFF3WkFZRFZSMGZCRjB3V3pCWm9GZWdWWVpUYUhSMGNEb3ZMM2QzZHk1dGFXTnliM052Wm5RdVkyOXRMM0JyYVc5d2N5OWpjbXd2VFdsamNtOXpiMlowSlRJd1FYcDFjbVVsTWpCVVRGTWxNakJKYzNOMWFXNW5KVEl3UTBFbE1qQXdOUzVqY213d1pnWURWUjBnQkY4d1hUQlJCZ3dyQmdFRUFZSTNUSU45QVFFd1FUQS9CZ2dyQmdFRkJRY0NBUll6YUhSMGNEb3ZMM2QzZHk1dGFXTnliM052Wm5RdVkyOXRMM0JyYVc5d2N5OUViMk56TDFKbGNHOXphWFJ2Y25rdWFIUnRNQWdHQm1lQkRBRUNBakFmQmdOVkhTTUVHREFXZ0JUSHNweC9IT080V3UvcGFCcW9YWlRCSmxKcWFEQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBZ1lJS3dZQkJRVUhBd0V3RFFZSktvWklodmNOQVFFTUJRQURnZ0lCQUtkcWp3TlEzd1NlbWpma3VmaHFPQXpZNUZzRmMvQ3NIenltOFhNTkRwTzNhUjFCRkM0VFlyQ0dQdmFBZ2FDcjZPUlpVYmpKVHliWWxzMDBVYjJwM2lyUlVOdXJMNlcrQlROZUczNFBWTFVHaFBLVG9TZ0p6Q2t0ZzNkY2dHL2ZHMmd6Zmp4SFl1UEFiN3pwRlFjY1c1d1pIeTg2eEhlRVdadkdsR014c21DSTNJbGpaVXg2bnBQWSs5ZGhqYmRrN0hmUTRFMTRZOFFXaXBsR1dUY04zVE1GY0RiRVpCdlY0SjZsblptWHJINlZMbkdBbi9Tc0ozbFZNbXdpNGNvQWJkM3VWaTZZQm9CZDVmY1lTV2JFYmRjcG1JOVdVNUhOMGtRUmFMYTdkVE1mK0hnSkp6QlFUWFNybWJ2aGVFWklkWnlLY3BNSWluQUZyZGJMRWphZEVORW90MzJ1T2Z1eVpXeXAvcGg1bWFoaC9HSkJCZ3NvRzJzL3o4YzRoMVFneC9KQ0JKS09VRWF3WXQ2UTZSL3Byaklnc2Q0RXZuWGhtbS93djJHeDFHa0NVQ2RpcW5aZ09CQ3RKYWpNUnBiczVQblYwajczTFROUHp4TmpyWjFrM2ZkL1Y4dzFIb1hYSDBZTHoxc25idzJPSlpEMzRJMk8zVVlrV3pPR1lzMUVWUWtXZWJtdlVjVjNOK291UUFXK0gxY0hmR01memt0Q0tSdkFUNHI0b3FIY0p6dVdSeVcvM2VNNEdCOUdzY01kTFBNdEJjVkplU29YTkRqWDh6cWw5RnlyUWROaWUyTS9YNEozc0ZTNG9hMGx5SmhsRU11d2dWbytSc01SQm8valFiZ3ZsSXZsWmdaem95TU9WNlB3c1E5b3lQNEl5ZjB2eVVLejkzS3RkNWxmIiwiTUlJRjh6Q0NCTnVnQXdJQkFnSVFEWHZ0NlgyQ0NaWjZVbU1iaTkwWXZUQU5CZ2txaGtpRzl3MEJBUXdGQURCaE1Rc3dDUVlEVlFRR0V3SlZVekVWTUJNR0ExVUVDaE1NUkdsbmFVTmxjblFnU1c1ak1Sa3dGd1lEVlFRTEV4QjNkM2N1WkdsbmFXTmxjblF1WTI5dE1TQXdIZ1lEVlFRREV4ZEVhV2RwUTJWeWRDQkhiRzlpWVd3Z1VtOXZkQ0JITWpBZUZ3MHlNREEzTWpreE1qTXdNREJhRncweU5EQTJNamN5TXpVNU5UbGFNRmt4Q3pBSkJnTlZCQVlUQWxWVE1SNHdIQVlEVlFRS0V4Vk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR4S2pBb0JnTlZCQU1USVUxcFkzSnZjMjltZENCQmVuVnlaU0JVVEZNZ1NYTnpkV2x1WnlCRFFTQXdOVENDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFLcGxEVG1ROWFmd1ZQUWVsRHV1K05reE5KMDg0Q05LbnJaMjFBQmV3RStVVTRHS0Rud3lnWmRLNmFnTlNNczVVb2NoVUVEeno5Q3BkVjV0ZFB6TDE0Ty9HZUUyZ081L2FVRlRVTUc5YzZuZXl4azV0cTFXZEtzUGtpdFB3czZWOE1XYTVkMUwveTRSRmhaSFVzZ3h4VXlTbFlsR3BOY0hoaHN5cjdFdkZlY1pHQTFNZnNpdEFXVnA2aGlXQU5rV0tJTmZSY2R0M1oyQTIzaG1NSDlNUlNHQmNjSGlQdXp3clZzU21Md3Z0M1dsUkRnT2JKa0U0MHRGWXZKNkdYQVFpYUdIQ0lXU1ZPYmdPM3pqNnhrZGJFRk1tSi96cjJXZXQ1S0VjVUR0VUJoQTRkVVVvYVBWejY5dTQ2VjU2VnNjeTNsWHUxWWxzazg0ajVsVVBMZHNBeHR1bHRQNE9QUW9PVHBuWThreFdrSDZrZ081Z1RLRTNIUnZvVklqVTR4SjBKUTc0Nnp5LzhHZFFBMzZTYU5pejRVM3UxMHpGWmcyUmt2MmRMMUx2NThFWEwwMnI1cTVCL25oVkgvTTFqb1R2cFJ2YWVFcEFKaGtJQTlOa3B2YkdFcFNkY0EwT3J0T09lR3Ryc2lPeU1CWWtqcEI1bncwY0pZMVFIT3Izbkl2SjJPblkrT0tKYkRTcmhGcVdzazgvMXE2WjFXTnZPTno3dGUxcEF0SGVyZFBpNXBDSGVpWENOcHYrZmFkd1AwazhjemFmMlZzMTluWXNnV241dUl5TFFMOEVlaGRCekNiT0tKeTlzbDg2UzRGcWU0SEd5QXRtcUdsYVdPc3EyQTZPL3BhTWkzQlNtV1REYmdQTENQQmJQdGUvYnN1QUVGNGFqa1BFRVMzR0hQOUFnTUJBQUdqZ2dHdE1JSUJxVEFkQmdOVkhRNEVGZ1FVeDdLY2Z4emp1RnJ2NldnYXFGMlV3U1pTYW1nd0h3WURWUjBqQkJnd0ZvQVVUaUpVSUJpVjV1TnU1Zy82K3JrUzdRWVhqemt3RGdZRFZSMFBBUUgvQkFRREFnR0dNQjBHQTFVZEpRUVdNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQU1IWUdDQ3NHQVFVRkJ3RUJCR293YURBa0JnZ3JCZ0VGQlFjd0FZWVlhSFIwY0RvdkwyOWpjM0F1WkdsbmFXTmxjblF1WTI5dE1FQUdDQ3NHQVFVRkJ6QUNoalJvZEhSd09pOHZZMkZqWlhKMGN5NWthV2RwWTJWeWRDNWpiMjB2UkdsbmFVTmxjblJIYkc5aVlXeFNiMjkwUnpJdVkzSjBNSHNHQTFVZEh3UjBNSEl3TjZBMW9ET0dNV2gwZEhBNkx5OWpjbXd6TG1ScFoybGpaWEowTG1OdmJTOUVhV2RwUTJWeWRFZHNiMkpoYkZKdmIzUkhNaTVqY213d042QTFvRE9HTVdoMGRIQTZMeTlqY213MExtUnBaMmxqWlhKMExtTnZiUzlFYVdkcFEyVnlkRWRzYjJKaGJGSnZiM1JITWk1amNtd3dIUVlEVlIwZ0JCWXdGREFJQmdabmdRd0JBZ0V3Q0FZR1o0RU1BUUlDTUJBR0NTc0dBUVFCZ2pjVkFRUURBZ0VBTUEwR0NTcUdTSWIzRFFFQkRBVUFBNElCQVFBZStHK0cyUkZkV3RZeExJS01SNUgvYVZORmpOUDdKZGV1K29aYUthSXU3VTNOaWR5a0ZyOTk0alN4TUJNVjc2OHVrSjUvaExTS3N1ai9TTGptQWZ3UkFaK3cwUkdxaS9rT3ZQWVVsQnIvc0tPd3IzdFZrZzljY1pCZWJuQlZHK0RMS1RwMk94MCtqWUJDUHhsYTVGTzI1MnFwazcvNnd0OFNaazNkaVNVMTJKbTdpZi9qamtoa0dCL2U4VWRmcktvTHl0RHZxVmVpd1BBNUZQenFLb1NxTjc1YnlManNJS0pFZE5pMDdTWTQ1aE4vUlVuc21Jb0FmOTNxbGFIUi9TSldWUmhyV3QzSm1lb0JKMlJESzQ5MnpGNlRHdTFtb2g0YUU2ZTAwWWt3VFBXcmV1d3ZhTEIyMjB2V210Z1pQcytEU0liMmQ5aFBCZENKZ3ZjaG8xYzciLCJNSUlEampDQ0FuYWdBd0lCQWdJUUF6cng1cWNScWFDN0tHU3hIUW42NVRBTkJna3Foa2lHOXcwQkFRc0ZBREJoTVFzd0NRWURWUVFHRXdKVlV6RVZNQk1HQTFVRUNoTU1SR2xuYVVObGNuUWdTVzVqTVJrd0Z3WURWUVFMRXhCM2QzY3VaR2xuYVdObGNuUXVZMjl0TVNBd0hnWURWUVFERXhkRWFXZHBRMlZ5ZENCSGJHOWlZV3dnVW05dmRDQkhNakFlRncweE16QTRNREV4TWpBd01EQmFGdzB6T0RBeE1UVXhNakF3TURCYU1HRXhDekFKQmdOVkJBWVRBbFZUTVJVd0V3WURWUVFLRXd4RWFXZHBRMlZ5ZENCSmJtTXhHVEFYQmdOVkJBc1RFSGQzZHk1a2FXZHBZMlZ5ZEM1amIyMHhJREFlQmdOVkJBTVRGMFJwWjJsRFpYSjBJRWRzYjJKaGJDQlNiMjkwSUVjeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdXpmTk5OeDdhOG15YUpDdFNuWC9Scm9oQ2dpTjlSbFV5ZnVJMi9PdThqcUprVHg2NXFzR0dtdlByQzNvWGdra1JMcGltbjdXbzZoKzRGUjFJQVdzVUxlY1l4cHNNTnphSHhteDF4N2UvZGZneTVTRE42N3NIME5PM1hzczByMHVwUy9rcWJpdE90U1pwTFlsNlp0ckFHQ1NZUDlQSVVrWTkyZVFxMkVHbkkveXV1bTA2Wkl5YTdYelYraGRHODJNSGF1VkJKVko4elV0bHVOSmJkMTM0L3RKUzdTc1ZRZXBqNVd6dENPN1RHMUY4UGFwc3BVd3RQMU1WWXduU2xjVWZJS2R6WE9TMHhaS0JneU1VTkdQSGdtK0Y2SG1JY3I5ZytVUXZJT2xDc1JuS1BaekZCUTlSbmJEaHhTSklUUk5ydzlGREtaSm9icTduTVd4TTRNcGhRSURBUUFCbzBJd1FEQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCaGpBZEJnTlZIUTRFRmdRVVRpSlVJQmlWNXVOdTVnLzYrcmtTN1FZWGp6a3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR0JuS0pSdkRraGo2ekhkNm1jWTFZbDlQTVdMU24vcHZ0c3JGOSt3WDNOM0tqSVRPWUZuUW9RajhrVm5OZXlJdi9pUHNHRU1OS1N1SUV5RXh0djROZUYyMmQrbVFydkhSQWlHZnpaMEpGcmFiQTBVV1RXOThrbmR0aC9Kc3cxSEtqMlpMN3RjdTdYVUlPR1pYMU5HRmR0b20vRHpNTlUrTWVLTmhKN2ppdHJhbGo0MUU2VmY4UGx3VUhCSFFSRlhHVTdBajY0R3hKVVRGeThiSlo5MThyR09tYUZ2RTdGQmNmNklLc2hQRUNCVjEvTVVSZVhnUlBUcWg1VXlrdzcrVTBiNkxKMy9peUs1UzlrSlJhVGVwTGlhV04wYmZWS2ZqbGxEaUlHa25pYlZiNjNkRGNZM2ZlMERraHZsZDE5MjdqeU54RjFXVzZMWlptNnpOVGZsTXJZPSJdLCJ4NXQjUzI1NiI6IlU0NXdTcDZrT2tQZUQxX2M1WURSZlVHb0JseThxSDlHMTlaZnVGVkx5WWsifQ.eyJyZXF1ZXN0Ijp7ImFwaS12ZXJzaW9uIjoiNy4zLXByZXZpZXciLCJlbmMiOiJSU0FfQUVTX0tFWV9XUkFQXzI1NiIsImtpZCI6Imh0dHBzOi8vbWFsZWdlc2tyZW4yaHNtLm1hbmFnZWRoc20uYXp1cmUubmV0L2tleXMvaW1wb3J0cmVsZWFzZWtleTE2MjcwODgyNDgzNDMwOTE1Ny9kYjcxYTU5NWI5YTY0ODQ3MmNhNWI1YjVmYzc2ZmU4ZiIsIm5vbmNlIjoibm9uY2UifSwicmVzcG9uc2UiOnsia2V5Ijp7ImF0dHJpYnV0ZXMiOnsiY3JlYXRlZCI6MTYyNzA4ODI0OCwiZW5hYmxlZCI6dHJ1ZSwiZXhwb3J0YWJsZSI6dHJ1ZSwicmVjb3ZlcmFibGVEYXlzIjo3LCJyZWNvdmVyeUxldmVsIjoiQ3VzdG9taXplZFJlY292ZXJhYmxlK1B1cmdlYWJsZSIsInVwZGF0ZWQiOjE2MjcwODgyNDh9LCJrZXkiOnsiZSI6IkFRQUIiLCJrZXlfaHNtIjoiZXlKamFYQm9aWEowWlhoMElqb2lSVFppVTFWRGNuZFFUVmg1UkZSYU1WazVSVWRIT0VoVFdHeERTRmhPUlZWRlgxRkpPRVUzYVhKTGMxTjZjM2RmYWxONmFqWllha1pzU2pJdGNrRnBPVWt0TlZSVFRVRjNYMjVZZG5sU1UyMU5hRkZTUkRaa2JXc3lRVXRxVmkxQlVuQjRibEIxUWt0NlZXSnVXVTVMVlV4MVRqQllSUzFyWDI1TVJ6ZDViMGg1UmxZeWVYRlZOV3BPWlRseldtVmhUeloyY1VOV2NVUmhRMXB2Ulc5Sk4wVkJRVWN0VFdneU5WOTZVRGgwWVY5a1RWZFlUMVJ4V0dGWlZHY3pjM2t6YzJneWNHZGZkek5YUlhsT09IZHhXREJYVGtSamQxSXlkRkZRTWtab2VqRlBhbXN0YUdWemFGWmZhbVkzVlZOaVdYbzJPRlU0VnpoTmMxbGZOM1JKV2tOeGRYUXhURnBuYVhoUGFGUkVjMEZOY0MxWWNtRTJhalJmTVRKNWJYTlJhMDlmUlRaS09VUlpVMjlpU2pGalltRlJRM05LZFU1TFQxSlROR2xIVlRkTFZUbHpiMjl3Y21ndFh6ZHNNRlpPZEVzMGJrOVJhRU5YWTFsNU56RTNjMFk0Y2kxRFQwbGljVFF3VTI4MWNHOHlTMngzUVc5aU1VVmpaVmw1VGpaMFIyOXNUVTVCVTFONWNtcHRSVWRFVWxoNFIyazRSVk55ZUhoNFVWVlZMVkJDU1c1b1NWWnhkRE4yTm1kblgybDRVa010TVc1cE1UQmZSWEI0Y0RWdGJXSmFWV2xQVm1KclIxSlRZalphUkVGWk4xSm9hR2RKTWxjd1IyZ3lSRGM1ZHpRNGNGbHFjbms0T1ZoS2NsUkJVM28zU1RBNFRsSkdTMjlWU1hsdVFUWTFVbEJRVUZwU00zaHhVMGwzZGxaTFpHRkZZelUxUkVWTmNrWXdUMVJvY0Vsd1UxVkhXWFJ3Vm1abmNrMUhUM1JGVmtNNFlYcExRVlZWUWpJM1MyaFdTbmhOZGsxRE9HZzBiRWhXVVhKWU4xOXNZell5TkVkNlJIUTVRMFZKVFdzMldEaGFSR2w2UTNkZlluWjZlblpYYTBaTlVXMVNjVm81VDBRdFNIVkRUR0Y0UjJneVZreEpkblE0TUVGdVpqaHZUMGxuZG5aT1lqTllVSEIzVFZrM2IzTnVhVVYxUlRaSU1qWkdNVlZVU1d4aFpGWnRkMEZZT1d0MUxYVkdRblJxVkhoV1YxVnpVV0paUkVoS01qaHNRWFpIZW0xa09DMUtTMWRUT1VjM2NVVnZSSFpNUldWS1ZsRTJYMEUyYlcweldUSXdZVEkyVVdkeWNIaHRSRWxUYWtoVVVXZGFYMFF6TjA1UmRWcGhjRWgyWWxGc1NYcElabDlzWHpOcFkxQk9NeTFPUjJKS1VVSXpTbUl5VW5WbVpUaDRObnA1VVhkYVFWRnpabFpZVDBvMVZXUlpjM2RhUmpOd1RsOVBRM2R0Um5wNVRFMUZXRjlOVkZFd1ptcERSRGRmVDBOWExVYzBiMmxUVG5sMVJYZHhibVV6ZVd0T1JGVkZjVUpOVnpad1MyUklVbmg1UWtkelpVVldiVkJQZEZSTE1uRmpURmMxUjBKMlkzZFpjMkl0Y25Jd1VGVnZaalJyYTBNMlJ6RlJPRlpJV2pGV2JraHlUVnBVVTNsWmJVSlFZVEIyUjJ0WFZWSmtSbnBLTUVKcVNFNDFlbE5LTWxRMFVsZEpWbVF0TWxWamFWZzVWQzF4UjJGaU9WaDBMV3hIWkhJdFpGa3pTVUZVVHpSd2JuUkRWa1J2VGpNNVRXMXJYMjlyVkVKSWEwWTNkRGc0VG1sVGEwb3pPVE5qYmw5SmVtcDFNVVZhVldwcFZYZFVTV0pSTWtsc1NXNHdXbmg1WHpNd1ZIcGFhR2hqVUhaTE9HNXNTMUZpZDNwVFVEQldhSGhvZFdNMlVWVmpXV1JTYWxKMWMxUTNUVmhWUXpkU1EyTTBVMU5qTW1GUmMydENURk55VUU4NU9GZFNibmhIVUc0eGVuUkpOVmN5TUZCUGFFbDRNMFF0TFhsb1RuSlRURVZ3ZVc4d1VYVlplbWhxVUVsNVIwTnZURFpTTUhWTldWaGtSa3RCWmpCRVRuVmtiRTQzUmtkSGNtUXRkbGxxZURSRGExOXRSbU16TVRCbWJsbDNlazQwVm5sMkxXaGFiM050TFZwRFJVMWthbVZHV1ZneWRsOUdSbGRMYTBwclVuaFVObUZYTFV0UE5GbHhiRUpDYVZnMmJXMUtUemhhTnpsVFkyMHhabE5SYlZnM0xWVTVSRlZxUjNoQlJuQlJNamhNZEhkcE5IRjZSR1JXZUZWMWFHdE9hbGhrWjNWRk9IaGliekYzWlV0eVUzYzRVa0pPV1cxRmREbFJabEpLUlVseE9EQlFXWGxWVlRFNU1rMUhhbmx5UzNSNkxYaE9RelZsT0ZWUmNUTnNNVkIxTUMweFExcFZhMFJQTWtWMU9XeEZaVk5GYVZWQ1pGVktORlZYUXpoSWJTMXJVVVowZUZaTmJVOUNObmM0UVZocWVYVnFhemh4YVZvMU1HcGhNbmhoV2pKNGFFRjRjMnhuVW5ScVVrVjJlVEpEZDFWWlNXVm1Ta3hoUkZOSU5VSldOV3RrZG5nemVHbFBSSFpmWVRkMlYwWnVlVkF5WVdVd1dFRk9SVEJ2VFRCWGJYUmhSRzlwWWt4UkxXNDRUbE0xVWpOaWRtNVFZM2RsZVRkalZVbEhSVWt3WW1OR2VGZGhWVGRVTFV4TFpDMDNZa2g1TjBwcWFGbHVUWEpLYlZScFpVSkdUa05qTm1kSk5uRXhSbkpQWlRkVU1tMXdNRmg2TTFKUlUzcFBSVFJwVWs5TU5XdHRjbmR2TkV0R2IyeFRPVVU1WVRBdFowNTFjRTl3ZG5Rd1oyYzBjVlZxVTNWV1FtRjJja3BHWmt4RVVXdFBZMFpOTjNnNVRXVmtWV2Q2V0hCTFRXa3daM0JQTTNwcGNVSnhSbTVvUVd4U1YyMWliVzAyV2tkRFJsQlplbTR4UjBodVZGSkNWWFZwYzAxTU9YRlNUM0JTUkVoSU9HWmxSMnRoU0ZWTmRHMW9Na2hPWjJsNlQyaDBka2hhZUVSVWJtcFdRekYxT0hZM01XUmFVMTl5WW5ReGRVODJXbUZUWXpSR1NHeDBOWGgzWkZWVGJUTm9lbmt6YTB0SWRuWTBWa2R1V2poMFlWaEdMVEZhYlZGQ1UzWXlaV2s0TFc5emJtVkVXbVJ6TURBeE0xZDNPRUZaWVZwWVMwUlhUMDEyZG5SallqaG9hRE5yY2xWUlZGWlVha3hLUzBKTmJXMHRSM0l5YmpScGRXWlNkbmt4Y21saWFVRTFkRTgzZFZObFVHNDFaVWhRVWt4M2QwWjNUalJHY0ZwcVFUUllRWEpKUkd4b1kxQmhjemxLVW5sNVdtNUdaRkZFT1VaSmQxUjFSRUpaU0daZlVHWllTazVDY0NJc0ltaGxZV1JsY2lJNmV5SmhiR2NpT2lKa2FYSWlMQ0psYm1NaU9pSlNVMEZmUVVWVFgwdEZXVjlYVWtGUVh6STFOaUlzSW10cFpDSTZJbVpoYTJVdGNtVnNaV0Z6WlMxclpYa2lmU3dpYzJOb1pXMWhYM1psY25OcGIyNGlPaUl4TGpBaWZRIiwia2V5X29wcyI6WyJ3cmFwS2V5IiwiZGVjcnlwdCIsImVuY3J5cHQiLCJ1bndyYXBLZXkiLCJzaWduIiwidmVyaWZ5Il0sImtpZCI6Imh0dHBzOi8vbWFsZWdlc2tyZW4yaHNtLm1hbmFnZWRoc20uYXp1cmUubmV0L2tleXMvaW1wb3J0cmVsZWFzZWtleTE2MjcwODgyNDgzNDMwOTE1Ny9kYjcxYTU5NWI5YTY0ODQ3MmNhNWI1YjVmYzc2ZmU4ZiIsImt0eSI6IlJTQSIsIm4iOiJvSkZOQUNOS3hvT3lHMHdWMWI3WWg3M0pXY0xsZXZWSzV6VG84QWNnMTNYU2RlUlZJSDQzaE03cllLVUtSbFhkY3FlcFRTY2VqdWozbFpwbW5LYm5kYjhPSTdyYTZaRzBVcDJYaFNpMHZaQlNIVExkSmxaNWE2Z3JhN19IWm95UFh1dFFVM1JfMFpreG5TbW9SQTBJOUVFdFVuXzVNUjdhY1lKWklMUjdIRWF4R3JQcEhYTVdRSDZKeF9OQTk3aGFOQVFzNVJkRHNuMUhHRUE5Tk1lME9LOWhnYjRGNU5FZXVZWFRnbFBYX3B2MVA4THhzQUxTTFMxNVA2ZWFVRXRxdEMwRWtvQk5jSEhYSjZCczg2aUpPcVZDc1ZBX2d5c3BZM0cyY0gxTnh1TnktUDVuMk43UnlRajk1RnpnTzhDR3B4U0gtblhrT3FEZ1o1cWcwZzctTlEifSwicmVsZWFzZV9wb2xpY3kiOnsiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IiwiZGF0YSI6ImV5SmhibmxQWmlJNlczc2lZVzU1VDJZaU9sdDdJbU5zWVdsdElqb2ljMlJyTFhSbGMzUWlMQ0psY1hWaGJITWlPaUowY25WbEluMWRMQ0poZFhSb2IzSnBkSGtpT2lKb2RIUndjem92TDNOcmNtRjBkR1Z6ZEdGMGFXOXVMbUY2ZFhKbGQyVmljMmwwWlhNdWJtVjBMeUo5WFN3aWRtVnljMmx2YmlJNklqRXVNQzR3SW4wIn19fX0.SlPSy17u2aC7lbWR6c3rK3TqsKfMitIBzs4JMi8ilZDhEGJKlNT19KqfKcXBkwJ2igKLvOQzBIcAuc815u7hbLNDw7LxDOhU03gH54VG-zzyFUmsBA6SEH5Ythi85iUzWcY2tfHdM6VW_gGpxikpVtUCBzq2h58Pmx3xtSrgyedB3RyfiIkWmvLs5t1dttD_FOwURZ-G2csZfuBavCW8L4Fdksux_NcBT8cO7PXUYMJIwQmCGMh-IzZUA3AU8sQtnUGjXRZTpiYKZtFJzMyfAaQkNsC21IDSezHtS8wTNzYD7CR2nHYlAZ9heUcXJR05vbtEYpAYm34If4ExRlOurQ\"}", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "14193", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=50.35.231.105;act_addr_fam=Ipv4;", + "x-ms-keyvault-region": "eastus2", + "x-ms-request-id": "1e86a1d4-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "632" + } + } + ], + "uniqueTestInfo": { + "uniqueName": { + "importreleasekey": "importreleasekey162708824834309157" + }, + "newDate": {} + }, + "hash": "03b6d6595ee42f40828c284f0883922c" +} \ No newline at end of file diff --git a/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_a_key_has_a_release_policy_but_is_not_exportable.json b/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_a_key_has_a_release_policy_but_is_not_exportable.json new file mode 100644 index 000000000000..e1a9940c24b2 --- /dev/null +++ b/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_a_key_has_a_release_policy_but_is_not_exportable.json @@ -0,0 +1,94 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://skrattestation.azurewebsites.net//generate-test-token", + "query": {}, + "requestBody": null, + "status": 200, + "response": "{\"token\":\"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiJzTFQ5clY2anVJOUdVRHM2TFpBUkw0WENadXpZVGVjQmRpSDVDdmZwUXhzUFczYUEycDcyOXJVeXc3MHhkQWxlWEUydjVjZExkX1Nlcy1Ramg4NnlHc0lsZWdlSGtzSnFXNC1hejE1OWdhMWVkTnhYbndMb2k1b2Z3bnlfS1FVemt3T1IwdnhaV0Qtb0R4QWE4aXZxU0Z2OXdYdVU4aVZlRkE0VUZLYjU0N3BlWE1ZNkhkM2F0Z0JIanVEMWdhOHNBRjNOVXRBVE1IODVHWnFublpKOXRiMDVDT2tTaGVUbWJPaWdkRE1JUTFQX3YzTjFWVVBVVmNiWG5MdzYxMExuZG9Sd3MwdFh4c2UtblExaGRpU3JCVC0xNFZhcjBxX2YwU2drTzhXMm9WMVdLTmNkNVJKeWRXdS1rNWtYUkM4NHZBcVcyeGNCWU1XSWhnWWJaU21YUVEifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyNTAsImV4cCI6MTk0MjY2NDI1MH0.aBReJ1rDr6SoYgMl8D9EchIG3u7MLtVNW2pReZj2mkokrKQVhpV-0dH9lIL3PcJctYIdat9ZTpZUMmuj8ezLUn6otAvLcOjAnkyOH2C7TzyqVkKEhRqj6xUd2_hyTzsEIc9QvkAXcbTm8QSXnwHI_NtzpC6Fdl0pZMfirltbzUgz_0LNkN_yOD4f7sTdu_O4BDfxicwvBRqYdqWtPCKA4rgjrS3R9ebeCuj3QgGL2pQT-9n4Sf2kgJdKtP4lV0gwNR9Zo2NoGWVPwJKyPxbNbe1iC8QikQNApd9Mc415mgLqn6OV90ajtyyhSye2xmZ2O1x-RsXJ9eM7JbUNceHEFA\"}", + "responseHeaders": { + "content-length": "1305", + "content-type": "application/json; charset=utf-8", + "date": "Sat, 24 Jul 2021 00:57:30 GMT", + "etag": "W/\"519-MP7NTdL/4j3iR+8Ml5JJ4t82Btk\"", + "status": "200", + "x-powered-by": "Express" + } + }, + { + "method": "POST", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/policynonexportable162708825113401638/create", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "", + "status": 401, + "response": "", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "0", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "www-authenticate": "Bearer authorization=\"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012\", resource=\"https://managedhsm.azure.net\"", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-request-id": "1f8ce9da-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "0" + } + }, + { + "method": "POST", + "url": "https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token", + "query": {}, + "requestBody": "response_type=token&grant_type=client_credentials&client_id=azure_client_id&client_secret=azure_client_secret&scope=https%3A%2F%2Fsanitized%2F", + "status": 200, + "response": "{\"token_type\":\"Bearer\",\"expires_in\":86399,\"ext_expires_in\":86399,\"access_token\":\"access_token\"}", + "responseHeaders": { + "cache-control": "no-store, no-cache", + "content-length": "1322", + "content-type": "application/json; charset=utf-8", + "date": "Sat, 24 Jul 2021 00:57:30 GMT", + "expires": "-1", + "nel": "{\"report_to\":\"network-errors\",\"max_age\":86400,\"success_fraction\":0.001,\"failure_fraction\":1.0}", + "p3p": "CP=\"DSP CUR OTPi IND OTRi ONL FIN\"", + "pragma": "no-cache", + "referrer-policy": "strict-origin-when-cross-origin", + "report-to": "{\"group\":\"network-errors\",\"max_age\":86400,\"endpoints\":[{\"url\":\"https://identity.nel.measure.office.net/api/report?catId=GW+estsfd+san\"}]}", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-ests-server": "2.1.11898.8 - EUS ProdSlices", + "x-ms-request-id": "3a5661f3-94b1-49c7-b525-5cf61c8c5500" + } + }, + { + "method": "POST", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/policynonexportable162708825113401638/create", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "{\"kty\":\"RSA\",\"attributes\":{},\"release_policy\":{\"data\":\"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJjb25kaXRpb24iOiJlcXVhbHMiLCJ2YWx1ZSI6InRydWUifV0sImF1dGhvcml0eSI6Imh0dHBzOi8vc2tyYXR0ZXN0YXRpb24uYXp1cmV3ZWJzaXRlcy5uZXQvIn1dLCJ2ZXJzaW9uIjoiMS4wIn0\"}}", + "status": 400, + "response": "{\"error\":{\"code\":\"BadParameter\",\"message\":\"Non-exportable keys must not have release policy (Activity ID: 1fafded6-ec1a-11eb-b771-000d3a7a3d40)\"}}", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "146", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-request-id": "1fafded6-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "15" + } + } + ], + "uniqueTestInfo": { + "uniqueName": { + "policynonexportable": "policynonexportable162708825113401638" + }, + "newDate": {} + }, + "hash": "b4388594083301f06799ce5dbc32960d" +} \ No newline at end of file diff --git a/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_key_is_exportable_without_a_release_policy.json b/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_key_is_exportable_without_a_release_policy.json new file mode 100644 index 000000000000..005455ae5ac2 --- /dev/null +++ b/sdk/keyvault/keyvault-keys/recordings/browsers/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_key_is_exportable_without_a_release_policy.json @@ -0,0 +1,94 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://skrattestation.azurewebsites.net//generate-test-token", + "query": {}, + "requestBody": null, + "status": 200, + "response": "{\"token\":\"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiJ2b3JqQV92VEV5dGhrWkppSFJpSUZ4MnI0Y3VGWnlodDRmZ1JNdzEyVUtOMVB3TnBSbEpmZGdtdXJTZDdIZlM2STJ4eE9DZjlfdGcyUk9idWhNd054QUpYZXdiRFlVemdETVZ1SmQ5QWs4QzA2dU5zWjZLbnlNNkVvWUU1NDFGRFlKSW5vWDEzb1libl9sY29uU2ROTlU0NEdlSENsRnpvV081UGZXbHh6cEJ1bDk5NE9YR2VyNXZLb3RXU0hjTDZvVzdZclNFN21YcGozMkt2UjQtOElZd0I1SGtLZ1lOQkVQWW1EaTNJd2ZsWUJKQkxHbjlFZW15NGlyNTEzN3RDZUo0MnljTW1LOV9tNGZNNWVLOV84VmRjeHVxelFDc3llckFLQmRqdjE1QnhGZ3dOYXRUQjF6ZThiVDZMRENqeFRVQlBxQ2hYZkdUSktld3lpb0R3eFEifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyNTAsImV4cCI6MTk0MjY2NDI1MH0.oWUUUxE6FK-_xFV0MCBIOEo3bkR2D82x4l2bcm3CPkswdOzk_JWXMIG8MUNg2XsonC8WuPAcxlSpgcOAHSh2P9RuQYiF_4ISqWLpErEre3SpyZkGisFR1zzz1MnCHtj8IOeT61IGhngCic6Z9eAP1Xk0XV5sJalMcnKwR68iFTvgMfK4XvWQipyJOIsjVEqnfxSe0DufFBtUhUB8NGJFvY0gzfbwmXzZAqeYdokCswXF42HvPIyBTxN5wB_9RTlBgkmCUnQZNCZL7DUZI_bOKuLrfWIT-vM2ggWnQ8hIthjVZ9vBgKlWRdct1frJir4zJZb4VuV-cxEYLv-3tczykw\"}", + "responseHeaders": { + "content-length": "1305", + "content-type": "application/json; charset=utf-8", + "date": "Sat, 24 Jul 2021 00:57:29 GMT", + "etag": "W/\"519-zFvkdRuwZM5SNhS2zf1F8dqzzr4\"", + "status": "200", + "x-powered-by": "Express" + } + }, + { + "method": "POST", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/exportablenopolicy162708825049405352/create", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "", + "status": 401, + "response": "", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "0", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "www-authenticate": "Bearer authorization=\"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012\", resource=\"https://managedhsm.azure.net\"", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-request-id": "1f2b409a-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "1" + } + }, + { + "method": "POST", + "url": "https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token", + "query": {}, + "requestBody": "response_type=token&grant_type=client_credentials&client_id=azure_client_id&client_secret=azure_client_secret&scope=https%3A%2F%2Fsanitized%2F", + "status": 200, + "response": "{\"token_type\":\"Bearer\",\"expires_in\":86399,\"ext_expires_in\":86399,\"access_token\":\"access_token\"}", + "responseHeaders": { + "cache-control": "no-store, no-cache", + "content-length": "1322", + "content-type": "application/json; charset=utf-8", + "date": "Sat, 24 Jul 2021 00:57:30 GMT", + "expires": "-1", + "nel": "{\"report_to\":\"network-errors\",\"max_age\":86400,\"success_fraction\":0.001,\"failure_fraction\":1.0}", + "p3p": "CP=\"DSP CUR OTPi IND OTRi ONL FIN\"", + "pragma": "no-cache", + "referrer-policy": "strict-origin-when-cross-origin", + "report-to": "{\"group\":\"network-errors\",\"max_age\":86400,\"endpoints\":[{\"url\":\"https://identity.nel.measure.office.net/api/report?catId=GW+estsfd+san\"}]}", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-ests-server": "2.1.11898.8 - NCUS ProdSlices", + "x-ms-request-id": "1ba24af9-1080-4c93-a423-e4dd26c22100" + } + }, + { + "method": "POST", + "url": "https://azure_managedhsm.managedhsm.azure.net/keys/exportablenopolicy162708825049405352/create", + "query": { + "api-version": "7.3-preview" + }, + "requestBody": "{\"kty\":\"RSA\",\"attributes\":{\"exportable\":true}}", + "status": 400, + "response": "{\"error\":{\"code\":\"BadParameter\",\"message\":\"Exportable keys must have release policy (Activity ID: 1f4cfafa-ec1a-11eb-b771-000d3a7a3d40)\"}}", + "responseHeaders": { + "cache-control": "no-cache", + "content-length": "138", + "content-security-policy": "default-src 'self'", + "content-type": "application/json; charset=utf-8", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-content-type-options": "nosniff", + "x-frame-options": "SAMEORIGIN", + "x-ms-request-id": "1f4cfafa-ec1a-11eb-b771-000d3a7a3d40", + "x-ms-server-latency": "15" + } + } + ], + "uniqueTestInfo": { + "uniqueName": { + "exportablenopolicy": "exportablenopolicy162708825049405352" + }, + "newDate": {} + }, + "hash": "f84200808daf34e5db96c9c730d45142" +} \ No newline at end of file diff --git a/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_create_an_exportable_key_and_release_it.js b/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_create_an_exportable_key_and_release_it.js new file mode 100644 index 000000000000..363decfd8c7e --- /dev/null +++ b/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_create_an_exportable_key_and_release_it.js @@ -0,0 +1,214 @@ +let nock = require('nock'); + +module.exports.hash = "1b63d4e583c999b3d791de3bc2cd5da7"; + +module.exports.testInfo = {"uniqueName":{"exportkey":"exportkey162708823218505039"},"newDate":{}} + +nock('https://skrattestation.azurewebsites.net:443', {"encodedQueryParams":true}) + .get('//generate-test-token') + .reply(200, {"token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiJ6ZGZTNFpsRndVTHBSa1RmN3l0Q1N4X0Q3NnRpNXNPMUhhYmFLUUhzZUNMX0t6azB1NjJSeURYZm1pbE13d1VpY09VVTZ6b1BRS1NpUU5BNWc2WjUyWmduczJDNXcwTU1STndXOU11Nk1SLVdpNVByZUJBdVB3NjA4OVNUNVZha0F5eXRHNHpMX1dsdFo2Ny1LQ2ppVFo1Y05zTkwwajF2djU5aVNfVFN4MVo5bEQzT1Vzc095aTNLSFJvZ0tZeER3UENkeG0wclZCQkFHSVdtdGZUbVh4al9wdzJlbkZBWXJFZ1VBbHV1NE5LX3kycHRBMTcwTkgycEh4UHVVUy00LWViSzJveW9XU3VhdzMweTcyWmN5M2U0dDRVaGF0UGN2ZkJJVXlLUlVnU1o1UVItYTFNVm5GRUFWamhfa2VuREFoWnlWYXRRdDVSZ3hiZGZwSDRaU1EifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyMzEsImV4cCI6MTk0MjY2NDIzMX0.SokKaotTVOLLHETDsfqYEAsLGvXUuTmako5oBGgoB1BaOsNJFxuQM8S2CMJ8VJIIfmQTgSGlEvOgNwxtUSyX7UF-dLjxEP2jqBdwb8xfQ9rfe8s5QPxIumvIdUep2sGyZuI6AYjzT1ktVij4pVYUEqNJ63YlW_DGE4mFdPQz9TPrtc2b2PyTWXjMvCccOab5l9Y9scqphGV57qMs9lvwdDQSQVlP5AbLeIJ2C5hTaOvKtpzN33ZRb6a73PJULWbNxtNg4vQrUQlnKzJ5YWMyVntZ8dtf2-PSBPMkBo3gZkEsu_5jglQ7NdNX_Ao57SsVAcm_dmmrhl56yrVyv2oz5Q"}, [ + 'Content-Length', + '1305', + 'Content-Type', + 'application/json; charset=utf-8', + 'ETag', + 'W/"519-WTTtFmCBP6tZRTm0UNJIo28zImg"', + 'X-Powered-By', + 'Express', + 'Set-Cookie', + 'ARRAffinity=31a267ed7b71ec86982412cc9dc4ad2f31ca2b8f51b692363aa765c405b03b84;Path=/;HttpOnly;Secure;Domain=skrattestation.azurewebsites.net', + 'Set-Cookie', + 'ARRAffinitySameSite=31a267ed7b71ec86982412cc9dc4ad2f31ca2b8f51b692363aa765c405b03b84;Path=/;HttpOnly;SameSite=None;Secure;Domain=skrattestation.azurewebsites.net', + 'Date', + 'Sat, 24 Jul 2021 00:57:11 GMT', + 'Connection', + 'close' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .post('/keys/exportkey162708823218505039/create') + .query(true) + .reply(401, "", [ + 'content-type', + 'application/json; charset=utf-8', + 'x-ms-server-latency', + '1', + 'x-content-type-options', + 'nosniff', + 'www-authenticate', + 'Bearer authorization="https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012", resource="https://managedhsm.azure.net"', + 'x-frame-options', + 'SAMEORIGIN', + 'content-length', + '0', + 'x-ms-request-id', + '149de2b8-ec1a-11eb-a602-000d3a7a3d40', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'cache-control', + 'no-cache' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/common/discovery/instance') + .query(true) + .reply(200, {"tenant_discovery_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/v2.0/.well-known/openid-configuration","api-version":"1.1","metadata":[{"preferred_network":"login.microsoftonline.com","preferred_cache":"login.windows.net","aliases":["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{"preferred_network":"login.partner.microsoftonline.cn","preferred_cache":"login.partner.microsoftonline.cn","aliases":["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{"preferred_network":"login.microsoftonline.de","preferred_cache":"login.microsoftonline.de","aliases":["login.microsoftonline.de"]},{"preferred_network":"login.microsoftonline.us","preferred_cache":"login.microsoftonline.us","aliases":["login.microsoftonline.us","login.usgovcloudapi.net"]},{"preferred_network":"login-us.microsoftonline.com","preferred_cache":"login-us.microsoftonline.com","aliases":["login-us.microsoftonline.com"]}]}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Length', + '980', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + 'b51ae70d-09fc-4849-8adf-fd82d4896f00', + 'x-ms-ests-server', + '2.1.11898.8 - SCUS ProdSlices', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8; expires=Mon, 23-Aug-2021 00:57:12 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7Wevrk5yoA2EhvLvHOcM2HdLcW8zko36HFU7A9g-2sovKrBiani5yRY1QFja5-r2A9UJwqMLpkYbmDFiU5Dp1eHBZUfdcfDNO4UOwHDtV4f9gOBVip8hhsPkPWzSw_WJNlpqMd4K2ED1rnXO52x3DZS-GCKYz8a0k73FXwjwtkheg60kgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:12 GMT' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/12345678-1234-1234-1234-123456789012/v2.0/.well-known/openid-configuration') + .reply(200, {"token_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token","token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt","client_secret_basic"],"jwks_uri":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/discovery/v2.0/keys","response_modes_supported":["query","fragment","form_post"],"subject_types_supported":["pairwise"],"id_token_signing_alg_values_supported":["RS256"],"response_types_supported":["code","id_token","code id_token","id_token token"],"scopes_supported":["openid","profile","email","offline_access"],"issuer":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/v2.0","request_uri_parameter_supported":false,"userinfo_endpoint":"https://graph.microsoft.com/oidc/userinfo","authorization_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/authorize","device_authorization_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/devicecode","http_logout_supported":true,"frontchannel_logout_supported":true,"end_session_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/logout","claims_supported":["sub","iss","cloud_instance_name","cloud_instance_host_name","cloud_graph_host_name","msgraph_host","aud","exp","iat","auth_time","acr","nonce","preferred_username","name","tid","ver","at_hash","c_hash","email"],"kerberos_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/kerberos","tenant_region_scope":"WW","cloud_instance_name":"microsoftonline.com","cloud_graph_host_name":"graph.windows.net","msgraph_host":"graph.microsoft.com","rbac_url":"https://pas.windows.net"}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + 'ab07601a-f85d-4ef5-8a4a-b095d96e1400', + 'x-ms-ests-server', + '2.1.11898.8 - EUS ProdSlices', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8; expires=Mon, 23-Aug-2021 00:57:12 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7Wevr8cvXhtSBD1vgANY5B_YJIyymp0ZtJ0hkcvnjt_1jShkX5O_oj_GvaNyil2s8Jt18PS8vOvkataCycZGqz1vEPgPeqQq--AMkO_qz5pkSOaTRVEkobe79c4Z0PFR1CNn1DqBNCfTadQAccyi08VMAoLJ0nmO3NUNzL5_Ju3IHuz0gAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:12 GMT', + 'Content-Length', + '1753' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .post('/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token', "client_id=azure_client_id&scope=https%3A%2F%2Fsanitized%2F&grant_type=client_credentials&x-client-SKU=msal.js.node&x-client-VER=1.1.0&x-client-OS=linux&x-client-CPU=x64&x-ms-lib-capability=retry-after, h429&x-client-current-telemetry=2|771,0|,&x-client-last-telemetry=2|0|||0,0&client-request-id=248016a0-8254-468f-a778-d7e4240f9311&client_secret=azure_client_secret") + .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ + 'Cache-Control', + 'no-store, no-cache', + 'Pragma', + 'no-cache', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '5b7bea29-98d2-4a85-9f85-8edc9de33f00', + 'x-ms-ests-server', + '2.1.11898.8 - SCUS ProdSlices', + 'x-ms-clitelem', + '1,0,0,,', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8; expires=Mon, 23-Aug-2021 00:57:12 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:12 GMT', + 'Content-Length', + '1322' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .post('/keys/exportkey162708823218505039/create', {"kty":"RSA","key_ops":["encrypt","decrypt"],"attributes":{"exportable":true},"release_policy":{"data":"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJjb25kaXRpb24iOiJlcXVhbHMiLCJ2YWx1ZSI6InRydWUifV0sImF1dGhvcml0eSI6Imh0dHBzOi8vc2tyYXR0ZXN0YXRpb24uYXp1cmV3ZWJzaXRlcy5uZXQvIn1dLCJ2ZXJzaW9uIjoiMS4wIn0"}}) + .query(true) + .reply(200, {"attributes":{"created":1627088232,"enabled":true,"exportable":true,"recoverableDays":7,"recoveryLevel":"CustomizedRecoverable+Purgeable","updated":1627088232},"key":{"e":"AQAB","key_ops":["decrypt","encrypt"],"kid":"https://azure_managedhsm.managedhsm.azure.net/keys/exportkey162708823218505039/9fe10021ac7942c086f87cd553577a18","kty":"RSA-HSM","n":"lpeoEAaspTHAfFD2ukFsInLkGnJ8WHuPswaow4LNFKxiQxFfcAWwhxrPFQCtwdqFAj-ukLRATvRCfvrPr-vJB1tRK_5JsUO8JqzOZ7AGVvCGLVTIJfDloSy-rQUbFbR155PhthX8DUAZNfvdB84tCi_TbzEcAcFV0wrF32ZUy6VzFq64eqJnCntEWO7roY4U53Ixeh7AcnPHpV65MWJruQOso9p8AutjfloK4RcYrNHFGQT7gAmCeWPZ30C0dZRAQPs5TxU5IJKLai850I5zW3nHhNC8wWZjv7vFpKyqEOzno5oMBuRs_r5IjDzcIbqxGw3k6eTaXdlR8G8WCShmNw"},"release_policy":{"contentType":"application/json; charset=utf-8","data":"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJlcXVhbHMiOiJ0cnVlIn1dLCJhdXRob3JpdHkiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyJ9XSwidmVyc2lvbiI6IjEuMC4wIn0"}}, [ + 'content-type', + 'application/json; charset=utf-8', + 'x-content-type-options', + 'nosniff', + 'content-length', + '952', + 'x-ms-request-id', + '14f233e0-ec1a-11eb-a602-000d3a7a3d40', + 'x-ms-keyvault-region', + 'eastus2', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'x-ms-keyvault-network-info', + 'conn_type=Ipv4;addr=50.35.231.105;act_addr_fam=Ipv4;', + 'x-ms-server-latency', + '750', + 'cache-control', + 'no-cache', + 'x-frame-options', + 'SAMEORIGIN' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .post('/keys/exportkey162708823218505039//release', {"target":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiJ6ZGZTNFpsRndVTHBSa1RmN3l0Q1N4X0Q3NnRpNXNPMUhhYmFLUUhzZUNMX0t6azB1NjJSeURYZm1pbE13d1VpY09VVTZ6b1BRS1NpUU5BNWc2WjUyWmduczJDNXcwTU1STndXOU11Nk1SLVdpNVByZUJBdVB3NjA4OVNUNVZha0F5eXRHNHpMX1dsdFo2Ny1LQ2ppVFo1Y05zTkwwajF2djU5aVNfVFN4MVo5bEQzT1Vzc095aTNLSFJvZ0tZeER3UENkeG0wclZCQkFHSVdtdGZUbVh4al9wdzJlbkZBWXJFZ1VBbHV1NE5LX3kycHRBMTcwTkgycEh4UHVVUy00LWViSzJveW9XU3VhdzMweTcyWmN5M2U0dDRVaGF0UGN2ZkJJVXlLUlVnU1o1UVItYTFNVm5GRUFWamhfa2VuREFoWnlWYXRRdDVSZ3hiZGZwSDRaU1EifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyMzEsImV4cCI6MTk0MjY2NDIzMX0.SokKaotTVOLLHETDsfqYEAsLGvXUuTmako5oBGgoB1BaOsNJFxuQM8S2CMJ8VJIIfmQTgSGlEvOgNwxtUSyX7UF-dLjxEP2jqBdwb8xfQ9rfe8s5QPxIumvIdUep2sGyZuI6AYjzT1ktVij4pVYUEqNJ63YlW_DGE4mFdPQz9TPrtc2b2PyTWXjMvCccOab5l9Y9scqphGV57qMs9lvwdDQSQVlP5AbLeIJ2C5hTaOvKtpzN33ZRb6a73PJULWbNxtNg4vQrUQlnKzJ5YWMyVntZ8dtf2-PSBPMkBo3gZkEsu_5jglQ7NdNX_Ao57SsVAcm_dmmrhl56yrVyv2oz5Q"}) + .query(true) + .reply(200, {"value":"eyJhbGciOiJSUzI1NiIsImtpZCI6IlU0NXdTcDZrT2tQZUQxX2M1WURSZlVHb0JseThxSDlHMTlaZnVGVkx5WWsiLCJ4NWMiOlsiTUlJSW1UQ0NCb0dnQXdJQkFnSVRNd0FXKzlEby9manlOampiYkFBQUFCYjcwREFOQmdrcWhraUc5dzBCQVF3RkFEQlpNUXN3Q1FZRFZRUUdFd0pWVXpFZU1Cd0dBMVVFQ2hNVlRXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVNU293S0FZRFZRUURFeUZOYVdOeWIzTnZablFnUVhwMWNtVWdWRXhUSUVsemMzVnBibWNnUTBFZ01EVXdIaGNOTWpFd056STBNREF6T0RNNFdoY05Nakl3TnpFNU1EQXpPRE00V2pCOU1Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DVjBFeEVEQU9CZ05WQkFjVEIxSmxaRzF2Ym1ReEhqQWNCZ05WQkFvVEZVMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiakV2TUMwR0ExVUVBd3dtS2k1dFlXeGxaMlZ6YTNKbGJqSm9jMjB1YldGdVlXZGxaR2h6YlM1aGVuVnlaUzV1WlhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURoSjZnSlljek5VbnBrZmgrNktXbXk5UnRXYm1RMXIxaEpoK2tnc3pCc2F0UW9zaEpWa1IzMWxFdkU4dUJtalA5TnNwSHY3SHJWVHRRcVFtcDVwNUw1UGRacys5ZVUwdHBWdGhWUGxqUE5iN1REaUZrWWlPV0JuVXFOaFQwQ1RGVHpRWWV1NUZOazV0QkhvbGloVWRwVVZWUjJXZkpQSWNIY3h6SFBIcjRMeEwza0liZFc5aXdEdlYwSlFnU2MvSmp6OWZXK092SWlKMUpNdXBsbndOc2VhTVo2U0hrdVN1enp4MnBYQWgwck9XUDZ6ZGJXUVpvZjBMN3VRK0VqTTFiQW1SMU5NbWN1V2tLeUkzaTJEblJraEpMRDlZdlcrcWkvMzBDbWVSRWQxczd1UkZkRGxsdCtOVFYxMit1OWZ2Z1ZlWHhGVHA4U3Z3dW1XWTFpVVhRZkFnTUJBQUdqZ2dRME1JSUVNRENDQVg0R0Npc0dBUVFCMW5rQ0JBSUVnZ0Z1QklJQmFnRm9BSFlBN2t1OXQzWE9ZTHJoUW1rZnErR2VacU1QZmwrd2N0aURBTVI3aVhxby9jc0FBQUY2MWZ4THFnQUFCQU1BUnpCRkFpQmNYYm9NSUk1OUdRTVZpdDJGMkkzTTF0RDhNMDJlSTFJVVRyRXkvbWlSY1FJaEFOY256QTdzUWJ3Q3lNQXdadUVxUDlLNGFGNDU2aGpESjVSOE9EamRhUkhDQUhZQVFjaktzZDhpUmtvUXhxRTZDVUtIWGs0eGl4c0Q2K3RMeDJqd2tHS1dCdllBQUFGNjFmeEwrZ0FBQkFNQVJ6QkZBaUVBalBoclZpZDYxMjh4cjV3UFI0bytCQ0FYbUpTTHY0MVhsZE9zaU9uYWVmQUNJQmp1Z242UUd5ZjA1RXU1L3lsNjVabmJvbFhodUZmT2NJRlNoTm1EZFFUSkFIWUFVYU93OWYwQmVaeFdiYmczZUk4TXBIck1HeWZMOTU2SVFwb04vdFNMQmVVQUFBRjYxZnhNSUFBQUJBTUFSekJGQWlFQW1wK2JXMXFrUWZkaWJQOEoreUh1SC92L0ExZk9MaGVQcVIwSnpJVVBhMjRDSUgzS2FZc3Z6RnNES3FsZm1YZ2E4UlhYWHM4T0d5WkhHY0U3dGx6TEJFSkFNQ2NHQ1NzR0FRUUJnamNWQ2dRYU1CZ3dDZ1lJS3dZQkJRVUhBd0l3Q2dZSUt3WUJCUVVIQXdFd1BBWUpLd1lCQkFHQ054VUhCQzh3TFFZbEt3WUJCQUdDTnhVSWg3M1hHNEhuNjBhQ2daMHVqdEFNaC9EYUhWMkNoT1ZwZ3ZPblBnSUJaQUlCSXpDQnJnWUlLd1lCQlFVSEFRRUVnYUV3Z1o0d2JRWUlLd1lCQlFVSE1BS0dZV2gwZEhBNkx5OTNkM2N1YldsamNtOXpiMlowTG1OdmJTOXdhMmx2Y0hNdlkyVnlkSE12VFdsamNtOXpiMlowSlRJd1FYcDFjbVVsTWpCVVRGTWxNakJKYzNOMWFXNW5KVEl3UTBFbE1qQXdOU1V5TUMwbE1qQjRjMmxuYmk1amNuUXdMUVlJS3dZQkJRVUhNQUdHSVdoMGRIQTZMeTl2Ym1WdlkzTndMbTFwWTNKdmMyOW1kQzVqYjIwdmIyTnpjREFkQmdOVkhRNEVGZ1FVZEJLWmN4NnRITWw4MVFqbkpqSGFkNjRqdEwwd0RnWURWUjBQQVFIL0JBUURBZ1N3TUZjR0ExVWRFUVJRTUU2Q0ppb3ViV0ZzWldkbGMydHlaVzR5YUhOdExtMWhibUZuWldSb2MyMHVZWHAxY21VdWJtVjBnaVJ0WVd4bFoyVnphM0psYmpKb2MyMHViV0Z1WVdkbFpHaHpiUzVoZW5WeVpTNXVaWFF3WkFZRFZSMGZCRjB3V3pCWm9GZWdWWVpUYUhSMGNEb3ZMM2QzZHk1dGFXTnliM052Wm5RdVkyOXRMM0JyYVc5d2N5OWpjbXd2VFdsamNtOXpiMlowSlRJd1FYcDFjbVVsTWpCVVRGTWxNakJKYzNOMWFXNW5KVEl3UTBFbE1qQXdOUzVqY213d1pnWURWUjBnQkY4d1hUQlJCZ3dyQmdFRUFZSTNUSU45QVFFd1FUQS9CZ2dyQmdFRkJRY0NBUll6YUhSMGNEb3ZMM2QzZHk1dGFXTnliM052Wm5RdVkyOXRMM0JyYVc5d2N5OUViMk56TDFKbGNHOXphWFJ2Y25rdWFIUnRNQWdHQm1lQkRBRUNBakFmQmdOVkhTTUVHREFXZ0JUSHNweC9IT080V3UvcGFCcW9YWlRCSmxKcWFEQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBZ1lJS3dZQkJRVUhBd0V3RFFZSktvWklodmNOQVFFTUJRQURnZ0lCQUtkcWp3TlEzd1NlbWpma3VmaHFPQXpZNUZzRmMvQ3NIenltOFhNTkRwTzNhUjFCRkM0VFlyQ0dQdmFBZ2FDcjZPUlpVYmpKVHliWWxzMDBVYjJwM2lyUlVOdXJMNlcrQlROZUczNFBWTFVHaFBLVG9TZ0p6Q2t0ZzNkY2dHL2ZHMmd6Zmp4SFl1UEFiN3pwRlFjY1c1d1pIeTg2eEhlRVdadkdsR014c21DSTNJbGpaVXg2bnBQWSs5ZGhqYmRrN0hmUTRFMTRZOFFXaXBsR1dUY04zVE1GY0RiRVpCdlY0SjZsblptWHJINlZMbkdBbi9Tc0ozbFZNbXdpNGNvQWJkM3VWaTZZQm9CZDVmY1lTV2JFYmRjcG1JOVdVNUhOMGtRUmFMYTdkVE1mK0hnSkp6QlFUWFNybWJ2aGVFWklkWnlLY3BNSWluQUZyZGJMRWphZEVORW90MzJ1T2Z1eVpXeXAvcGg1bWFoaC9HSkJCZ3NvRzJzL3o4YzRoMVFneC9KQ0JKS09VRWF3WXQ2UTZSL3Byaklnc2Q0RXZuWGhtbS93djJHeDFHa0NVQ2RpcW5aZ09CQ3RKYWpNUnBiczVQblYwajczTFROUHp4TmpyWjFrM2ZkL1Y4dzFIb1hYSDBZTHoxc25idzJPSlpEMzRJMk8zVVlrV3pPR1lzMUVWUWtXZWJtdlVjVjNOK291UUFXK0gxY0hmR01memt0Q0tSdkFUNHI0b3FIY0p6dVdSeVcvM2VNNEdCOUdzY01kTFBNdEJjVkplU29YTkRqWDh6cWw5RnlyUWROaWUyTS9YNEozc0ZTNG9hMGx5SmhsRU11d2dWbytSc01SQm8valFiZ3ZsSXZsWmdaem95TU9WNlB3c1E5b3lQNEl5ZjB2eVVLejkzS3RkNWxmIiwiTUlJRjh6Q0NCTnVnQXdJQkFnSVFEWHZ0NlgyQ0NaWjZVbU1iaTkwWXZUQU5CZ2txaGtpRzl3MEJBUXdGQURCaE1Rc3dDUVlEVlFRR0V3SlZVekVWTUJNR0ExVUVDaE1NUkdsbmFVTmxjblFnU1c1ak1Sa3dGd1lEVlFRTEV4QjNkM2N1WkdsbmFXTmxjblF1WTI5dE1TQXdIZ1lEVlFRREV4ZEVhV2RwUTJWeWRDQkhiRzlpWVd3Z1VtOXZkQ0JITWpBZUZ3MHlNREEzTWpreE1qTXdNREJhRncweU5EQTJNamN5TXpVNU5UbGFNRmt4Q3pBSkJnTlZCQVlUQWxWVE1SNHdIQVlEVlFRS0V4Vk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR4S2pBb0JnTlZCQU1USVUxcFkzSnZjMjltZENCQmVuVnlaU0JVVEZNZ1NYTnpkV2x1WnlCRFFTQXdOVENDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFLcGxEVG1ROWFmd1ZQUWVsRHV1K05reE5KMDg0Q05LbnJaMjFBQmV3RStVVTRHS0Rud3lnWmRLNmFnTlNNczVVb2NoVUVEeno5Q3BkVjV0ZFB6TDE0Ty9HZUUyZ081L2FVRlRVTUc5YzZuZXl4azV0cTFXZEtzUGtpdFB3czZWOE1XYTVkMUwveTRSRmhaSFVzZ3h4VXlTbFlsR3BOY0hoaHN5cjdFdkZlY1pHQTFNZnNpdEFXVnA2aGlXQU5rV0tJTmZSY2R0M1oyQTIzaG1NSDlNUlNHQmNjSGlQdXp3clZzU21Md3Z0M1dsUkRnT2JKa0U0MHRGWXZKNkdYQVFpYUdIQ0lXU1ZPYmdPM3pqNnhrZGJFRk1tSi96cjJXZXQ1S0VjVUR0VUJoQTRkVVVvYVBWejY5dTQ2VjU2VnNjeTNsWHUxWWxzazg0ajVsVVBMZHNBeHR1bHRQNE9QUW9PVHBuWThreFdrSDZrZ081Z1RLRTNIUnZvVklqVTR4SjBKUTc0Nnp5LzhHZFFBMzZTYU5pejRVM3UxMHpGWmcyUmt2MmRMMUx2NThFWEwwMnI1cTVCL25oVkgvTTFqb1R2cFJ2YWVFcEFKaGtJQTlOa3B2YkdFcFNkY0EwT3J0T09lR3Ryc2lPeU1CWWtqcEI1bncwY0pZMVFIT3Izbkl2SjJPblkrT0tKYkRTcmhGcVdzazgvMXE2WjFXTnZPTno3dGUxcEF0SGVyZFBpNXBDSGVpWENOcHYrZmFkd1AwazhjemFmMlZzMTluWXNnV241dUl5TFFMOEVlaGRCekNiT0tKeTlzbDg2UzRGcWU0SEd5QXRtcUdsYVdPc3EyQTZPL3BhTWkzQlNtV1REYmdQTENQQmJQdGUvYnN1QUVGNGFqa1BFRVMzR0hQOUFnTUJBQUdqZ2dHdE1JSUJxVEFkQmdOVkhRNEVGZ1FVeDdLY2Z4emp1RnJ2NldnYXFGMlV3U1pTYW1nd0h3WURWUjBqQkJnd0ZvQVVUaUpVSUJpVjV1TnU1Zy82K3JrUzdRWVhqemt3RGdZRFZSMFBBUUgvQkFRREFnR0dNQjBHQTFVZEpRUVdNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQU1IWUdDQ3NHQVFVRkJ3RUJCR293YURBa0JnZ3JCZ0VGQlFjd0FZWVlhSFIwY0RvdkwyOWpjM0F1WkdsbmFXTmxjblF1WTI5dE1FQUdDQ3NHQVFVRkJ6QUNoalJvZEhSd09pOHZZMkZqWlhKMGN5NWthV2RwWTJWeWRDNWpiMjB2UkdsbmFVTmxjblJIYkc5aVlXeFNiMjkwUnpJdVkzSjBNSHNHQTFVZEh3UjBNSEl3TjZBMW9ET0dNV2gwZEhBNkx5OWpjbXd6TG1ScFoybGpaWEowTG1OdmJTOUVhV2RwUTJWeWRFZHNiMkpoYkZKdmIzUkhNaTVqY213d042QTFvRE9HTVdoMGRIQTZMeTlqY213MExtUnBaMmxqWlhKMExtTnZiUzlFYVdkcFEyVnlkRWRzYjJKaGJGSnZiM1JITWk1amNtd3dIUVlEVlIwZ0JCWXdGREFJQmdabmdRd0JBZ0V3Q0FZR1o0RU1BUUlDTUJBR0NTc0dBUVFCZ2pjVkFRUURBZ0VBTUEwR0NTcUdTSWIzRFFFQkRBVUFBNElCQVFBZStHK0cyUkZkV3RZeExJS01SNUgvYVZORmpOUDdKZGV1K29aYUthSXU3VTNOaWR5a0ZyOTk0alN4TUJNVjc2OHVrSjUvaExTS3N1ai9TTGptQWZ3UkFaK3cwUkdxaS9rT3ZQWVVsQnIvc0tPd3IzdFZrZzljY1pCZWJuQlZHK0RMS1RwMk94MCtqWUJDUHhsYTVGTzI1MnFwazcvNnd0OFNaazNkaVNVMTJKbTdpZi9qamtoa0dCL2U4VWRmcktvTHl0RHZxVmVpd1BBNUZQenFLb1NxTjc1YnlManNJS0pFZE5pMDdTWTQ1aE4vUlVuc21Jb0FmOTNxbGFIUi9TSldWUmhyV3QzSm1lb0JKMlJESzQ5MnpGNlRHdTFtb2g0YUU2ZTAwWWt3VFBXcmV1d3ZhTEIyMjB2V210Z1pQcytEU0liMmQ5aFBCZENKZ3ZjaG8xYzciLCJNSUlEampDQ0FuYWdBd0lCQWdJUUF6cng1cWNScWFDN0tHU3hIUW42NVRBTkJna3Foa2lHOXcwQkFRc0ZBREJoTVFzd0NRWURWUVFHRXdKVlV6RVZNQk1HQTFVRUNoTU1SR2xuYVVObGNuUWdTVzVqTVJrd0Z3WURWUVFMRXhCM2QzY3VaR2xuYVdObGNuUXVZMjl0TVNBd0hnWURWUVFERXhkRWFXZHBRMlZ5ZENCSGJHOWlZV3dnVW05dmRDQkhNakFlRncweE16QTRNREV4TWpBd01EQmFGdzB6T0RBeE1UVXhNakF3TURCYU1HRXhDekFKQmdOVkJBWVRBbFZUTVJVd0V3WURWUVFLRXd4RWFXZHBRMlZ5ZENCSmJtTXhHVEFYQmdOVkJBc1RFSGQzZHk1a2FXZHBZMlZ5ZEM1amIyMHhJREFlQmdOVkJBTVRGMFJwWjJsRFpYSjBJRWRzYjJKaGJDQlNiMjkwSUVjeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdXpmTk5OeDdhOG15YUpDdFNuWC9Scm9oQ2dpTjlSbFV5ZnVJMi9PdThqcUprVHg2NXFzR0dtdlByQzNvWGdra1JMcGltbjdXbzZoKzRGUjFJQVdzVUxlY1l4cHNNTnphSHhteDF4N2UvZGZneTVTRE42N3NIME5PM1hzczByMHVwUy9rcWJpdE90U1pwTFlsNlp0ckFHQ1NZUDlQSVVrWTkyZVFxMkVHbkkveXV1bTA2Wkl5YTdYelYraGRHODJNSGF1VkJKVko4elV0bHVOSmJkMTM0L3RKUzdTc1ZRZXBqNVd6dENPN1RHMUY4UGFwc3BVd3RQMU1WWXduU2xjVWZJS2R6WE9TMHhaS0JneU1VTkdQSGdtK0Y2SG1JY3I5ZytVUXZJT2xDc1JuS1BaekZCUTlSbmJEaHhTSklUUk5ydzlGREtaSm9icTduTVd4TTRNcGhRSURBUUFCbzBJd1FEQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCaGpBZEJnTlZIUTRFRmdRVVRpSlVJQmlWNXVOdTVnLzYrcmtTN1FZWGp6a3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR0JuS0pSdkRraGo2ekhkNm1jWTFZbDlQTVdMU24vcHZ0c3JGOSt3WDNOM0tqSVRPWUZuUW9RajhrVm5OZXlJdi9pUHNHRU1OS1N1SUV5RXh0djROZUYyMmQrbVFydkhSQWlHZnpaMEpGcmFiQTBVV1RXOThrbmR0aC9Kc3cxSEtqMlpMN3RjdTdYVUlPR1pYMU5HRmR0b20vRHpNTlUrTWVLTmhKN2ppdHJhbGo0MUU2VmY4UGx3VUhCSFFSRlhHVTdBajY0R3hKVVRGeThiSlo5MThyR09tYUZ2RTdGQmNmNklLc2hQRUNCVjEvTVVSZVhnUlBUcWg1VXlrdzcrVTBiNkxKMy9peUs1UzlrSlJhVGVwTGlhV04wYmZWS2ZqbGxEaUlHa25pYlZiNjNkRGNZM2ZlMERraHZsZDE5MjdqeU54RjFXVzZMWlptNnpOVGZsTXJZPSJdLCJ4NXQjUzI1NiI6IlU0NXdTcDZrT2tQZUQxX2M1WURSZlVHb0JseThxSDlHMTlaZnVGVkx5WWsifQ.eyJyZXF1ZXN0Ijp7ImFwaS12ZXJzaW9uIjoiNy4zLXByZXZpZXciLCJlbmMiOiJDS01fUlNBX0FFU19LRVlfV1JBUCIsImtpZCI6Imh0dHBzOi8vbWFsZWdlc2tyZW4yaHNtLm1hbmFnZWRoc20uYXp1cmUubmV0L2tleXMvZXhwb3J0a2V5MTYyNzA4ODIzMjE4NTA1MDM5In0sInJlc3BvbnNlIjp7ImtleSI6eyJhdHRyaWJ1dGVzIjp7ImNyZWF0ZWQiOjE2MjcwODgyMzIsImVuYWJsZWQiOnRydWUsImV4cG9ydGFibGUiOnRydWUsInJlY292ZXJhYmxlRGF5cyI6NywicmVjb3ZlcnlMZXZlbCI6IkN1c3RvbWl6ZWRSZWNvdmVyYWJsZStQdXJnZWFibGUiLCJ1cGRhdGVkIjoxNjI3MDg4MjMyfSwia2V5Ijp7ImUiOiJBUUFCIiwia2V5X2hzbSI6ImV5SmphWEJvWlhKMFpYaDBJam9pVEVSVVFrUlRiSGx5U0cwMWFrMHlVRkZaT1Y5dFExUXRkMFJwTFRCSWRGWm5aR2RWTjFKME5XdE1NelppTWpGUGRYTnlVUzFWYzFaa01GRXlNRWRvUm5CRVV6Tm5hVlo2V1dseFQzVnZURFk1T1dwTFpYTXhSbWhKVDNwSVpUSlBlR0p1Ym01MGFXaHViRGxNU0VSSVQxRTJXRWhUZERBMVJqTnhNRE5CVmxGbFgzUTBiWFJLTWsxcVlscFFPRVZyTkZCWVJsVXlNWFo1VUZacU1tdDVhbGRNVW1GWk5FNUtNVGM0Wm5aRFUzbG9RMkZhYUV0YWEwd3phbnBtY1VkNE1VZFVUa1JoVWxaSVl6WXRiMDVoYTFwQlpUbHZhMFozVWpCMVMzcHlkWGwxYTNCTFZXeFdUR05VYkhGcVZHZG1NWGRoU0VKMllXeFhMVXBTU210WVRqTkZhbEY2TFMxRk4ydFJWMXBTVmtOU00ybFBOMnBCWjJSblMxTjRjVXhXZVhndFZIcE5iRXhPVTE4elQyVTVNazVuYVZNdFJrWldiMWc0VjBJMWJVdEdSa2RZU2xGamRqVnBRbDlhTlRoeVpWRmZia1JOWHpScFMyd3lUVk5GYlZoR1NrbHZSMHhKWDJaVlkyVnRlVU5DYjI1alZrdDFiMk56TTNsRGVFSlBNME5mZG1FNU1YVjZSa2RPWDFsemNXOXhlazh6UldWd09YbE5hM0l5YlV4VFRVOUVObGxEWjJoT1JERTNZVGx6ZW5CRlZtZDFWazE2VTBwRVZqVnlibE5LVVdwcmFtSnhiWGw2WWpsb04xOWthbFZKUlVsaGNGTjJjbkUxVVdKU1NVSTRWRTFxWmpSclNUWjNaRWx3VVdsVlpXdFFZMkZ2YURWM1MwZE9Wbk5EVHpKRWNuQnpaakpqYzBWZmJYUnNiWGR5UVRneWJIUlhNVFpETW1GdU9VVXpaakpFVDBsaE9FTkdRMWxFUW5KRFJrVXRTRlJxYVhWTmIybEZjRkJwV2s5dlprSkhlV3BzYzBoSE5XTk9PVFJQY1hOeVJIbElUVGR5VVRsclpIY3dURWd5YUdweFdtbDVNSGRVYVVaQ1VVbG5iazlFUm1GSWQwRlJWVWhKWVRoUFQwWnJObFZWVUU5NE1WRkxiRlZCYjFCdGMzUXliemhzVVVWUk1VUjBWM1Z5YTNCTlJ6RlJYMWhYY2pSUGNsQjZNWEI0U21aRlJVSTFNRVIxUkZWVlJIcGFkM05mU0VWbGJucDVjVE5aUmpkcFp6WTFhSEpsTjJodlV6Um5kVmN6VlhrdExWVTFYMjAxZFVaVFJsOVhkVUo1YzA1TFVVeDNaak5qYjBweGFXRm9RbmRFUWtGeU5VUTBOMGhNWTJKQk5GUnZkakI2VDBkWGEydEJVRVZWV0ZkRWNWZGhWblpRUm1GaVREWktSbWRCYXpGTmIxcDFiR3BoZFdsQmVXaE9RVk5FWWpaaFVtUkthRnBmVGpGb2JFRjRZa3BvVkhSaE4wd3dTMDUzTWxKdU5FcHlOemxMVmpsU2RqSlNObk5KUTNVeGMwVnlOR3hJVlVaNmVFMXpTSEoxVW5ocU9EVjFWMEppYUdVMlRtbHZNSEpKVlZsa1YxSlNjV1ZLUkVKUFJGTjFlVmMyTUhOalEwNXRVVEZpVVRCcmQwMTVWVVJIUldoR1ZYRk1hbk0xYW5vMlYyVmpiM0pXYW1sRGRIcG9SRWRPVGpGVlRWTnJNVTFMTFdWMWMyWmpZa1F6VkdWclRsQnliRkZSVlMwMWJuQkZWa3haYzFOM2NsbFlZMmxxVkVaMk1VUkdhRWRSTlMxUFVrSkpWMjlPTTNnMFJFOW1PR1pGTkZGZmRYTnNlbXd3ZWkxZlYzWXhRMmx5VkZZemIyVmpWRUZNVkcxamFUTTJiMVJIVWxad2NISlhRMUpvWkROQlJHcG5VelpmWTB4MWVIZHlNV2hQZVRkS1IyMWtaRVV0TlZoTFNrbFRiRGh0WDA5alJrcFZkVmx5ZW1SbGVuSnFUVFptU2xaNVJVeHdaRVpwUVZNeFdtaENjVGQ1WW1wbk5VSjNTMGRKVjBoS1pXUnBVek40WVZZdFl6TlhNVkpCWlhjMU5FTlRibFJ6YTFsZlEybzVhMk5xVmpoRFlVaDZVVlpNTkRVMWFEQXphekIzTlhCTldUVmtTR2RFTTFSb00zQnBSV2d6VWpSaFJUbFNRbTVuVW5SdFlYSk5OWEZ1ZWtaNldVOVFRazB4TkRCSVdqSlRXRzlvTlY5c1EwcHZXR1I0WjJSRmF6QnBkak53UW14aFNtSk9aSGR3VkZOcWNFUjVSVEJRUkhSdFVpMW1jREp0ZEUxd2VIRmZkWGh4ZW1ScmFUZFdaMEYzWDB3MVJYSkxZazVZUjJWbGNURldNbTQxZWpCaFMzRm1OVTh4UzE5dFlsTnpURWxhWmpsZlRuUklSR3BEZDBvdGJYWjFiRUkxWlhoUVkxVnJXVEp2TVVwSFJGbFJiR1pmWm1NMk5tSTBNbVI1Y2xZNE5GYzRjVzlJTW1FdFIzaG1RMlJPVEhoM1ptbHlXRlp4TkV4a1RFRXRZVE5MVGtFNWNXc3RVRlpFTmtSVWRVZExZakpXYldGdmFsTktkSFI0VG1wdGNuTmZUVUZVZUV4b09GOUNMVkZCTW1kd1VFZHBOVlI1YkRGRFNVSmplQzFwZFc0dE1uWktOMUJOYlhZNFVWQTVNRlZVUzFWRFNITkJZM0pqUWpBd1IxcGlTRmRsZEZGcE1Ia3hjbXhLUkdOVU1YY3lObWx0WTFVNFpFRkZUVXN6WVUweWRFOHhRblozVFVwNVYxOUpObVZwT1hGTmJVUXpiMjUzYzJWQ09XVTNZbWhDVjJOeWEzQTVNVnB0TkZwZk1Vd3Rka05CV1ZSdWJIbGFabXRzYkY5b1FsVkxUMVV3T1RkUU4wNUhkRlV6VWxoMExUSkhPRXBRWDFkT1JWTjFjbE16TVZwd2FVNUJVVUpqY1Zsb01GRnlUMVppWlZGTlFUaFRiVjlZYlRaS1ZVUnJZV3BhVFZWR1FrUTJVbGxMUzJOZlVGZEZabGszTmpkcGNuVmlOMVpsYTJkelQwYzRlWE5JYzFkSVltaE1aMHhXT0ZSWFprUkVOMXBpYlhwMUxUUXlObmcxTTNOV2FVcGlVVzgzY2pWTVJIZzNXR3RvVEVsRmEzTkNTVVJrWVVFdFpWUlNiVVJ3T1RoeVRITkdlak5zTFVKS01UbFhaVVZwWmtwRGNUUXhiSEkzVmpkaE1UVmFZWGhMYkRsNWVGaHBaV3c0U0hCaU5YTkRRbloxYm5OS1pWSXdURzFmWWpZNVJTMUJjbVpaV0hOS1VFUmxRVTlWY3pkQ1MyeDFYemxZVEZoQ1gwUnRPRU5CYTI5R1FYRTNTRWhaVlVSTGFYRjFaRko0U0VWTVl6RnFZMFpRV0hkeVFYZG9aMUJDVlV0SmVrOVBabTlLWTJaNFgyTXhOM0pTYjE5WlRDSXNJbWhsWVdSbGNpSTZleUpoYkdjaU9pSmthWElpTENKbGJtTWlPaUpEUzAxZlVsTkJYMEZGVTE5TFJWbGZWMUpCVUNJc0ltdHBaQ0k2SW1aaGEyVXRjbVZzWldGelpTMXJaWGtpZlN3aWMyTm9aVzFoWDNabGNuTnBiMjRpT2lJeExqQWlmUSIsImtleV9vcHMiOlsiZGVjcnlwdCIsImVuY3J5cHQiXSwia2lkIjoiaHR0cHM6Ly9tYWxlZ2Vza3JlbjJoc20ubWFuYWdlZGhzbS5henVyZS5uZXQva2V5cy9leHBvcnRrZXkxNjI3MDg4MjMyMTg1MDUwMzkvOWZlMTAwMjFhYzc5NDJjMDg2Zjg3Y2Q1NTM1NzdhMTgiLCJrdHkiOiJSU0EiLCJuIjoibHBlb0VBYXNwVEhBZkZEMnVrRnNJbkxrR25KOFdIdVBzd2FvdzRMTkZLeGlReEZmY0FXd2h4clBGUUN0d2RxRkFqLXVrTFJBVHZSQ2Z2clByLXZKQjF0UktfNUpzVU84SnF6T1o3QUdWdkNHTFZUSUpmRGxvU3ktclFVYkZiUjE1NVBodGhYOERVQVpOZnZkQjg0dENpX1RiekVjQWNGVjB3ckYzMlpVeTZWekZxNjRlcUpuQ250RVdPN3JvWTRVNTNJeGVoN0FjblBIcFY2NU1XSnJ1UU9zbzlwOEF1dGpmbG9LNFJjWXJOSEZHUVQ3Z0FtQ2VXUFozMEMwZFpSQVFQczVUeFU1SUpLTGFpODUwSTV6VzNuSGhOQzh3V1pqdjd2RnBLeXFFT3pubzVvTUJ1UnNfcjVJakR6Y0licXhHdzNrNmVUYVhkbFI4RzhXQ1NobU53In0sInJlbGVhc2VfcG9saWN5Ijp7ImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIsImRhdGEiOiJleUpoYm5sUFppSTZXM3NpWVc1NVQyWWlPbHQ3SW1Oc1lXbHRJam9pYzJSckxYUmxjM1FpTENKbGNYVmhiSE1pT2lKMGNuVmxJbjFkTENKaGRYUm9iM0pwZEhraU9pSm9kSFJ3Y3pvdkwzTnJjbUYwZEdWemRHRjBhVzl1TG1GNmRYSmxkMlZpYzJsMFpYTXVibVYwTHlKOVhTd2lkbVZ5YzJsdmJpSTZJakV1TUM0d0luMCJ9fX19.xfHLM_o4QG2UvyzfiylT-kC-xpVr8jM9MMM8nGjND1q_sVk7A7U0C6SAEyCqLw28-beLSnJ-Bus62DBqyiJTGJ99E-X7R_rwSEUxFOyCnMLQLd6X9ho2UVdm2PfEl3ZcN1mrisytAfh_ObOmVC3s4hx9uakWhvlDEJ0IC_Ka4X_CDT-kx6Wd-yL4atYYOuJxOWHqZfsNsj8ci5diVsTIV4en6qf1daw2Om2sXLHGZBnM0Cas0-SU5SKzDF6P-ayVDFvMy1DLkUCEv7-9fSmxbKV6IzyFYcu2v3fOLAry42sMdOkEnkanOFz2vWn93aKhbb7EEnJBunvZm8diLxPNpA"}, [ + 'content-type', + 'application/json; charset=utf-8', + 'x-content-type-options', + 'nosniff', + 'content-length', + '14058', + 'x-ms-request-id', + '1571b192-ec1a-11eb-a602-000d3a7a3d40', + 'x-ms-keyvault-region', + 'eastus2', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'x-ms-keyvault-network-info', + 'conn_type=Ipv4;addr=50.35.231.105;act_addr_fam=Ipv4;', + 'x-ms-server-latency', + '660', + 'cache-control', + 'no-cache', + 'x-frame-options', + 'SAMEORIGIN' +]); diff --git a/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_import_an_exportable_key_and_release_it.js b/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_import_an_exportable_key_and_release_it.js new file mode 100644 index 000000000000..bd70bef301fd --- /dev/null +++ b/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_can_import_an_exportable_key_and_release_it.js @@ -0,0 +1,214 @@ +let nock = require('nock'); + +module.exports.hash = "ac346665683eea22e076525f413e4281"; + +module.exports.testInfo = {"uniqueName":{"importreleasekey":"importreleasekey162708823529908267"},"newDate":{}} + +nock('https://skrattestation.azurewebsites.net:443', {"encodedQueryParams":true}) + .get('//generate-test-token') + .reply(200, {"token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiI5WHVNbklYNWs4TXpFaGRJY1RIazg0ZVJWYzFCUk9fRjFMOXhYVEN1d0lBUm82bVZCb2VBQ3NGeHNjMzhfNmY1TXVYamo4OXpvUUllRlhMeHJubzAxb1IxdWJ2NHJhNnF1dkdQNkc2NUZzVEVaZHBtOTVuZzJ4M01pc2RvRVZYel84T19iUGoxV0w3YkwyN2dUMm9QZVRfWExQUThXOWRhMmVsOU1oTVhsSGtDQXJVQnRjdjBQQWM2dWtTYUU3bjM1d2lJenk3Y3F2dUo1cl84dUM0ZlFDaXFYbVQtdVU3eks0U3FNaWt5TEM1SV9ReGs5TC1IQXNMV3oxY05wQklWS004cXk1ZFpRN2sybWxsM01GckpOTnJpR1NUMHhZSnRmaFRQLWttdnd0RXJmRHVxbE5jVTQzcHdRRWNuZUsyZEtUVlJkZlZ1cFpES1p1dzAwV0oxTncifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyMzQsImV4cCI6MTk0MjY2NDIzNH0.CMMwl-59I_aqZYPCM3pMN_jkXvi1rZjeKTzcJilpA_k_X2Sf1iOzrunxWlRZL6HTA0EF5ryQUd8tDmxD1bVWR6mVkFesD-843NrERU_cF6t-VJfo5M50qzVwymfHXObKaDzmIuoechLC9o2H2CxFYIKEiJldocrY2ptUEhDLf-AEcGCY1IFJAnQWoOdu8TCbTrgG3ual-5W5lGWtfjOV6572Eg_kAREiTvWnjRy51PpTOh9CfPN3x76IAaVtJ7aDEkY8e8ebX_phm2bo0bl4QSWg8U2Bylue_7HFFNMB90WxXRxex-PAf_RDxxJs4jsV1xODqLHY4iikWRY0nc7Y2A"}, [ + 'Content-Length', + '1305', + 'Content-Type', + 'application/json; charset=utf-8', + 'ETag', + 'W/"519-tEB3I/YpGyDvumYe2+0mecQ1+0o"', + 'X-Powered-By', + 'Express', + 'Set-Cookie', + 'ARRAffinity=31a267ed7b71ec86982412cc9dc4ad2f31ca2b8f51b692363aa765c405b03b84;Path=/;HttpOnly;Secure;Domain=skrattestation.azurewebsites.net', + 'Set-Cookie', + 'ARRAffinitySameSite=31a267ed7b71ec86982412cc9dc4ad2f31ca2b8f51b692363aa765c405b03b84;Path=/;HttpOnly;SameSite=None;Secure;Domain=skrattestation.azurewebsites.net', + 'Date', + 'Sat, 24 Jul 2021 00:57:14 GMT', + 'Connection', + 'close' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .put('/keys/importreleasekey162708823529908267') + .query(true) + .reply(401, "", [ + 'content-type', + 'application/json; charset=utf-8', + 'x-ms-server-latency', + '1', + 'x-content-type-options', + 'nosniff', + 'www-authenticate', + 'Bearer authorization="https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012", resource="https://managedhsm.azure.net"', + 'x-frame-options', + 'SAMEORIGIN', + 'content-length', + '0', + 'x-ms-request-id', + '161dcd10-ec1a-11eb-a602-000d3a7a3d40', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'cache-control', + 'no-cache' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/common/discovery/instance') + .query(true) + .reply(200, {"tenant_discovery_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/v2.0/.well-known/openid-configuration","api-version":"1.1","metadata":[{"preferred_network":"login.microsoftonline.com","preferred_cache":"login.windows.net","aliases":["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{"preferred_network":"login.partner.microsoftonline.cn","preferred_cache":"login.partner.microsoftonline.cn","aliases":["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{"preferred_network":"login.microsoftonline.de","preferred_cache":"login.microsoftonline.de","aliases":["login.microsoftonline.de"]},{"preferred_network":"login.microsoftonline.us","preferred_cache":"login.microsoftonline.us","aliases":["login.microsoftonline.us","login.usgovcloudapi.net"]},{"preferred_network":"login-us.microsoftonline.com","preferred_cache":"login-us.microsoftonline.com","aliases":["login-us.microsoftonline.com"]}]}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '5496fec5-db95-47d5-ad4c-9158332b7700', + 'x-ms-ests-server', + '2.1.11898.8 - WUS2 ProdSlices', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8; expires=Mon, 23-Aug-2021 00:57:15 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevruCl-cBoEg_T9xoeRgSk640f5es6uMob7clCef0AHVCiUbEfWScS1Eo-reNcPUgFl5cvo0pRQ9BwpwlsrNJNcyz0f_eIsOqQ7x9IvvZ1GM-JfBZTF_YYYwv4OxE31WqHbTvRLPg9sEi0451ShZwXQ2Aq9-rFx1G9mkZIT5rzU6SwgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:14 GMT', + 'Content-Length', + '980' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/12345678-1234-1234-1234-123456789012/v2.0/.well-known/openid-configuration') + .reply(200, {"token_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token","token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt","client_secret_basic"],"jwks_uri":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/discovery/v2.0/keys","response_modes_supported":["query","fragment","form_post"],"subject_types_supported":["pairwise"],"id_token_signing_alg_values_supported":["RS256"],"response_types_supported":["code","id_token","code id_token","id_token token"],"scopes_supported":["openid","profile","email","offline_access"],"issuer":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/v2.0","request_uri_parameter_supported":false,"userinfo_endpoint":"https://graph.microsoft.com/oidc/userinfo","authorization_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/authorize","device_authorization_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/devicecode","http_logout_supported":true,"frontchannel_logout_supported":true,"end_session_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/logout","claims_supported":["sub","iss","cloud_instance_name","cloud_instance_host_name","cloud_graph_host_name","msgraph_host","aud","exp","iat","auth_time","acr","nonce","preferred_username","name","tid","ver","at_hash","c_hash","email"],"kerberos_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/kerberos","tenant_region_scope":"WW","cloud_instance_name":"microsoftonline.com","cloud_graph_host_name":"graph.windows.net","msgraph_host":"graph.microsoft.com","rbac_url":"https://pas.windows.net"}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '5b7bea29-98d2-4a85-9f85-8edc05e43f00', + 'x-ms-ests-server', + '2.1.11898.8 - SCUS ProdSlices', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8; expires=Mon, 23-Aug-2021 00:57:15 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrNRYbo7OAzb4XyCIpqVtHCSCL0IegnuJu3WDuKpGDnlLGL1O7oaG9KllwhOxjXInVmLyU8g_ssvjFQEqJI-YpAT_BB6-vmURiwhs5Hf5Tmj-JcrusTDQ8ZGv5pnDvI6plGEKD3nIQdkdvO2zB-KVqBc8YFvOi628ot4gjUXF0i7QgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:14 GMT', + 'Content-Length', + '1753' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .post('/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token', "client_id=azure_client_id&scope=https%3A%2F%2Fsanitized%2F&grant_type=client_credentials&x-client-SKU=msal.js.node&x-client-VER=1.1.0&x-client-OS=linux&x-client-CPU=x64&x-ms-lib-capability=retry-after, h429&x-client-current-telemetry=2|771,0|,&x-client-last-telemetry=2|0|||0,0&client-request-id=d3614361-db2e-4f86-8c93-fc982ec8c25b&client_secret=azure_client_secret") + .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ + 'Cache-Control', + 'no-store, no-cache', + 'Pragma', + 'no-cache', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '184e0853-2a5b-4bda-9b60-5bbc8d056200', + 'x-ms-ests-server', + '2.1.11898.8 - NCUS ProdSlices', + 'x-ms-clitelem', + '1,0,0,,', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8e087aAQAAAGpcjdgOAAAA; expires=Mon, 23-Aug-2021 00:57:15 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:14 GMT', + 'Content-Length', + '1322' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .put('/keys/importreleasekey162708823529908267', {"key":{"kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"AKCRTQAjSsaDshtMFdW-2Ie9yVnC5Xr1Suc06PAHINd10nXkVSB-N4TO62ClCkZV3XKnqU0nHo7o95WaZpym53W_DiO62umRtFKdl4UotL2QUh0y3SZWeWuoK2u_x2aMj17rUFN0f9GZMZ0pqEQNCPRBLVJ_-TEe2nGCWSC0exxGsRqz6R1zFkB-icfzQPe4WjQELOUXQ7J9RxhAPTTHtDivYYG-BeTRHrmF04JT1_6b9T_C8bAC0i0teT-nmlBLarQtBJKATXBx1yegbPOoiTqlQrFQP4MrKWNxtnB9Tcbjcvj-Z9je0ckI_eRc4DvAhqcUh_p15Dqg4GeaoNIO_jU","e":"AQAB","d":"Ynx9JGaBSP4iUsf6ZJ6opantRNdcdmzaQrKbZg6ZQE8Ohi1FYabJWvaoPSE-CiJEsDzShXZHMhUHN4X7Bn8BXaGQhK3p9HXgiwQKmix7oAJTu4ElUIyd8UC3UWHSZr40el4PaQD-HYu_eMzCXus34MnRiNbh_BUWm6T-Eidhk9d3kNIyaSi9YNDQHW6tjWrEhhq63O7JU1j9ZonFChZxpKk20jdkQKQURVAdpOdL-5j4I70ZxFuU6wHZj8DS8oRQfwGOvZKbgYDb5jgf3UNL_7eACqq92XPVX56vm7iKbqeyjCqAIx5y3hrSRIJtZlWCwjYnYQGd4unxDLi8wmJWSQ","dp":"AMmhWb5yZcu6vJr8xJZ-t0_likxJRUMZAtEULaWZt2DgODj4y9JrZDJP6mvckzhQP0WXk2NuWbU2HR5pUeCN2wieG1B76VKoH76vfnaJDqT1NuJVBcP2SLHog3ffwZtMME5zjfygchG3kihqOSpwTQ9ETAqAJTkRC38fEhwAz_Cp","dq":"AKC9TAo9n2RDaggjdLXK8kiLrBVoaWFTpqXkzYXRhtsx4vWPAkxhfSnze05rVMl6HiXv7FnE0f0wYawzUJzoyuXBH0zS6D9BqCZPeF543AmWB27iPf38Q9Z8Rjr6oBgMSnGDV_mm8nDVQkeaDyE4cOZh-5UKvKShTKKQVwunmDNH","qi":"AJ_nrkLpK8BPzVeARkvSHQyKwMWZ-a8CD95qsKfn0dOZAvXY-2xhQYTEwbED-0bpTNEKbIpA-ZkaHygmnzJkNbbFAnb9pkkzU8ZQqDP3JNgMfVIroWx58Oth9nJza2j7i-MkPRCUPEq3Ao0J52z7WJIiLji8TTVYW_NaiM1oxzsH","p":"ANHerI1o3dLB_VLVmZZVss8VZSYN5SaeQ_0qhfOSgOFwj__waCFmy2EG7l6l6f_Z-Y0L7Mn_LNov68lyWSFa2EuQUeVj4UoFHc5Di8ZUGiSsTwFM-XMtNuv8HmGgDYLL5BIJD3eTz71LdgW-Ez38OZH34b7VeG8zfeUDb8Hi30zz","q":"AMPcZrZBqbc82DO8Q5zTT8ZXRGWrW36KktMllaIk1W2RHnRiQiW0jBWmcCgqUcQNHa1LwumjyNqwx28QBS37BTvG7ULGUoio6LrOeoiBGEMj-U19sX6m37plEhj5Mak7j3OPPY_T9rohjTW5aGGg9YSwq4jdz0RrmBX00ofYOjI3"},"attributes":{"exportable":true},"release_policy":{"data":"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJjb25kaXRpb24iOiJlcXVhbHMiLCJ2YWx1ZSI6InRydWUifV0sImF1dGhvcml0eSI6Imh0dHBzOi8vc2tyYXR0ZXN0YXRpb24uYXp1cmV3ZWJzaXRlcy5uZXQvIn1dLCJ2ZXJzaW9uIjoiMS4wIn0"}}) + .query(true) + .reply(200, {"attributes":{"created":1627088235,"enabled":true,"exportable":true,"recoverableDays":7,"recoveryLevel":"CustomizedRecoverable+Purgeable","updated":1627088235},"key":{"e":"AQAB","key_ops":["decrypt","encrypt","unwrapKey","sign","verify","wrapKey"],"kid":"https://azure_managedhsm.managedhsm.azure.net/keys/importreleasekey162708823529908267/661ff719f3694023841a1217bd224946","kty":"RSA-HSM","n":"oJFNACNKxoOyG0wV1b7Yh73JWcLlevVK5zTo8Acg13XSdeRVIH43hM7rYKUKRlXdcqepTScejuj3lZpmnKbndb8OI7ra6ZG0Up2XhSi0vZBSHTLdJlZ5a6gra7_HZoyPXutQU3R_0ZkxnSmoRA0I9EEtUn_5MR7acYJZILR7HEaxGrPpHXMWQH6Jx_NA97haNAQs5RdDsn1HGEA9NMe0OK9hgb4F5NEeuYXTglPX_pv1P8LxsALSLS15P6eaUEtqtC0EkoBNcHHXJ6Bs86iJOqVCsVA_gyspY3G2cH1NxuNy-P5n2N7RyQj95FzgO8CGpxSH-nXkOqDgZ5qg0g7-NQ"},"release_policy":{"contentType":"application/json; charset=utf-8","data":"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJlcXVhbHMiOiJ0cnVlIn1dLCJhdXRob3JpdHkiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyJ9XSwidmVyc2lvbiI6IjEuMC4wIn0"}}, [ + 'content-type', + 'application/json; charset=utf-8', + 'x-content-type-options', + 'nosniff', + 'content-length', + '997', + 'x-ms-request-id', + '1659c8ba-ec1a-11eb-a602-000d3a7a3d40', + 'x-ms-keyvault-region', + 'eastus2', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'x-ms-keyvault-network-info', + 'conn_type=Ipv4;addr=50.35.231.105;act_addr_fam=Ipv4;', + 'x-ms-server-latency', + '739', + 'cache-control', + 'no-cache', + 'x-frame-options', + 'SAMEORIGIN' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .post('/keys/importreleasekey162708823529908267/661ff719f3694023841a1217bd224946/release', {"target":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiI5WHVNbklYNWs4TXpFaGRJY1RIazg0ZVJWYzFCUk9fRjFMOXhYVEN1d0lBUm82bVZCb2VBQ3NGeHNjMzhfNmY1TXVYamo4OXpvUUllRlhMeHJubzAxb1IxdWJ2NHJhNnF1dkdQNkc2NUZzVEVaZHBtOTVuZzJ4M01pc2RvRVZYel84T19iUGoxV0w3YkwyN2dUMm9QZVRfWExQUThXOWRhMmVsOU1oTVhsSGtDQXJVQnRjdjBQQWM2dWtTYUU3bjM1d2lJenk3Y3F2dUo1cl84dUM0ZlFDaXFYbVQtdVU3eks0U3FNaWt5TEM1SV9ReGs5TC1IQXNMV3oxY05wQklWS004cXk1ZFpRN2sybWxsM01GckpOTnJpR1NUMHhZSnRmaFRQLWttdnd0RXJmRHVxbE5jVTQzcHdRRWNuZUsyZEtUVlJkZlZ1cFpES1p1dzAwV0oxTncifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyMzQsImV4cCI6MTk0MjY2NDIzNH0.CMMwl-59I_aqZYPCM3pMN_jkXvi1rZjeKTzcJilpA_k_X2Sf1iOzrunxWlRZL6HTA0EF5ryQUd8tDmxD1bVWR6mVkFesD-843NrERU_cF6t-VJfo5M50qzVwymfHXObKaDzmIuoechLC9o2H2CxFYIKEiJldocrY2ptUEhDLf-AEcGCY1IFJAnQWoOdu8TCbTrgG3ual-5W5lGWtfjOV6572Eg_kAREiTvWnjRy51PpTOh9CfPN3x76IAaVtJ7aDEkY8e8ebX_phm2bo0bl4QSWg8U2Bylue_7HFFNMB90WxXRxex-PAf_RDxxJs4jsV1xODqLHY4iikWRY0nc7Y2A","nonce":"nonce","enc":"RSA_AES_KEY_WRAP_256"}) + .query(true) + .reply(200, {"value":"eyJhbGciOiJSUzI1NiIsImtpZCI6IlU0NXdTcDZrT2tQZUQxX2M1WURSZlVHb0JseThxSDlHMTlaZnVGVkx5WWsiLCJ4NWMiOlsiTUlJSW1UQ0NCb0dnQXdJQkFnSVRNd0FXKzlEby9manlOampiYkFBQUFCYjcwREFOQmdrcWhraUc5dzBCQVF3RkFEQlpNUXN3Q1FZRFZRUUdFd0pWVXpFZU1Cd0dBMVVFQ2hNVlRXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVNU293S0FZRFZRUURFeUZOYVdOeWIzTnZablFnUVhwMWNtVWdWRXhUSUVsemMzVnBibWNnUTBFZ01EVXdIaGNOTWpFd056STBNREF6T0RNNFdoY05Nakl3TnpFNU1EQXpPRE00V2pCOU1Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DVjBFeEVEQU9CZ05WQkFjVEIxSmxaRzF2Ym1ReEhqQWNCZ05WQkFvVEZVMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiakV2TUMwR0ExVUVBd3dtS2k1dFlXeGxaMlZ6YTNKbGJqSm9jMjB1YldGdVlXZGxaR2h6YlM1aGVuVnlaUzV1WlhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURoSjZnSlljek5VbnBrZmgrNktXbXk5UnRXYm1RMXIxaEpoK2tnc3pCc2F0UW9zaEpWa1IzMWxFdkU4dUJtalA5TnNwSHY3SHJWVHRRcVFtcDVwNUw1UGRacys5ZVUwdHBWdGhWUGxqUE5iN1REaUZrWWlPV0JuVXFOaFQwQ1RGVHpRWWV1NUZOazV0QkhvbGloVWRwVVZWUjJXZkpQSWNIY3h6SFBIcjRMeEwza0liZFc5aXdEdlYwSlFnU2MvSmp6OWZXK092SWlKMUpNdXBsbndOc2VhTVo2U0hrdVN1enp4MnBYQWgwck9XUDZ6ZGJXUVpvZjBMN3VRK0VqTTFiQW1SMU5NbWN1V2tLeUkzaTJEblJraEpMRDlZdlcrcWkvMzBDbWVSRWQxczd1UkZkRGxsdCtOVFYxMit1OWZ2Z1ZlWHhGVHA4U3Z3dW1XWTFpVVhRZkFnTUJBQUdqZ2dRME1JSUVNRENDQVg0R0Npc0dBUVFCMW5rQ0JBSUVnZ0Z1QklJQmFnRm9BSFlBN2t1OXQzWE9ZTHJoUW1rZnErR2VacU1QZmwrd2N0aURBTVI3aVhxby9jc0FBQUY2MWZ4THFnQUFCQU1BUnpCRkFpQmNYYm9NSUk1OUdRTVZpdDJGMkkzTTF0RDhNMDJlSTFJVVRyRXkvbWlSY1FJaEFOY256QTdzUWJ3Q3lNQXdadUVxUDlLNGFGNDU2aGpESjVSOE9EamRhUkhDQUhZQVFjaktzZDhpUmtvUXhxRTZDVUtIWGs0eGl4c0Q2K3RMeDJqd2tHS1dCdllBQUFGNjFmeEwrZ0FBQkFNQVJ6QkZBaUVBalBoclZpZDYxMjh4cjV3UFI0bytCQ0FYbUpTTHY0MVhsZE9zaU9uYWVmQUNJQmp1Z242UUd5ZjA1RXU1L3lsNjVabmJvbFhodUZmT2NJRlNoTm1EZFFUSkFIWUFVYU93OWYwQmVaeFdiYmczZUk4TXBIck1HeWZMOTU2SVFwb04vdFNMQmVVQUFBRjYxZnhNSUFBQUJBTUFSekJGQWlFQW1wK2JXMXFrUWZkaWJQOEoreUh1SC92L0ExZk9MaGVQcVIwSnpJVVBhMjRDSUgzS2FZc3Z6RnNES3FsZm1YZ2E4UlhYWHM4T0d5WkhHY0U3dGx6TEJFSkFNQ2NHQ1NzR0FRUUJnamNWQ2dRYU1CZ3dDZ1lJS3dZQkJRVUhBd0l3Q2dZSUt3WUJCUVVIQXdFd1BBWUpLd1lCQkFHQ054VUhCQzh3TFFZbEt3WUJCQUdDTnhVSWg3M1hHNEhuNjBhQ2daMHVqdEFNaC9EYUhWMkNoT1ZwZ3ZPblBnSUJaQUlCSXpDQnJnWUlLd1lCQlFVSEFRRUVnYUV3Z1o0d2JRWUlLd1lCQlFVSE1BS0dZV2gwZEhBNkx5OTNkM2N1YldsamNtOXpiMlowTG1OdmJTOXdhMmx2Y0hNdlkyVnlkSE12VFdsamNtOXpiMlowSlRJd1FYcDFjbVVsTWpCVVRGTWxNakJKYzNOMWFXNW5KVEl3UTBFbE1qQXdOU1V5TUMwbE1qQjRjMmxuYmk1amNuUXdMUVlJS3dZQkJRVUhNQUdHSVdoMGRIQTZMeTl2Ym1WdlkzTndMbTFwWTNKdmMyOW1kQzVqYjIwdmIyTnpjREFkQmdOVkhRNEVGZ1FVZEJLWmN4NnRITWw4MVFqbkpqSGFkNjRqdEwwd0RnWURWUjBQQVFIL0JBUURBZ1N3TUZjR0ExVWRFUVJRTUU2Q0ppb3ViV0ZzWldkbGMydHlaVzR5YUhOdExtMWhibUZuWldSb2MyMHVZWHAxY21VdWJtVjBnaVJ0WVd4bFoyVnphM0psYmpKb2MyMHViV0Z1WVdkbFpHaHpiUzVoZW5WeVpTNXVaWFF3WkFZRFZSMGZCRjB3V3pCWm9GZWdWWVpUYUhSMGNEb3ZMM2QzZHk1dGFXTnliM052Wm5RdVkyOXRMM0JyYVc5d2N5OWpjbXd2VFdsamNtOXpiMlowSlRJd1FYcDFjbVVsTWpCVVRGTWxNakJKYzNOMWFXNW5KVEl3UTBFbE1qQXdOUzVqY213d1pnWURWUjBnQkY4d1hUQlJCZ3dyQmdFRUFZSTNUSU45QVFFd1FUQS9CZ2dyQmdFRkJRY0NBUll6YUhSMGNEb3ZMM2QzZHk1dGFXTnliM052Wm5RdVkyOXRMM0JyYVc5d2N5OUViMk56TDFKbGNHOXphWFJ2Y25rdWFIUnRNQWdHQm1lQkRBRUNBakFmQmdOVkhTTUVHREFXZ0JUSHNweC9IT080V3UvcGFCcW9YWlRCSmxKcWFEQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBZ1lJS3dZQkJRVUhBd0V3RFFZSktvWklodmNOQVFFTUJRQURnZ0lCQUtkcWp3TlEzd1NlbWpma3VmaHFPQXpZNUZzRmMvQ3NIenltOFhNTkRwTzNhUjFCRkM0VFlyQ0dQdmFBZ2FDcjZPUlpVYmpKVHliWWxzMDBVYjJwM2lyUlVOdXJMNlcrQlROZUczNFBWTFVHaFBLVG9TZ0p6Q2t0ZzNkY2dHL2ZHMmd6Zmp4SFl1UEFiN3pwRlFjY1c1d1pIeTg2eEhlRVdadkdsR014c21DSTNJbGpaVXg2bnBQWSs5ZGhqYmRrN0hmUTRFMTRZOFFXaXBsR1dUY04zVE1GY0RiRVpCdlY0SjZsblptWHJINlZMbkdBbi9Tc0ozbFZNbXdpNGNvQWJkM3VWaTZZQm9CZDVmY1lTV2JFYmRjcG1JOVdVNUhOMGtRUmFMYTdkVE1mK0hnSkp6QlFUWFNybWJ2aGVFWklkWnlLY3BNSWluQUZyZGJMRWphZEVORW90MzJ1T2Z1eVpXeXAvcGg1bWFoaC9HSkJCZ3NvRzJzL3o4YzRoMVFneC9KQ0JKS09VRWF3WXQ2UTZSL3Byaklnc2Q0RXZuWGhtbS93djJHeDFHa0NVQ2RpcW5aZ09CQ3RKYWpNUnBiczVQblYwajczTFROUHp4TmpyWjFrM2ZkL1Y4dzFIb1hYSDBZTHoxc25idzJPSlpEMzRJMk8zVVlrV3pPR1lzMUVWUWtXZWJtdlVjVjNOK291UUFXK0gxY0hmR01memt0Q0tSdkFUNHI0b3FIY0p6dVdSeVcvM2VNNEdCOUdzY01kTFBNdEJjVkplU29YTkRqWDh6cWw5RnlyUWROaWUyTS9YNEozc0ZTNG9hMGx5SmhsRU11d2dWbytSc01SQm8valFiZ3ZsSXZsWmdaem95TU9WNlB3c1E5b3lQNEl5ZjB2eVVLejkzS3RkNWxmIiwiTUlJRjh6Q0NCTnVnQXdJQkFnSVFEWHZ0NlgyQ0NaWjZVbU1iaTkwWXZUQU5CZ2txaGtpRzl3MEJBUXdGQURCaE1Rc3dDUVlEVlFRR0V3SlZVekVWTUJNR0ExVUVDaE1NUkdsbmFVTmxjblFnU1c1ak1Sa3dGd1lEVlFRTEV4QjNkM2N1WkdsbmFXTmxjblF1WTI5dE1TQXdIZ1lEVlFRREV4ZEVhV2RwUTJWeWRDQkhiRzlpWVd3Z1VtOXZkQ0JITWpBZUZ3MHlNREEzTWpreE1qTXdNREJhRncweU5EQTJNamN5TXpVNU5UbGFNRmt4Q3pBSkJnTlZCQVlUQWxWVE1SNHdIQVlEVlFRS0V4Vk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR4S2pBb0JnTlZCQU1USVUxcFkzSnZjMjltZENCQmVuVnlaU0JVVEZNZ1NYTnpkV2x1WnlCRFFTQXdOVENDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFLcGxEVG1ROWFmd1ZQUWVsRHV1K05reE5KMDg0Q05LbnJaMjFBQmV3RStVVTRHS0Rud3lnWmRLNmFnTlNNczVVb2NoVUVEeno5Q3BkVjV0ZFB6TDE0Ty9HZUUyZ081L2FVRlRVTUc5YzZuZXl4azV0cTFXZEtzUGtpdFB3czZWOE1XYTVkMUwveTRSRmhaSFVzZ3h4VXlTbFlsR3BOY0hoaHN5cjdFdkZlY1pHQTFNZnNpdEFXVnA2aGlXQU5rV0tJTmZSY2R0M1oyQTIzaG1NSDlNUlNHQmNjSGlQdXp3clZzU21Md3Z0M1dsUkRnT2JKa0U0MHRGWXZKNkdYQVFpYUdIQ0lXU1ZPYmdPM3pqNnhrZGJFRk1tSi96cjJXZXQ1S0VjVUR0VUJoQTRkVVVvYVBWejY5dTQ2VjU2VnNjeTNsWHUxWWxzazg0ajVsVVBMZHNBeHR1bHRQNE9QUW9PVHBuWThreFdrSDZrZ081Z1RLRTNIUnZvVklqVTR4SjBKUTc0Nnp5LzhHZFFBMzZTYU5pejRVM3UxMHpGWmcyUmt2MmRMMUx2NThFWEwwMnI1cTVCL25oVkgvTTFqb1R2cFJ2YWVFcEFKaGtJQTlOa3B2YkdFcFNkY0EwT3J0T09lR3Ryc2lPeU1CWWtqcEI1bncwY0pZMVFIT3Izbkl2SjJPblkrT0tKYkRTcmhGcVdzazgvMXE2WjFXTnZPTno3dGUxcEF0SGVyZFBpNXBDSGVpWENOcHYrZmFkd1AwazhjemFmMlZzMTluWXNnV241dUl5TFFMOEVlaGRCekNiT0tKeTlzbDg2UzRGcWU0SEd5QXRtcUdsYVdPc3EyQTZPL3BhTWkzQlNtV1REYmdQTENQQmJQdGUvYnN1QUVGNGFqa1BFRVMzR0hQOUFnTUJBQUdqZ2dHdE1JSUJxVEFkQmdOVkhRNEVGZ1FVeDdLY2Z4emp1RnJ2NldnYXFGMlV3U1pTYW1nd0h3WURWUjBqQkJnd0ZvQVVUaUpVSUJpVjV1TnU1Zy82K3JrUzdRWVhqemt3RGdZRFZSMFBBUUgvQkFRREFnR0dNQjBHQTFVZEpRUVdNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQU1IWUdDQ3NHQVFVRkJ3RUJCR293YURBa0JnZ3JCZ0VGQlFjd0FZWVlhSFIwY0RvdkwyOWpjM0F1WkdsbmFXTmxjblF1WTI5dE1FQUdDQ3NHQVFVRkJ6QUNoalJvZEhSd09pOHZZMkZqWlhKMGN5NWthV2RwWTJWeWRDNWpiMjB2UkdsbmFVTmxjblJIYkc5aVlXeFNiMjkwUnpJdVkzSjBNSHNHQTFVZEh3UjBNSEl3TjZBMW9ET0dNV2gwZEhBNkx5OWpjbXd6TG1ScFoybGpaWEowTG1OdmJTOUVhV2RwUTJWeWRFZHNiMkpoYkZKdmIzUkhNaTVqY213d042QTFvRE9HTVdoMGRIQTZMeTlqY213MExtUnBaMmxqWlhKMExtTnZiUzlFYVdkcFEyVnlkRWRzYjJKaGJGSnZiM1JITWk1amNtd3dIUVlEVlIwZ0JCWXdGREFJQmdabmdRd0JBZ0V3Q0FZR1o0RU1BUUlDTUJBR0NTc0dBUVFCZ2pjVkFRUURBZ0VBTUEwR0NTcUdTSWIzRFFFQkRBVUFBNElCQVFBZStHK0cyUkZkV3RZeExJS01SNUgvYVZORmpOUDdKZGV1K29aYUthSXU3VTNOaWR5a0ZyOTk0alN4TUJNVjc2OHVrSjUvaExTS3N1ai9TTGptQWZ3UkFaK3cwUkdxaS9rT3ZQWVVsQnIvc0tPd3IzdFZrZzljY1pCZWJuQlZHK0RMS1RwMk94MCtqWUJDUHhsYTVGTzI1MnFwazcvNnd0OFNaazNkaVNVMTJKbTdpZi9qamtoa0dCL2U4VWRmcktvTHl0RHZxVmVpd1BBNUZQenFLb1NxTjc1YnlManNJS0pFZE5pMDdTWTQ1aE4vUlVuc21Jb0FmOTNxbGFIUi9TSldWUmhyV3QzSm1lb0JKMlJESzQ5MnpGNlRHdTFtb2g0YUU2ZTAwWWt3VFBXcmV1d3ZhTEIyMjB2V210Z1pQcytEU0liMmQ5aFBCZENKZ3ZjaG8xYzciLCJNSUlEampDQ0FuYWdBd0lCQWdJUUF6cng1cWNScWFDN0tHU3hIUW42NVRBTkJna3Foa2lHOXcwQkFRc0ZBREJoTVFzd0NRWURWUVFHRXdKVlV6RVZNQk1HQTFVRUNoTU1SR2xuYVVObGNuUWdTVzVqTVJrd0Z3WURWUVFMRXhCM2QzY3VaR2xuYVdObGNuUXVZMjl0TVNBd0hnWURWUVFERXhkRWFXZHBRMlZ5ZENCSGJHOWlZV3dnVW05dmRDQkhNakFlRncweE16QTRNREV4TWpBd01EQmFGdzB6T0RBeE1UVXhNakF3TURCYU1HRXhDekFKQmdOVkJBWVRBbFZUTVJVd0V3WURWUVFLRXd4RWFXZHBRMlZ5ZENCSmJtTXhHVEFYQmdOVkJBc1RFSGQzZHk1a2FXZHBZMlZ5ZEM1amIyMHhJREFlQmdOVkJBTVRGMFJwWjJsRFpYSjBJRWRzYjJKaGJDQlNiMjkwSUVjeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdXpmTk5OeDdhOG15YUpDdFNuWC9Scm9oQ2dpTjlSbFV5ZnVJMi9PdThqcUprVHg2NXFzR0dtdlByQzNvWGdra1JMcGltbjdXbzZoKzRGUjFJQVdzVUxlY1l4cHNNTnphSHhteDF4N2UvZGZneTVTRE42N3NIME5PM1hzczByMHVwUy9rcWJpdE90U1pwTFlsNlp0ckFHQ1NZUDlQSVVrWTkyZVFxMkVHbkkveXV1bTA2Wkl5YTdYelYraGRHODJNSGF1VkJKVko4elV0bHVOSmJkMTM0L3RKUzdTc1ZRZXBqNVd6dENPN1RHMUY4UGFwc3BVd3RQMU1WWXduU2xjVWZJS2R6WE9TMHhaS0JneU1VTkdQSGdtK0Y2SG1JY3I5ZytVUXZJT2xDc1JuS1BaekZCUTlSbmJEaHhTSklUUk5ydzlGREtaSm9icTduTVd4TTRNcGhRSURBUUFCbzBJd1FEQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCaGpBZEJnTlZIUTRFRmdRVVRpSlVJQmlWNXVOdTVnLzYrcmtTN1FZWGp6a3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR0JuS0pSdkRraGo2ekhkNm1jWTFZbDlQTVdMU24vcHZ0c3JGOSt3WDNOM0tqSVRPWUZuUW9RajhrVm5OZXlJdi9pUHNHRU1OS1N1SUV5RXh0djROZUYyMmQrbVFydkhSQWlHZnpaMEpGcmFiQTBVV1RXOThrbmR0aC9Kc3cxSEtqMlpMN3RjdTdYVUlPR1pYMU5HRmR0b20vRHpNTlUrTWVLTmhKN2ppdHJhbGo0MUU2VmY4UGx3VUhCSFFSRlhHVTdBajY0R3hKVVRGeThiSlo5MThyR09tYUZ2RTdGQmNmNklLc2hQRUNCVjEvTVVSZVhnUlBUcWg1VXlrdzcrVTBiNkxKMy9peUs1UzlrSlJhVGVwTGlhV04wYmZWS2ZqbGxEaUlHa25pYlZiNjNkRGNZM2ZlMERraHZsZDE5MjdqeU54RjFXVzZMWlptNnpOVGZsTXJZPSJdLCJ4NXQjUzI1NiI6IlU0NXdTcDZrT2tQZUQxX2M1WURSZlVHb0JseThxSDlHMTlaZnVGVkx5WWsifQ.eyJyZXF1ZXN0Ijp7ImFwaS12ZXJzaW9uIjoiNy4zLXByZXZpZXciLCJlbmMiOiJSU0FfQUVTX0tFWV9XUkFQXzI1NiIsImtpZCI6Imh0dHBzOi8vbWFsZWdlc2tyZW4yaHNtLm1hbmFnZWRoc20uYXp1cmUubmV0L2tleXMvaW1wb3J0cmVsZWFzZWtleTE2MjcwODgyMzUyOTkwODI2Ny82NjFmZjcxOWYzNjk0MDIzODQxYTEyMTdiZDIyNDk0NiIsIm5vbmNlIjoibm9uY2UifSwicmVzcG9uc2UiOnsia2V5Ijp7ImF0dHJpYnV0ZXMiOnsiY3JlYXRlZCI6MTYyNzA4ODIzNSwiZW5hYmxlZCI6dHJ1ZSwiZXhwb3J0YWJsZSI6dHJ1ZSwicmVjb3ZlcmFibGVEYXlzIjo3LCJyZWNvdmVyeUxldmVsIjoiQ3VzdG9taXplZFJlY292ZXJhYmxlK1B1cmdlYWJsZSIsInVwZGF0ZWQiOjE2MjcwODgyMzV9LCJrZXkiOnsiZSI6IkFRQUIiLCJrZXlfaHNtIjoiZXlKamFYQm9aWEowWlhoMElqb2lTMkpYTjJseFYwazRia2M1T1Rsd1oybGtTR1ZvV2pKc2IxZ3plRU5TYUVodk4wVnRSSGRFU2sxUVlVbEJYMGc1YjJFNFRWOTVYMng0ZWxoMGJFcFRYekF6TjB0RWNtcHZTMTlCZFd0V09ERmxZakExVUZaeU5sUmliVTlLTUVaSlRIaDNNa0ZHVDBwNlYydzNOWE40UWpWNVEwVmFVMjVCV2s5VWJsbzNkMnRHWHpod2RVeDFNa2xJWVRsUlp6ZHNXRmxtVGpZNFZucHdhMG80TlhOTFpYQk1ibkJhU1RoMGNrbDZObkZCYWpFdGRHUkVMWEpYV1dwemVVWlNOV295VjJRNWMwTklUWEJJYURVMFZucDBMWFIxV2tSaFlYZGpTMHRJT0ZJeFdXZzJVRUpIUm5OT2VGOHlOSGs1TldOR2EwdzBlRE13WkZNMFVHSnlNelF3YVdOWlRHdHJXR1ZIWTB0dWFEVk1iMWxrWkZaM1pISkhWR1J2TWxGR1IyZEVUR2h6V2pkbVExUmFPREIzZWxOR1VIRnhVR2RPWHpsZlRGWTVhRE5qVWxGVVNVZEdlVWRYVG1wbE5tWjRiMVJZWW5OSFlVVldNRTVyUlZGUFozWTFUVWx0YWw5UGVtTk1UM2x2Ylc5U2VrcEhObVkxTFhwWFJGWnZTMnhvWmxWclJFOVBTVEJ5YnkwMWRtbFlXbWRKWHpBMVZYVnlhMDFLUVROdVYzRXhUbVkwVkhNeU1reEdUV0pJYm5ZeExYcDVaV1JUYVdwZk5XVlljamhOVEZWWk5sTTNjalZzUWpWM1gwUXhOSEl3VTFSRFFrWXRTamxuT0RKRk5ubG1VbFpMVTNNMGJsUmtiamR1VWpCU2EweEdhR042VEdsUlVVUlFiR3czU0dKdFkzQlNTbTlaYUZSTWJHaE5WR3QwVTBOQ1kxTm1PR1k0YjJ4bWJGWmhVemRvV0ZSTGRrUkRhbVZYVWtkb2NsZDFlbVZvYnpFM2EwSm1NVmxSTnpsb1MwTnVaMWgxZFRGSGFDMXNTRVJ1ZHpObGIxOXNWbTlvU1ZGcFpqaGlUWFpTUlU0d1RHVkpjVEJSV0hRMWRXSnViSG8xZEVoVGJVbHZUbVJSYW5ONWRtWnJZVkUzTjJ0MldEUTBiM05xUzNadFUwVkhja0pQV1VGRU5VdENZemxHVVhSR1ZVUnliME5vTW1KRkxWQTBVUzE1VVRCMlYyRlZkazkxTldKelYzaGFSRWx6TURKTk5YUkxlbk5VUTJneldtODFTa2xzU0dOSGFERnRUSEJNU2prd09XRTJNR1ZMWm1sWVdXSmpWMEpDVkMxdlJ6RnlkMEo0ZGpsVFZHeFpXV2hxU3pKSFZrTlVPWEJpVDFVNE5sUmZNR3MxWkVScU5EVnRjbk54VUhsSVMxVTVkMlYxV1UxM0xWRXRWM2RRVjJoV2IycGpWVEY0VmxOZlpVaFRkbUZMZGw5bmVEZFdYMUZ0WldkTWNUVkxiMmszVkZCdFNUTnVNM0JhWHpoVVNUaExNamRRYTNZek5HVkRVWHAwZUc5WGJ6QTFNSFJoT1ZOdGJYTTNablpGVlMxc1YyVnFabUZPU25WNlZXUlJOR0YxVVdKSFZYUnRZM2ROVkhKUlpEVlRVamxvYVVsM2IyMXFPSEl5UkdsYVlVdHJaVFpaTkc4MlIwTjBhMHRGUlRWTU9FTjFSVmw2Y2xOV1JXWndla1o2WW14bWRHeHRiREpSWVhwMmFISkpURzl6U2t4SmMwUklkbkJCV0hCcFZ6SmZWazlQYVZGTmRFeGZSV1l0Ym14VVZqQk9kVlJGT0RSMFZ5MXRNM2d5UlRBeFRFNVlUV05mYzJ0bVdXZ3lRM2xFZVZRM05XNVNWRXBQTFdGR2VGSXphamxQVUhOUWRUUldVV2hXWjJGa2QyMVliblp2UkZablZVRndka1pTZW1WaE4yUlpVRGd6UW5oSFFqWmZTRlYyZDFSblVUSmhUbUZVYVdaalRGbEhOVzlMYkZnNWNuaFFaaTF3U1VVelVsSldiakl4TFZoTWFuQk9SamxLWm1KcFpuZzBOV0oxUjBJMFNXaFdaRTVWWTNSWVgwRm9ia3B5ZDBKak5uQm5Na1J3VlRNeGRYaFNjM0V0T1ZRMWJubExUWFV0TFdsUWQyc3dNSFl0Ym1aWU1uZFdjbVpSZW1sRVNtTmxaamhvZURCUmEwRXlUVk5OVUY5YVdEZ3pUaTFqTmxob2NGRTBSMHhxVVVGZmFIQnlVV3B2YUdSSGVYZEtkM05PZFdsMGFWODJRMlJpUjNoellVaDNSV3B1YzJ4Q1NqZGhTWE15T0RselkweHlXbVp4V1ZoeVRVd3djMnA1T1hKcWJWcHRNR28xZW0xdldFbGxPVXRXZHpjelkwTkhlVXhEWVRSb1pIWmtkVkZFZVZJM1ZuTjNZMjgxZEZGMWRFTnZkelprUzA1VVgyaHhWMkpmY21OR1dpMW9UM2RZYkhGZmFucExkRWxpWHpsd2IybE5lRlJFUnpBM1NEVk9MVlJRVVRkcU5IWnBTVGRpY1Y5SE9GbDNhMFpFWlVSbllWZHpVMDlEVDFaRlZqbGpRamxDUmpWcVExbFFMVTk2WmtwbVNVSmxkblpxYjFaQ1RYZHFPRkZuV0ZSdVRtNHdkakJrTlV0VUxVRlNhVXRzVjFoa1NtWkNPWGRFU1VOQlUybGhVWEJzVTFac1FtWXhPRWRvUWpsWVNuWnRjVTVFYW5GWFMyZFRRV2RSTVRKcU0zVmFOV1pMZVhkSlQxbHpZVFJwVkVOZmFrcGpXbXA2V1ROQlNFUkZOVUZLUmxCRFYyOUhOR2RVVW1Ga1pUaFBUM2xOVFU1QlYyeHZTalpEZHpOcmFWTjZNMFExY0d3eWN6ZzVTazB5TVdsQmIxUnBWVmhMWmxKdlVtZHNOM0o1VldoR09WaFFZMmwzVEc5U2FGZHROekpSWWkweU5UUlFaRmR2TUVSdFJITm9TazlaZG05UE1UWkVRVmhOVlhjMVVrOWlaMjFzUjB0R1dqaE9ka0pzWTFCeFZWVjBiRzlGVjA5bk5XOUhjbW96ZDBwTFVtNXZjMVpDVldKNFNHbGxPREl6YjIxRVlYUkZYMDVYT0ROT2REUTRlRE5zZEhScFlXWkxUbVJVY0ZWdGIxRlNSVmRTYjA5clR6WnhNV0pDTjJKTVpqRTBPRTFVVldzMmFXVTVWMlJNYURCd04ySlZjbFZLUlRCRk5qTlRRbHBsTVRsUVpIQjRVMEZEWm1kb1owNWljM0J1UzI5Q2NsOTRPVXhSYms4dE0xVndZVlJZVWpKNmRVRkViVzVHVlVVeGVGazFZemRHZFhWTFpYaERjM0J6VjNCbGFuZzBlbmh3TjFOTlpFdzRhMWhHVUVnMU1GRkVlRk5DT0RZME9HTnJja05ETTBwdmJESkRPRXRqV1dkSk5WSlZiRmhmYjNWWFozVk9SR2xKZDA5QlRXZFBjazE2ZVV4YU1ITmtRa3BrT0NJc0ltaGxZV1JsY2lJNmV5SmhiR2NpT2lKa2FYSWlMQ0psYm1NaU9pSlNVMEZmUVVWVFgwdEZXVjlYVWtGUVh6STFOaUlzSW10cFpDSTZJbVpoYTJVdGNtVnNaV0Z6WlMxclpYa2lmU3dpYzJOb1pXMWhYM1psY25OcGIyNGlPaUl4TGpBaWZRIiwia2V5X29wcyI6WyJ3cmFwS2V5IiwiZGVjcnlwdCIsImVuY3J5cHQiLCJ1bndyYXBLZXkiLCJzaWduIiwidmVyaWZ5Il0sImtpZCI6Imh0dHBzOi8vbWFsZWdlc2tyZW4yaHNtLm1hbmFnZWRoc20uYXp1cmUubmV0L2tleXMvaW1wb3J0cmVsZWFzZWtleTE2MjcwODgyMzUyOTkwODI2Ny82NjFmZjcxOWYzNjk0MDIzODQxYTEyMTdiZDIyNDk0NiIsImt0eSI6IlJTQSIsIm4iOiJvSkZOQUNOS3hvT3lHMHdWMWI3WWg3M0pXY0xsZXZWSzV6VG84QWNnMTNYU2RlUlZJSDQzaE03cllLVUtSbFhkY3FlcFRTY2VqdWozbFpwbW5LYm5kYjhPSTdyYTZaRzBVcDJYaFNpMHZaQlNIVExkSmxaNWE2Z3JhN19IWm95UFh1dFFVM1JfMFpreG5TbW9SQTBJOUVFdFVuXzVNUjdhY1lKWklMUjdIRWF4R3JQcEhYTVdRSDZKeF9OQTk3aGFOQVFzNVJkRHNuMUhHRUE5Tk1lME9LOWhnYjRGNU5FZXVZWFRnbFBYX3B2MVA4THhzQUxTTFMxNVA2ZWFVRXRxdEMwRWtvQk5jSEhYSjZCczg2aUpPcVZDc1ZBX2d5c3BZM0cyY0gxTnh1TnktUDVuMk43UnlRajk1RnpnTzhDR3B4U0gtblhrT3FEZ1o1cWcwZzctTlEifSwicmVsZWFzZV9wb2xpY3kiOnsiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IiwiZGF0YSI6ImV5SmhibmxQWmlJNlczc2lZVzU1VDJZaU9sdDdJbU5zWVdsdElqb2ljMlJyTFhSbGMzUWlMQ0psY1hWaGJITWlPaUowY25WbEluMWRMQ0poZFhSb2IzSnBkSGtpT2lKb2RIUndjem92TDNOcmNtRjBkR1Z6ZEdGMGFXOXVMbUY2ZFhKbGQyVmljMmwwWlhNdWJtVjBMeUo5WFN3aWRtVnljMmx2YmlJNklqRXVNQzR3SW4wIn19fX0.SuNlGMrbPZLVT3WsTvmu7lM4RAqDRv0zvzYgmzOAUK3v9OEt1_Vte_vU7CvuWZNwMIfm-iWrXr5yeNpHHKxRPD4XyI9-_oRiKQ3l8ag48qdEAP4BxE_ZiU6zfWrTkktrZuvFte554sVURRmKeuyaiZ5_It637F2r99vQ-XkAy0V-9D2obFXsfys1mwZqjlFm9rP0mq8HbxZPK1vvwZq4NrchyH7NYwy8FulDNl9mfmC5kYQPgn8CqcpzB9GUULvMAnAGdP6Fzq9_AURLAitwT0NPY0KZOYBTPZpjOnlSDMroEJjRjMdW-yRy8nUttRVeLT-nl239FooOOE1Y0K-RVw"}, [ + 'content-type', + 'application/json; charset=utf-8', + 'x-content-type-options', + 'nosniff', + 'content-length', + '14193', + 'x-ms-request-id', + '16d724a4-ec1a-11eb-a602-000d3a7a3d40', + 'x-ms-keyvault-region', + 'eastus2', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'x-ms-keyvault-network-info', + 'conn_type=Ipv4;addr=50.35.231.105;act_addr_fam=Ipv4;', + 'x-ms-server-latency', + '726', + 'cache-control', + 'no-cache', + 'x-frame-options', + 'SAMEORIGIN' +]); diff --git a/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_a_key_has_a_release_policy_but_is_not_exportable.js b/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_a_key_has_a_release_policy_but_is_not_exportable.js new file mode 100644 index 000000000000..ac1009cfc529 --- /dev/null +++ b/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_a_key_has_a_release_policy_but_is_not_exportable.js @@ -0,0 +1,182 @@ +let nock = require('nock'); + +module.exports.hash = "d73e305d84d2f50c6a0d4d43e039ab0b"; + +module.exports.testInfo = {"uniqueName":{"policynonexportable":"policynonexportable162708823885709938"},"newDate":{}} + +nock('https://skrattestation.azurewebsites.net:443', {"encodedQueryParams":true}) + .get('//generate-test-token') + .reply(200, {"token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiI0b0I0ZEQyTE5LZFdEYm5FQkUxbGZGUDEyanJnVnQzcXZWUGVsdVV6Y0g4bkdsVW9jTkVzTGlZaGlQSHVINU45SmhfM2pQWEFGSndQMVhlZlFMdm0yUk10Y3FpNEpsTUJCUllJci0yZ1pVeDhTcHNMcTdySGU3UGpoSnhmOEFVTE1INW9TYTdIR3JRQ19LX3Z6TW9TTHVqaFZ3akNVVnp3c2sxRmlrY1F4WHRsaGhsQlN1Y0JlZ182eW82bGdnUWozQmFzQ2hOVXFWbXJBOHNVWnpxUk9tcmo1S1VTbUpxaHpYazJ2YmRZZkd0eGRPRGdQNVdJVUd6U2lUdnBRZ2d5eVNDY2U0cjZRU3dZanBhWHVzR1I0S2R1ZzFTYlpXS3JjZThFaUp6MUFZcXBicUY4R3JteXNEajlQak41c2hfRWswQnBfdjlCX081M1U5VW5peGo2QlEifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyMzgsImV4cCI6MTk0MjY2NDIzOH0.YMujHYZPoKJf_877PWVkT-A0-FwpNOBUHKeknX8Y3jNNz6HgXMxpFTJenzosqB5qOroyUodUYeK1J-52x5CEVvaFARSr15bvmsRzk2npy3Qra87-A23MaxPk5nQ5vCwW4eWV4YHxAOHhqta1uNYDprN6bOXcLddjPHI_0hpUF7CUjQ4Y6oNC8owMUekvcS9WOwwPBcJuqKe5vmnpiS9madprtd3aFZGpLVCm7QrHCbHDVENQwFbiAo2UvfqD1cuySruqUuicFfk9NZDWxSnlIkXGWDPUGC2Y6XHLcs3HRayNsF49uzYer0XP2Lzyi1QMBsDd55RjrWBabFgWt34IXA"}, [ + 'Content-Length', + '1305', + 'Content-Type', + 'application/json; charset=utf-8', + 'ETag', + 'W/"519-JSzO0F4DEg5wk9/tzVRWHJyhpLA"', + 'X-Powered-By', + 'Express', + 'Set-Cookie', + 'ARRAffinity=31a267ed7b71ec86982412cc9dc4ad2f31ca2b8f51b692363aa765c405b03b84;Path=/;HttpOnly;Secure;Domain=skrattestation.azurewebsites.net', + 'Set-Cookie', + 'ARRAffinitySameSite=31a267ed7b71ec86982412cc9dc4ad2f31ca2b8f51b692363aa765c405b03b84;Path=/;HttpOnly;SameSite=None;Secure;Domain=skrattestation.azurewebsites.net', + 'Date', + 'Sat, 24 Jul 2021 00:57:18 GMT', + 'Connection', + 'close' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .post('/keys/policynonexportable162708823885709938/create') + .query(true) + .reply(401, "", [ + 'content-type', + 'application/json; charset=utf-8', + 'x-ms-server-latency', + '0', + 'x-content-type-options', + 'nosniff', + 'www-authenticate', + 'Bearer authorization="https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012", resource="https://managedhsm.azure.net"', + 'x-frame-options', + 'SAMEORIGIN', + 'content-length', + '0', + 'x-ms-request-id', + '183e0060-ec1a-11eb-a602-000d3a7a3d40', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'cache-control', + 'no-cache' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/common/discovery/instance') + .query(true) + .reply(200, {"tenant_discovery_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/v2.0/.well-known/openid-configuration","api-version":"1.1","metadata":[{"preferred_network":"login.microsoftonline.com","preferred_cache":"login.windows.net","aliases":["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{"preferred_network":"login.partner.microsoftonline.cn","preferred_cache":"login.partner.microsoftonline.cn","aliases":["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{"preferred_network":"login.microsoftonline.de","preferred_cache":"login.microsoftonline.de","aliases":["login.microsoftonline.de"]},{"preferred_network":"login.microsoftonline.us","preferred_cache":"login.microsoftonline.us","aliases":["login.microsoftonline.us","login.usgovcloudapi.net"]},{"preferred_network":"login-us.microsoftonline.com","preferred_cache":"login-us.microsoftonline.com","aliases":["login-us.microsoftonline.com"]}]}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + 'ae0f224b-b115-4018-af2d-39da31b5e100', + 'x-ms-ests-server', + '2.1.11898.8 - EUS ProdSlices', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8e087aAgAAAGpcjdgOAAAA; expires=Mon, 23-Aug-2021 00:57:18 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrSOT0qoG3RTqUjTS7A_j-95O9sZ3L7TMZSzdl0ei6ad4YzwXkW2cNyng0nRtxK8uXOv4lH3tgtqzGO64OkAdnkK2slABaO33rJ3OiuUP-GSEHYhMNW-EXmHb53zVYothkXVJzy6HhCdIOY1pfwkbSL0a58axBosBkPRmDq3kU3dQgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:18 GMT', + 'Content-Length', + '980' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/12345678-1234-1234-1234-123456789012/v2.0/.well-known/openid-configuration') + .reply(200, {"token_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token","token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt","client_secret_basic"],"jwks_uri":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/discovery/v2.0/keys","response_modes_supported":["query","fragment","form_post"],"subject_types_supported":["pairwise"],"id_token_signing_alg_values_supported":["RS256"],"response_types_supported":["code","id_token","code id_token","id_token token"],"scopes_supported":["openid","profile","email","offline_access"],"issuer":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/v2.0","request_uri_parameter_supported":false,"userinfo_endpoint":"https://graph.microsoft.com/oidc/userinfo","authorization_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/authorize","device_authorization_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/devicecode","http_logout_supported":true,"frontchannel_logout_supported":true,"end_session_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/logout","claims_supported":["sub","iss","cloud_instance_name","cloud_instance_host_name","cloud_graph_host_name","msgraph_host","aud","exp","iat","auth_time","acr","nonce","preferred_username","name","tid","ver","at_hash","c_hash","email"],"kerberos_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/kerberos","tenant_region_scope":"WW","cloud_instance_name":"microsoftonline.com","cloud_graph_host_name":"graph.windows.net","msgraph_host":"graph.microsoft.com","rbac_url":"https://pas.windows.net"}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + 'efa22bde-62ef-4529-a05a-8e0a69c16100', + 'x-ms-ests-server', + '2.1.11898.8 - WUS2 ProdSlices', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8e087aAgAAAGpcjdgOAAAA; expires=Mon, 23-Aug-2021 00:57:18 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrXgRLS9_1B9Y4ulsJOiuKhpSDHL_yRiTvfbFRzOrDA3AEJFqRjSnjaHoz0-iEWtnNW9WzmqpZMSh4XkgE6SQxhbLqO2XqExjxOIk9vREje69JihR8MMGefEJAuLLJKMJUKE_8fZF4BNoWZYXptOWF7EEqdYTaTQ-1oghudjCjwJQgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:18 GMT', + 'Content-Length', + '1753' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .post('/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token', "client_id=azure_client_id&scope=https%3A%2F%2Fsanitized%2F&grant_type=client_credentials&x-client-SKU=msal.js.node&x-client-VER=1.1.0&x-client-OS=linux&x-client-CPU=x64&x-ms-lib-capability=retry-after, h429&x-client-current-telemetry=2|771,0|,&x-client-last-telemetry=2|0|||0,0&client-request-id=87f52576-b9a1-42d5-a3b8-404b5a7d1c06&client_secret=azure_client_secret") + .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ + 'Cache-Control', + 'no-store, no-cache', + 'Pragma', + 'no-cache', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '10241810-b089-41a3-acab-e474e9c64900', + 'x-ms-ests-server', + '2.1.11898.8 - WUS2 ProdSlices', + 'x-ms-clitelem', + '1,0,0,,', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8e087aAwAAAGpcjdgOAAAA; expires=Mon, 23-Aug-2021 00:57:18 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:18 GMT', + 'Content-Length', + '1322' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .post('/keys/policynonexportable162708823885709938/create', {"kty":"RSA","attributes":{},"release_policy":{"data":"eyJhbnlPZiI6W3siYW55T2YiOlt7ImNsYWltIjoic2RrLXRlc3QiLCJjb25kaXRpb24iOiJlcXVhbHMiLCJ2YWx1ZSI6InRydWUifV0sImF1dGhvcml0eSI6Imh0dHBzOi8vc2tyYXR0ZXN0YXRpb24uYXp1cmV3ZWJzaXRlcy5uZXQvIn1dLCJ2ZXJzaW9uIjoiMS4wIn0"}}) + .query(true) + .reply(400, {"error":{"code":"BadParameter","message":"Non-exportable keys must not have release policy (Activity ID: 1884a3c6-ec1a-11eb-a602-000d3a7a3d40)"}}, [ + 'content-type', + 'application/json; charset=utf-8', + 'x-ms-server-latency', + '16', + 'cache-control', + 'no-cache', + 'x-content-type-options', + 'nosniff', + 'content-length', + '146', + 'x-ms-request-id', + '1884a3c6-ec1a-11eb-a602-000d3a7a3d40', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'x-frame-options', + 'SAMEORIGIN' +]); diff --git a/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_key_is_exportable_without_a_release_policy.js b/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_key_is_exportable_without_a_release_policy.js new file mode 100644 index 000000000000..9cc568ba8783 --- /dev/null +++ b/sdk/keyvault/keyvault-keys/recordings/node/keys_client__create_read_update_and_delete_operations_for_managed_hsm_releasekey/recording_errors_when_key_is_exportable_without_a_release_policy.js @@ -0,0 +1,182 @@ +let nock = require('nock'); + +module.exports.hash = "ed0144555258e44db57c40caad94ff21"; + +module.exports.testInfo = {"uniqueName":{"exportablenopolicy":"exportablenopolicy162708823795401483"},"newDate":{}} + +nock('https://skrattestation.azurewebsites.net:443', {"encodedQueryParams":true}) + .get('//generate-test-token') + .reply(200, {"token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImpfRUZtUTVVQm9lNHJMNUltNmw1cU1rQXN0QXluaE5JQUJ6dFZLQ0RMV1UiLCJqa3UiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0L2tleXMifQ.eyJpc3MiOiJodHRwczovL3NrcmF0dGVzdGF0aW9uLmF6dXJld2Vic2l0ZXMubmV0LyIsInNkay10ZXN0Ijp0cnVlLCJ4LW1zLWluaXR0aW1lIjp7fSwieC1tcy1ydW50aW1lIjp7ImtleXMiOlt7Imt0eSI6IlJTQSIsImtpZCI6ImZha2UtcmVsZWFzZS1rZXkiLCJ1c2UiOiJlbmMiLCJlIjoiQVFBQiIsIm4iOiIybk1uWEZDZk1OeTMtdTA5ZWlHWndNT1FPUWxoamVIby00LWxKV1p1elB4Mm5xQ2ZGbkI3S0VJQ3Z4MDRfTlI3NzRkTzAtSWUwU2ktNzNUUVhBQlJHa0U4NlpuUEVXMHhaVDBHQmNVREhjbmxtWi1HSzhobVNnMkh4dHM5YkJfelNCSUFSdUQ1Sm9Lb0N6RHliWUpucy1DMG5KQnJDNFdQN0lJd0Fhby1KSVVpWTZpcXZyMnpqT01HbmtHcFA2Z0VsbDFqRlBZSTAyZXF6eERfeVlGYld2bzRfbW5uMUs1YzYyWkNjRDRRa051ZFlfNVJhUDVnd3IzZHM2bUxYRlQyRWVKeUZCdnM3M05paTliOWZnNEI3Ym5MZ3V1QWZpdEtlQTdSZUFXNVFaT1VlM2wzUHZNVU96V3g4a3JEYS1MbGlzTE9ncEtja2JsM2lHMnhLcXJIVHcifV19LCJtYWEtZWhkIjoic2RrLXRlc3QiLCJpYXQiOjE2MjcwODgyMzcsImV4cCI6MTk0MjY2NDIzN30.qfZg0c9Ooo92FnKW9QPW3OCbP5JmjodCAZbXhiEU_AsM3lpjEnSIsiiejjxk8gQ-fEicg9MurpCcI1pQaQIjz3WRFVKmnnNDqlWZ-qAgp7LqhaD9ulNgjOS8qAXEFcdYoYl_KQbetqhV0tQ5_udtqJ7YK-UmFS0hMYoxAkZUWvFOnn4gDO8bmZvcmTq2Vopsl91DwvKibDvEuDHzbg_J31a0QDEexpsMWkBK-Yai3YZcJQCRhf3XHK5crsq3sqiwih8mGTnp--3kYuwzlC-9IMsgzxebmlmZR2A4FzMrLT9G43FbfDcutXBXWTDjZkUSw7euhrwYQMBsoX2is3oSuQ"}, [ + 'Content-Length', + '1305', + 'Content-Type', + 'application/json; charset=utf-8', + 'ETag', + 'W/"519-E9X4sMvSJPFxew6BJcIh+Akxv18"', + 'X-Powered-By', + 'Express', + 'Set-Cookie', + 'ARRAffinity=31a267ed7b71ec86982412cc9dc4ad2f31ca2b8f51b692363aa765c405b03b84;Path=/;HttpOnly;Secure;Domain=skrattestation.azurewebsites.net', + 'Set-Cookie', + 'ARRAffinitySameSite=31a267ed7b71ec86982412cc9dc4ad2f31ca2b8f51b692363aa765c405b03b84;Path=/;HttpOnly;SameSite=None;Secure;Domain=skrattestation.azurewebsites.net', + 'Date', + 'Sat, 24 Jul 2021 00:57:17 GMT', + 'Connection', + 'close' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .post('/keys/exportablenopolicy162708823795401483/create') + .query(true) + .reply(401, "", [ + 'content-type', + 'application/json; charset=utf-8', + 'x-ms-server-latency', + '1', + 'x-content-type-options', + 'nosniff', + 'www-authenticate', + 'Bearer authorization="https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012", resource="https://managedhsm.azure.net"', + 'x-frame-options', + 'SAMEORIGIN', + 'content-length', + '0', + 'x-ms-request-id', + '17b3b324-ec1a-11eb-a602-000d3a7a3d40', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'cache-control', + 'no-cache' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/common/discovery/instance') + .query(true) + .reply(200, {"tenant_discovery_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/v2.0/.well-known/openid-configuration","api-version":"1.1","metadata":[{"preferred_network":"login.microsoftonline.com","preferred_cache":"login.windows.net","aliases":["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{"preferred_network":"login.partner.microsoftonline.cn","preferred_cache":"login.partner.microsoftonline.cn","aliases":["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{"preferred_network":"login.microsoftonline.de","preferred_cache":"login.microsoftonline.de","aliases":["login.microsoftonline.de"]},{"preferred_network":"login.microsoftonline.us","preferred_cache":"login.microsoftonline.us","aliases":["login.microsoftonline.us","login.usgovcloudapi.net"]},{"preferred_network":"login-us.microsoftonline.com","preferred_cache":"login-us.microsoftonline.com","aliases":["login-us.microsoftonline.com"]}]}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '34c4bfc5-0d82-4369-9b7a-71dc1e1a7b00', + 'x-ms-ests-server', + '2.1.11898.8 - EUS ProdSlices', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8e087aAQAAAGpcjdgOAAAA; expires=Mon, 23-Aug-2021 00:57:17 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7Wevrp59T2mOZSXvVABVJJS1QxxFqJAh2zofIi4RtedCGS2RCflMZF85ZgLdmZx7Csp5YAR65q9QW6K6QPWMFwuaYtQb8JgHMyV6wx0uLgFfZMYAo9MxiQZhTY5MsPoIfZ3SYKAovwRVYFKBXtRDNgCJL65_rWIS7r4EcEro8TcjuZS0gAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:17 GMT', + 'Content-Length', + '980' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/12345678-1234-1234-1234-123456789012/v2.0/.well-known/openid-configuration') + .reply(200, {"token_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token","token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt","client_secret_basic"],"jwks_uri":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/discovery/v2.0/keys","response_modes_supported":["query","fragment","form_post"],"subject_types_supported":["pairwise"],"id_token_signing_alg_values_supported":["RS256"],"response_types_supported":["code","id_token","code id_token","id_token token"],"scopes_supported":["openid","profile","email","offline_access"],"issuer":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/v2.0","request_uri_parameter_supported":false,"userinfo_endpoint":"https://graph.microsoft.com/oidc/userinfo","authorization_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/authorize","device_authorization_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/devicecode","http_logout_supported":true,"frontchannel_logout_supported":true,"end_session_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/v2.0/logout","claims_supported":["sub","iss","cloud_instance_name","cloud_instance_host_name","cloud_graph_host_name","msgraph_host","aud","exp","iat","auth_time","acr","nonce","preferred_username","name","tid","ver","at_hash","c_hash","email"],"kerberos_endpoint":"https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/kerberos","tenant_region_scope":"WW","cloud_instance_name":"microsoftonline.com","cloud_graph_host_name":"graph.windows.net","msgraph_host":"graph.microsoft.com","rbac_url":"https://pas.windows.net"}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '269cb539-8d59-41a0-aee9-a53c0ee53a00', + 'x-ms-ests-server', + '2.1.11898.8 - NCUS ProdSlices', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8e087aAQAAAGpcjdgOAAAA; expires=Mon, 23-Aug-2021 00:57:17 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrahwY2MGwYNU1Y7PRj9p1yA-zPWUrilPBzmO894qMgEjv9pDmsPRvB05-G8y7y8V0ShaXoJqGH9Q7Mbm4OWumPsCpULqTv2riZYWbT_D38eMXlqT1PQJoh5KsQLbaqLF5NOSKBhtqtFg-mSgYYNKde3RessUC9lUHPVRHngfXSbIgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:17 GMT', + 'Content-Length', + '1753' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .post('/12345678-1234-1234-1234-123456789012/oauth2/v2.0/token', "client_id=azure_client_id&scope=https%3A%2F%2Fsanitized%2F&grant_type=client_credentials&x-client-SKU=msal.js.node&x-client-VER=1.1.0&x-client-OS=linux&x-client-CPU=x64&x-ms-lib-capability=retry-after, h429&x-client-current-telemetry=2|771,0|,&x-client-last-telemetry=2|0|||0,0&client-request-id=c49396c4-5214-429f-907b-030d14b54a58&client_secret=azure_client_secret") + .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ + 'Cache-Control', + 'no-store, no-cache', + 'Pragma', + 'no-cache', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + 'a14db1f5-3c3a-45e3-aad7-1a3936994e00', + 'x-ms-ests-server', + '2.1.11898.8 - SCUS ProdSlices', + 'x-ms-clitelem', + '1,0,0,,', + 'Set-Cookie', + 'fpc=AmyfsY-X8WhCqRyH2U6Lug8e087aAgAAAGpcjdgOAAAA; expires=Mon, 23-Aug-2021 00:57:17 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Sat, 24 Jul 2021 00:57:17 GMT', + 'Content-Length', + '1322' +]); + +nock('https://azure_managedhsm.managedhsm.azure.net:443', {"encodedQueryParams":true}) + .post('/keys/exportablenopolicy162708823795401483/create', {"kty":"RSA","attributes":{"exportable":true}}) + .query(true) + .reply(400, {"error":{"code":"BadParameter","message":"Exportable keys must have release policy (Activity ID: 17f05b08-ec1a-11eb-a602-000d3a7a3d40)"}}, [ + 'content-type', + 'application/json; charset=utf-8', + 'x-ms-server-latency', + '17', + 'cache-control', + 'no-cache', + 'x-content-type-options', + 'nosniff', + 'content-length', + '138', + 'x-ms-request-id', + '17f05b08-ec1a-11eb-a602-000d3a7a3d40', + 'strict-transport-security', + 'max-age=31536000; includeSubDomains', + 'content-security-policy', + "default-src 'self'", + 'x-frame-options', + 'SAMEORIGIN' +]); diff --git a/sdk/keyvault/keyvault-keys/review/keyvault-keys.api.md b/sdk/keyvault/keyvault-keys/review/keyvault-keys.api.md index f322e31a62b6..d8ca971622a0 100644 --- a/sdk/keyvault/keyvault-keys/review/keyvault-keys.api.md +++ b/sdk/keyvault/keyvault-keys/review/keyvault-keys.api.md @@ -69,10 +69,12 @@ export interface CreateKeyOptions extends coreHttp.OperationOptions { curve?: KeyCurveName; enabled?: boolean; readonly expiresOn?: Date; + exportable?: boolean; hsm?: boolean; keyOps?: KeyOperation[]; keySize?: number; notBefore?: Date; + releasePolicy?: KeyReleasePolicy; tags?: { [propertyName: string]: string; }; @@ -183,8 +185,10 @@ export interface GetRandomBytesOptions extends coreHttp.OperationOptions { export interface ImportKeyOptions extends coreHttp.OperationOptions { enabled?: boolean; expiresOn?: Date; + exportable?: boolean; hardwareProtected?: boolean; notBefore?: Date; + releasePolicy?: KeyReleasePolicy; tags?: { [propertyName: string]: string; }; @@ -228,6 +232,7 @@ export class KeyClient { listPropertiesOfKeys(options?: ListPropertiesOfKeysOptions): PagedAsyncIterableIterator; listPropertiesOfKeyVersions(name: string, options?: ListPropertiesOfKeyVersionsOptions): PagedAsyncIterableIterator; purgeDeletedKey(name: string, options?: PurgeDeletedKeyOptions): Promise; + releaseKey(name: string, target: string, options?: ReleaseKeyOptions): Promise; restoreKeyBackup(backup: Uint8Array, options?: RestoreKeyBackupOptions): Promise; updateKeyProperties(name: string, keyVersion: string, options?: UpdateKeyPropertiesOptions): Promise; readonly vaultUrl: string; @@ -241,6 +246,9 @@ export interface KeyClientOptions extends coreHttp.PipelineOptions { // @public export type KeyCurveName = string; +// @public +export type KeyExportEncryptionAlgorithm = string; + // @public export type KeyOperation = string; @@ -255,12 +263,14 @@ export interface KeyProperties { readonly createdOn?: Date; enabled?: boolean; expiresOn?: Date; + exportable?: boolean; id?: string; readonly managed?: boolean; name: string; notBefore?: Date; recoverableDays?: number; readonly recoveryLevel?: DeletionRecoveryLevel; + releasePolicy?: KeyReleasePolicy; tags?: { [propertyName: string]: string; }; @@ -269,6 +279,12 @@ export interface KeyProperties { version?: string; } +// @public +export interface KeyReleasePolicy { + contentType?: string; + data?: Uint8Array; +} + // @public export type KeyType = string; @@ -399,6 +415,18 @@ export { PollOperationState } export interface PurgeDeletedKeyOptions extends coreHttp.OperationOptions { } +// @public +export interface ReleaseKeyOptions extends coreHttp.OperationOptions { + algorithm?: KeyExportEncryptionAlgorithm; + nonce?: string; + version?: string; +} + +// @public +export interface ReleaseKeyResult { + value: string; +} + // @public export interface RestoreKeyBackupOptions extends coreHttp.OperationOptions { } diff --git a/sdk/keyvault/keyvault-keys/src/index.ts b/sdk/keyvault/keyvault-keys/src/index.ts index 1253b8f828a6..a70ab6040410 100644 --- a/sdk/keyvault/keyvault-keys/src/index.ts +++ b/sdk/keyvault/keyvault-keys/src/index.ts @@ -60,7 +60,11 @@ import { CryptographyClientOptions, LATEST_API_VERSION, CreateOctKeyOptions, - GetRandomBytesOptions + GetRandomBytesOptions, + ReleaseKeyOptions, + ReleaseKeyResult, + KeyReleasePolicy, + KeyExportEncryptionAlgorithm } from "./keysModels"; import { CryptographyClient } from "./cryptographyClient"; @@ -178,7 +182,11 @@ export { VerifyResult, WrapKeyOptions, WrapResult, - logger + logger, + ReleaseKeyOptions, + ReleaseKeyResult, + KeyReleasePolicy, + KeyExportEncryptionAlgorithm }; const withTrace = createTraceFunction("Azure.KeyVault.Keys.KeyClient"); @@ -284,13 +292,14 @@ export class KeyClient { let unflattenedOptions = {}; if (options) { - const { enabled, notBefore, expiresOn: expires, ...remainingOptions } = options; + const { enabled, notBefore, expiresOn: expires, exportable, ...remainingOptions } = options; unflattenedOptions = { ...remainingOptions, keyAttributes: { enabled, notBefore, - expires + expires, + exportable } }; } @@ -385,6 +394,7 @@ export class KeyClient { const { enabled, notBefore, + exportable, expiresOn: expires, hardwareProtected: hsm, ...remainingOptions @@ -395,7 +405,8 @@ export class KeyClient { enabled, notBefore, expires, - hsm + hsm, + exportable } }; } @@ -670,6 +681,42 @@ export class KeyClient { }); } + /** + * Releases a key from a managed HSM. + * + * The release key operation is applicable to all key types. The operation requires the key to be marked exportable and the keys/release permission. + * + * Example usage: + * ```ts + * let client = new KeyClient(vaultUrl, credentials); + * let result = await client.releaseKey("myKey", target) + * ``` + * + * @param name - The name of the key. + * @param options - The optional parameters. + */ + public releaseKey( + name: string, + target: string, + options: ReleaseKeyOptions = {} + ): Promise { + return withTrace("releaseKey", options, async (updatedOptions) => { + const { nonce, algorithm, ...rest } = updatedOptions; + const result = await this.client.release( + this.vaultUrl, + name, + options?.version || "", + target, + { + enc: algorithm, + nonce, + ...rest + } + ); + + return { value: result.value! }; + }); + } /** * @internal * @hidden diff --git a/sdk/keyvault/keyvault-keys/src/keysModels.ts b/sdk/keyvault/keyvault-keys/src/keysModels.ts index bb74f9fe2f60..cfb36c1b38f1 100644 --- a/sdk/keyvault/keyvault-keys/src/keysModels.ts +++ b/sdk/keyvault/keyvault-keys/src/keysModels.ts @@ -212,6 +212,16 @@ export interface KeyProperties { * the server.** */ readonly managed?: boolean; + + /** + * Indicates whether the private key can be exported. + */ + exportable?: boolean; + + /** + * A {@link KeyReleasePolicy} object specifying the rules under which the key can be exported. + */ + releasePolicy?: KeyReleasePolicy; } /** @@ -264,6 +274,21 @@ export interface DeletedKey { }; } +/** + * The policy rules under which a key can be exported. + */ +export interface KeyReleasePolicy { + /** + * Content type and version of key release policy. + * + * Defaults to "application/json; charset=utf-8" if omitted. + */ + contentType?: string; + + /** Blob encoding the policy rules under which the key can be released. */ + data?: Uint8Array; +} + /** * An interface representing the optional parameters that can be * passed to {@link createKey} @@ -303,6 +328,16 @@ export interface CreateKeyOptions extends coreHttp.OperationOptions { * Whether to import as a hardware key (HSM) or software key. */ hsm?: boolean; + + /** + * Indicates whether the private key can be exported. + */ + exportable?: boolean; + + /** + * A {@link KeyReleasePolicy} object specifying the rules under which the key can be exported. + */ + releasePolicy?: KeyReleasePolicy; } /** @@ -378,6 +413,16 @@ export interface ImportKeyOptions extends coreHttp.OperationOptions { * Expiry date in UTC. */ expiresOn?: Date; + + /** + * Indicates whether the private key can be exported. + */ + exportable?: boolean; + + /** + * A {@link KeyReleasePolicy} object specifying the rules under which the key can be exported. + */ + releasePolicy?: KeyReleasePolicy; } /** @@ -480,6 +525,30 @@ export interface CryptographyOptions extends coreHttp.OperationOptions {} */ export interface GetRandomBytesOptions extends coreHttp.OperationOptions {} +/** + * Options for {@link KeyClient.releaseKey} + */ +export interface ReleaseKeyOptions extends coreHttp.OperationOptions { + /** A client provided nonce for freshness. */ + nonce?: string; + + /** The {@link KeyExportEncryptionAlgorithm} to for protecting the exported key material. */ + algorithm?: KeyExportEncryptionAlgorithm; + + /** + * The version of the key to release. Defaults to the latest version of the key if omitted. + */ + version?: string; +} + +/** + * Result of the {@link KeyClient.releaseKey} operation. + */ +export interface ReleaseKeyResult { + /** A signed token containing the released key. */ + value: string; +} + /** Known values of {@link KeyOperation} that the service accepts. */ export enum KnownKeyOperations { /** Key operation - encrypt */ @@ -497,3 +566,23 @@ export enum KnownKeyOperations { /** Key operation - encrypt */ Import = "import" } + +/** Known values of {@link KeyExportEncryptionAlgorithm} that the service accepts. */ +export enum KnownKeyExportEncryptionAlgorithm { + CkmRsaAesKeyWrap = "CKM_RSA_AES_KEY_WRAP", + RsaAesKeyWrap256 = "RSA_AES_KEY_WRAP_256", + RsaAesKeyWrap384 = "RSA_AES_KEY_WRAP_384" +} + +/* eslint-disable tsdoc/syntax */ +/** + * Defines values for KeyEncryptionAlgorithm. + * {@link KnownKeyExportEncryptionAlgorithm} can be used interchangeably with KeyEncryptionAlgorithm, + * this enum contains the known values that the service supports. + * ### Known values supported by the service + * **CKM_RSA_AES_KEY_WRAP** \ + * **RSA_AES_KEY_WRAP_256** \ + * **RSA_AES_KEY_WRAP_384** + */ +export type KeyExportEncryptionAlgorithm = string; +/* eslint-enable tsdoc/syntax */ diff --git a/sdk/keyvault/keyvault-keys/src/transformations.ts b/sdk/keyvault/keyvault-keys/src/transformations.ts index a2df11591c5c..105580ccaf0c 100644 --- a/sdk/keyvault/keyvault-keys/src/transformations.ts +++ b/sdk/keyvault/keyvault-keys/src/transformations.ts @@ -42,6 +42,8 @@ export function getKeyFromKeyBundle( updatedOn: attributes.updated, recoverableDays: attributes.recoverableDays, recoveryLevel: attributes.recoveryLevel, + exportable: attributes.exportable, + releasePolicy: keyBundle.releasePolicy, vaultUrl: parsedId.vaultUrl, version: parsedId.version, diff --git a/sdk/keyvault/keyvault-keys/test/internal/transformations.spec.ts b/sdk/keyvault/keyvault-keys/test/internal/transformations.spec.ts index 190a77907c0f..030e1500c6d4 100644 --- a/sdk/keyvault/keyvault-keys/test/internal/transformations.spec.ts +++ b/sdk/keyvault/keyvault-keys/test/internal/transformations.spec.ts @@ -9,8 +9,13 @@ import { getKeyFromKeyBundle, getKeyPropertiesFromKeyItem } from "../../src/transformations"; +import { stringToUint8Array } from "../utils/crypto"; describe("Transformations", () => { + const releasePolicy = { + contentType: "content type", + data: stringToUint8Array("release policy") + }; it("KeyBundle to KeyVaultKey", () => { const date = new Date(); const bundle: KeyBundle = { @@ -21,6 +26,7 @@ describe("Transformations", () => { keyOps: ["encrypt", "decrypt"] }, attributes: { + exportable: true, recoverableDays: 1, recoveryLevel: "Recoverable", enabled: true, @@ -29,6 +35,7 @@ describe("Transformations", () => { created: date, updated: date }, + releasePolicy, tags: { tag_name: "tag_value" }, @@ -59,6 +66,8 @@ describe("Transformations", () => { tags: { tag_name: "tag_value" }, + exportable: true, + releasePolicy, createdOn: date, updatedOn: date, recoveryLevel: "Recoverable", @@ -87,13 +96,15 @@ describe("Transformations", () => { notBefore: date, expires: date, created: date, - updated: date + updated: date, + exportable: false }, tags: { tag_name: "tag_value" }, managed: false, recoveryId: "recovery-id", + releasePolicy, scheduledPurgeDate: date, deletedDate: date }; @@ -122,6 +133,8 @@ describe("Transformations", () => { tags: { tag_name: "tag_value" }, + releasePolicy, + exportable: false, createdOn: date, updatedOn: date, recoveryLevel: "Recoverable", diff --git a/sdk/keyvault/keyvault-keys/test/public/import.spec.ts b/sdk/keyvault/keyvault-keys/test/public/import.spec.ts index 76db0e963233..0a06a07c8d77 100644 --- a/sdk/keyvault/keyvault-keys/test/public/import.spec.ts +++ b/sdk/keyvault/keyvault-keys/test/public/import.spec.ts @@ -4,12 +4,12 @@ import * as assert from "assert"; import { Context } from "mocha"; import { env, Recorder } from "@azure/test-utils-recorder"; -import { isNode } from "@azure/core-http"; -import { KeyClient, JsonWebKey } from "../../src"; +import { KeyClient } from "../../src"; import { authenticate } from "../utils/testAuthentication"; import TestClient from "../utils/testClient"; import { getServiceVersion } from "../utils/utils.common"; +import { createRsaKey } from "../utils/crypto"; describe("Keys client - import keys", () => { const prefix = `import${env.CERTIFICATE_NAME || "KeyName"}`; @@ -33,43 +33,8 @@ describe("Keys client - import keys", () => { // The tests follow it("can import a key", async function(this: Context) { + const jsonWebKey = createRsaKey(); const keyName = testClient.formatName(`${prefix}-${this!.test!.title}-${suffix}`); - function toBytes(hex: string): Uint8Array { - if (hex.length % 2) { - hex = `0${hex}`; - } - if (isNode) { - return Buffer.from(hex, "hex"); - } else { - return new Uint8Array(hex.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))); - } - } - const jsonWebKey: JsonWebKey = { - kty: "RSA", - keyOps: ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"], - n: toBytes( - "00a0914d00234ac683b21b4c15d5bed887bdc959c2e57af54ae734e8f00720d775d275e455207e3784ceeb60a50a4655dd72a7a94d271e8ee8f7959a669ca6e775bf0e23badae991b4529d978528b4bd90521d32dd2656796ba82b6bbfc7668c8f5eeb5053747fd199319d29a8440d08f4412d527ff9311eda71825920b47b1c46b11ab3e91d7316407e89c7f340f7b85a34042ce51743b27d4718403d34c7b438af6181be05e4d11eb985d38253d7fe9bf53fc2f1b002d22d2d793fa79a504b6ab42d0492804d7071d727a06cf3a8893aa542b1503f832b296371b6707d4dc6e372f8fe67d8ded1c908fde45ce03bc086a71487fa75e43aa0e0679aa0d20efe35" - ), - e: toBytes("10001"), - d: toBytes( - "627c7d24668148fe2252c7fa649ea8a5a9ed44d75c766cda42b29b660e99404f0e862d4561a6c95af6a83d213e0a2244b03cd28576473215073785fb067f015da19084ade9f475e08b040a9a2c7ba00253bb8125508c9df140b75161d266be347a5e0f6900fe1d8bbf78ccc25eeb37e0c9d188d6e1fc15169ba4fe12276193d77790d2326928bd60d0d01d6ead8d6ac4861abadceec95358fd6689c50a1671a4a936d2376440a41445501da4e74bfb98f823bd19c45b94eb01d98fc0d2f284507f018ebd929b8180dbe6381fdd434bffb7800aaabdd973d55f9eaf9bb88a6ea7b28c2a80231e72de1ad244826d665582c2362761019de2e9f10cb8bcc2625649" - ), - p: toBytes( - "00d1deac8d68ddd2c1fd52d5999655b2cf1565260de5269e43fd2a85f39280e1708ffff0682166cb6106ee5ea5e9ffd9f98d0becc9ff2cda2febc97259215ad84b9051e563e14a051dce438bc6541a24ac4f014cf9732d36ebfc1e61a00d82cbe412090f7793cfbd4b7605be133dfc3991f7e1bed5786f337de5036fc1e2df4cf3" - ), - q: toBytes( - "00c3dc66b641a9b73cd833bc439cd34fc6574465ab5b7e8a92d32595a224d56d911e74624225b48c15a670282a51c40d1dad4bc2e9a3c8dab0c76f10052dfb053bc6ed42c65288a8e8bace7a8881184323f94d7db17ea6dfba651218f931a93b8f738f3d8fd3f6ba218d35b96861a0f584b0ab88ddcf446b9815f4d287d83a3237" - ), - dp: toBytes( - "00c9a159be7265cbbabc9afcc4967eb74fe58a4c4945431902d1142da599b760e03838f8cbd26b64324fea6bdc9338503f459793636e59b5361d1e6951e08ddb089e1b507be952a81fbeaf7e76890ea4f536e25505c3f648b1e88377dfc19b4c304e738dfca07211b792286a392a704d0f444c0a802539110b7f1f121c00cff0a9" - ), - dq: toBytes( - "00a0bd4c0a3d9f64436a082374b5caf2488bac1568696153a6a5e4cd85d186db31e2f58f024c617d29f37b4e6b54c97a1e25efec59c4d1fd3061ac33509ce8cae5c11f4cd2e83f41a8264f785e78dc0996076ee23dfdfc43d67c463afaa0180c4a718357f9a6f270d542479a0f213870e661fb950abca4a14ca290570ba7983347" - ), - qi: toBytes( - "009fe7ae42e92bc04fcd5780464bd21d0c8ac0c599f9af020fde6ab0a7e7d1d39902f5d8fb6c614184c4c1b103fb46e94cd10a6c8a40f9991a1f28269f326435b6c50276fda6493353c650a833f724d80c7d522ba16c79f0eb61f672736b68fb8be3243d10943c4ab7028d09e76cfb5892222e38bc4d35585bf35a88cd68c73b07" - ) - }; const key = await client.importKey(keyName, jsonWebKey); assert.equal(key.key!.e!.toString(), jsonWebKey.e!.toString()); }); diff --git a/sdk/keyvault/keyvault-keys/test/public/keyClient.hsm.spec.ts b/sdk/keyvault/keyvault-keys/test/public/keyClient.hsm.spec.ts index 561fcba34407..e187e0ec4b15 100644 --- a/sdk/keyvault/keyvault-keys/test/public/keyClient.hsm.spec.ts +++ b/sdk/keyvault/keyvault-keys/test/public/keyClient.hsm.spec.ts @@ -4,13 +4,14 @@ import { assert } from "chai"; import { Context } from "mocha"; import { env, Recorder } from "@azure/test-utils-recorder"; - import { KeyClient } from "../../src"; import { authenticate } from "../utils/testAuthentication"; import TestClient from "../utils/testClient"; -import { CreateOctKeyOptions } from "../../src/keysModels"; +import { CreateOctKeyOptions, KnownKeyExportEncryptionAlgorithm } from "../../src/keysModels"; import { getServiceVersion, onVersions } from "../utils/utils.common"; import { supportsTracing } from "../../../keyvault-common/test/utils/supportsTracing"; +import { createRsaKey, stringToUint8Array, uint8ArrayToString } from "../utils/crypto"; +import { DefaultHttpClient, WebResource } from "@azure/core-http"; onVersions({ minVer: "7.2" }).describe( "Keys client - create, read, update and delete operations for managed HSM", @@ -71,5 +72,90 @@ onVersions({ minVer: "7.2" }).describe( ); }); }); + + onVersions({ minVer: "7.3-preview" }).describe("releaseKey", () => { + let attestation: string; + let encodedReleasePolicy: Uint8Array; + + beforeEach(async () => { + const attestationUri = env.AZURE_KEYVAULT_ATTESTATION_URI; + const releasePolicy = { + anyOf: [ + { + anyOf: [ + { + claim: "sdk-test", + condition: "equals", + value: "true" + } + ], + authority: attestationUri + } + ], + version: "1.0" + }; + encodedReleasePolicy = stringToUint8Array(JSON.stringify(releasePolicy)); + const client = new DefaultHttpClient(); + const response = await client.sendRequest( + new WebResource(`${attestationUri}/generate-test-token`) + ); + attestation = JSON.parse(response.bodyAsText!).token; + }); + + it("can create an exportable key and release it", async () => { + const keyName = recorder.getUniqueName("exportkey"); + const createdKey = await hsmClient.createKey(keyName, "RSA", { + exportable: true, + releasePolicy: { data: encodedReleasePolicy }, + keyOps: ["encrypt", "decrypt"] + }); + + assert.exists(createdKey.properties.releasePolicy?.data); + assert.isNotEmpty( + JSON.parse(uint8ArrayToString(createdKey.properties.releasePolicy!.data!)) + ); + assert.isTrue(createdKey.properties.exportable); + const releaseResult = await hsmClient.releaseKey(keyName, attestation); + + assert.exists(releaseResult.value); + }); + + it("can import an exportable key and release it", async () => { + const keyName = recorder.getUniqueName("importreleasekey"); + + const importedKey = await hsmClient.importKey(keyName, createRsaKey(), { + exportable: true, + releasePolicy: { data: encodedReleasePolicy } + }); + + assert.exists(importedKey.properties.releasePolicy?.data); + assert.isNotEmpty( + JSON.parse(uint8ArrayToString(importedKey.properties.releasePolicy!.data!)) + ); + const releaseResult = await hsmClient.releaseKey(keyName, attestation, { + version: importedKey.properties.version, + nonce: "nonce", + algorithm: KnownKeyExportEncryptionAlgorithm.RsaAesKeyWrap256 + }); + + assert.exists(releaseResult.value); + }); + + it("errors when key is exportable without a release policy", async () => { + const keyName = recorder.getUniqueName("exportablenopolicy"); + await assert.isRejected( + hsmClient.createRsaKey(keyName, { exportable: true }), + /exportable/i + ); + }); + + it("errors when a key has a release policy but is not exportable", async () => { + const keyName = recorder.getUniqueName("policynonexportable"); + await assert.isRejected( + hsmClient.createRsaKey(keyName, { releasePolicy: { data: encodedReleasePolicy } }), + /exportable/i + ); + }); + }); } ); diff --git a/sdk/keyvault/keyvault-keys/test/utils/crypto.ts b/sdk/keyvault/keyvault-keys/test/utils/crypto.ts index 0a0ccf655e0d..86e81563f338 100644 --- a/sdk/keyvault/keyvault-keys/test/utils/crypto.ts +++ b/sdk/keyvault/keyvault-keys/test/utils/crypto.ts @@ -2,6 +2,7 @@ // Licensed under the MIT license. import { isNode } from "@azure/core-http"; +import { JsonWebKey } from "../../src/keysModels"; export function stringToUint8Array(str: string): Uint8Array { if (isNode) { @@ -28,3 +29,43 @@ export function getKey(size: number): Uint8Array { const result = new Uint8Array(size); return result.map((_val, i) => i); } + +function toBytes(hex: string): Uint8Array { + if (hex.length % 2) { + hex = `0${hex}`; + } + if (isNode) { + return Buffer.from(hex, "hex"); + } else { + return new Uint8Array(hex.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))); + } +} + +export function createRsaKey(): JsonWebKey { + return { + kty: "RSA", + keyOps: ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"], + n: toBytes( + "00a0914d00234ac683b21b4c15d5bed887bdc959c2e57af54ae734e8f00720d775d275e455207e3784ceeb60a50a4655dd72a7a94d271e8ee8f7959a669ca6e775bf0e23badae991b4529d978528b4bd90521d32dd2656796ba82b6bbfc7668c8f5eeb5053747fd199319d29a8440d08f4412d527ff9311eda71825920b47b1c46b11ab3e91d7316407e89c7f340f7b85a34042ce51743b27d4718403d34c7b438af6181be05e4d11eb985d38253d7fe9bf53fc2f1b002d22d2d793fa79a504b6ab42d0492804d7071d727a06cf3a8893aa542b1503f832b296371b6707d4dc6e372f8fe67d8ded1c908fde45ce03bc086a71487fa75e43aa0e0679aa0d20efe35" + ), + e: toBytes("10001"), + d: toBytes( + "627c7d24668148fe2252c7fa649ea8a5a9ed44d75c766cda42b29b660e99404f0e862d4561a6c95af6a83d213e0a2244b03cd28576473215073785fb067f015da19084ade9f475e08b040a9a2c7ba00253bb8125508c9df140b75161d266be347a5e0f6900fe1d8bbf78ccc25eeb37e0c9d188d6e1fc15169ba4fe12276193d77790d2326928bd60d0d01d6ead8d6ac4861abadceec95358fd6689c50a1671a4a936d2376440a41445501da4e74bfb98f823bd19c45b94eb01d98fc0d2f284507f018ebd929b8180dbe6381fdd434bffb7800aaabdd973d55f9eaf9bb88a6ea7b28c2a80231e72de1ad244826d665582c2362761019de2e9f10cb8bcc2625649" + ), + p: toBytes( + "00d1deac8d68ddd2c1fd52d5999655b2cf1565260de5269e43fd2a85f39280e1708ffff0682166cb6106ee5ea5e9ffd9f98d0becc9ff2cda2febc97259215ad84b9051e563e14a051dce438bc6541a24ac4f014cf9732d36ebfc1e61a00d82cbe412090f7793cfbd4b7605be133dfc3991f7e1bed5786f337de5036fc1e2df4cf3" + ), + q: toBytes( + "00c3dc66b641a9b73cd833bc439cd34fc6574465ab5b7e8a92d32595a224d56d911e74624225b48c15a670282a51c40d1dad4bc2e9a3c8dab0c76f10052dfb053bc6ed42c65288a8e8bace7a8881184323f94d7db17ea6dfba651218f931a93b8f738f3d8fd3f6ba218d35b96861a0f584b0ab88ddcf446b9815f4d287d83a3237" + ), + dp: toBytes( + "00c9a159be7265cbbabc9afcc4967eb74fe58a4c4945431902d1142da599b760e03838f8cbd26b64324fea6bdc9338503f459793636e59b5361d1e6951e08ddb089e1b507be952a81fbeaf7e76890ea4f536e25505c3f648b1e88377dfc19b4c304e738dfca07211b792286a392a704d0f444c0a802539110b7f1f121c00cff0a9" + ), + dq: toBytes( + "00a0bd4c0a3d9f64436a082374b5caf2488bac1568696153a6a5e4cd85d186db31e2f58f024c617d29f37b4e6b54c97a1e25efec59c4d1fd3061ac33509ce8cae5c11f4cd2e83f41a8264f785e78dc0996076ee23dfdfc43d67c463afaa0180c4a718357f9a6f270d542479a0f213870e661fb950abca4a14ca290570ba7983347" + ), + qi: toBytes( + "009fe7ae42e92bc04fcd5780464bd21d0c8ac0c599f9af020fde6ab0a7e7d1d39902f5d8fb6c614184c4c1b103fb46e94cd10a6c8a40f9991a1f28269f326435b6c50276fda6493353c650a833f724d80c7d522ba16c79f0eb61f672736b68fb8be3243d10943c4ab7028d09e76cfb5892222e38bc4d35585bf35a88cd68c73b07" + ) + }; +} diff --git a/sdk/keyvault/keyvault-keys/test/utils/testAuthentication.ts b/sdk/keyvault/keyvault-keys/test/utils/testAuthentication.ts index 4e09d03f5670..67cacc702a41 100644 --- a/sdk/keyvault/keyvault-keys/test/utils/testAuthentication.ts +++ b/sdk/keyvault/keyvault-keys/test/utils/testAuthentication.ts @@ -17,7 +17,8 @@ export async function authenticate(that: Context, version: string): Promise AZURE_TENANT_ID: "12345678-1234-1234-1234-123456789012", KEYVAULT_NAME: "keyvault_name", KEYVAULT_URI: "https://keyvault_name.vault.azure.net/", - AZURE_MANAGEDHSM_URI: "https://azure_managedhsm.managedhsm.azure.net/" + AZURE_MANAGEDHSM_URI: "https://azure_managedhsm.managedhsm.azure.net/", + AZURE_KEYVAULT_ATTESTATION_URI: "https://skrattestation.azurewebsites.net/" }, customizationsOnRecordings: [ (recording: any): any => diff --git a/sdk/keyvault/test-resources.json b/sdk/keyvault/test-resources.json index f366f446f965..77350ef41126 100644 --- a/sdk/keyvault/test-resources.json +++ b/sdk/keyvault/test-resources.json @@ -65,6 +65,13 @@ "metadata": { "description": "The base time to add 2 hours to for SAS token expiration. The default is the current time." } + }, + "attestationUri": { + "type": "string", + "defaultValue": "https://skrattestation.azurewebsites.net/", + "metadata": { + "description": "Test attestation service for Secure Key Release." + } } }, "variables": { @@ -178,7 +185,8 @@ "tenantId": "[parameters('tenantId')]", "initialAdminObjectIds": ["[parameters('testApplicationOid')]"], "enablePurgeProtection": false, - "enableSoftDelete": "[parameters('enableSoftDelete')]" + "enableSoftDelete": true, + "softDeleteRetentionInDays": 7 } }, { @@ -264,6 +272,11 @@ "BLOB_CONTAINER_NAME": { "type": "string", "value": "[variables('blobContainerName')]" + }, + "AZURE_KEYVAULT_ATTESTATION_URI": { + "type": "string", + "condition": "[parameters('enableHsm')]", + "value": "[parameters('attestationUri')]" } } }