From b103ddc008f99e0342df3446f20d3769cc6b844c Mon Sep 17 00:00:00 2001 From: Leo Romanovsky Date: Tue, 27 Oct 2026 03:13:33 +0000 Subject: [PATCH 1/5] FFLSDK-267: Add opt-in response signing v3 for Flags Verify full certificate chains and bind assignment admission to the current request and lifecycle. Regenerate the public API while preserving default-off behavior. Ref: FFLSDK-267 --- detekt_custom_safe_calls_third_party.yml | 27 + detekt_custom_unsafe_calls.yml | 14 + features/dd-sdk-android-flags/README.md | 41 + features/dd-sdk-android-flags/api/apiSurface | 5 + .../api/dd-sdk-android-flags.api | 10 + .../com/datadog/android/flags/FlagsClient.kt | 64 +- .../android/flags/FlagsConfiguration.kt | 25 +- .../android/flags/ResponseSigningMode.kt | 19 + .../android/flags/internal/FlagsFeature.kt | 16 + .../internal/evaluation/EvaluationsManager.kt | 86 +- .../net/PrecomputedAssignmentsDownloader.kt | 86 +- .../net/PrecomputedAssignmentsReader.kt | 11 + .../internal/repository/FlagsRepository.kt | 11 + .../repository/SigningFlagsRepository.kt | 119 + .../signing/ResponseSigningContext.kt | 34 + .../internal/signing/ResponseSigningState.kt | 114 + .../signing/ResponseSigningVerifier.kt | 285 ++ .../flags/internal/signing/SigningCrypto.kt | 86 + .../flags/internal/signing/SigningDer.kt | 101 + .../signing/ResponseSigningClientTest.kt | 582 +++ .../ResponseSigningConstructionTest.kt | 85 + .../signing/ResponseSigningVerifierTest.kt | 81 + .../resources/response-signing-v3/README.md | 13 + .../resources/response-signing-v3/corpus.json | 3656 +++++++++++++++++ .../key-usage-supplement.json | 174 + 25 files changed, 5721 insertions(+), 24 deletions(-) create mode 100644 features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/ResponseSigningMode.kt create mode 100644 features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/repository/SigningFlagsRepository.kt create mode 100644 features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningContext.kt create mode 100644 features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt create mode 100644 features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifier.kt create mode 100644 features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningCrypto.kt create mode 100644 features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningDer.kt create mode 100644 features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt create mode 100644 features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningConstructionTest.kt create mode 100644 features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt create mode 100644 features/dd-sdk-android-flags/src/test/resources/response-signing-v3/README.md create mode 100644 features/dd-sdk-android-flags/src/test/resources/response-signing-v3/corpus.json create mode 100644 features/dd-sdk-android-flags/src/test/resources/response-signing-v3/key-usage-supplement.json diff --git a/detekt_custom_safe_calls_third_party.yml b/detekt_custom_safe_calls_third_party.yml index 43a79a878e..a4303d55ee 100644 --- a/detekt_custom_safe_calls_third_party.yml +++ b/detekt_custom_safe_calls_third_party.yml @@ -1223,3 +1223,30 @@ datadog: # region SQLDelight - "com.squareup.sqldelight.android.AndroidSqliteDriver.Callback.onCorruption(androidx.sqlite.db.SupportSQLiteDatabase)" # endregion + # region Response signing v3 + - "java.io.ByteArrayInputStream.constructor(kotlin.ByteArray?)" + - "java.util.LinkedHashMap.containsKey(kotlin.String)" + - "java.util.concurrent.atomic.AtomicReference.constructor(com.datadog.android.flags.internal.repository.SigningFlagsRepository.VerifiedFlags?)" + - "java.util.concurrent.atomic.AtomicReference.set(com.datadog.android.flags.internal.repository.SigningFlagsRepository.VerifiedFlags?)" + - "kotlin.ByteArray.forEachIndexed(kotlin.Function2)" + - "kotlin.String.decodeBase64()" + - "kotlin.collections.List.zipWithNext()" + - "kotlin.collections.MutableList.add(com.datadog.android.flags.internal.signing.SigningDer)" + - "kotlin.collections.MutableSet.sorted()" + - "okhttp3.Call.isCanceled()" + - "okhttp3.Headers.values(kotlin.String)" + - "okhttp3.OkHttpClient.Builder.followRedirects(kotlin.Boolean)" + - "okhttp3.OkHttpClient.Builder.followSslRedirects(kotlin.Boolean)" + - "okhttp3.ResponseBody.source()" + - "okio.Buffer.write(kotlin.ByteArray)" + - "okio.Buffer.write(okio.ByteString)" + - "okio.Buffer.writeByte(kotlin.Int)" + - "okio.Buffer.writeInt(kotlin.Int)" + - "okio.Buffer.writeLong(kotlin.Long)" + - "okio.Buffer.writeShort(kotlin.Int)" + - "okio.Buffer.writeUtf8(kotlin.String)" + - "okio.ByteString.base64()" + - "okio.ByteString.hex()" + - "okio.ByteString.sha256()" + - "okio.ByteString.toByteArray()" + # endregion diff --git a/detekt_custom_unsafe_calls.yml b/detekt_custom_unsafe_calls.yml index 682ebbe645..8280be6b99 100644 --- a/detekt_custom_unsafe_calls.yml +++ b/detekt_custom_unsafe_calls.yml @@ -288,3 +288,17 @@ datadog: - "com.squareup.sqldelight.transaction(kotlin.Boolean, kotlin.Function1):java.lang.IllegalStateException" - "com.squareup.sqldelight.transactionWithResult(kotlin.Boolean, kotlin.Function1):java.lang.IllegalStateException" # endregion + # region Response signing v3 + - "java.security.SecureRandom.nextBytes(kotlin.ByteArray?):java.security.ProviderException" + - "java.security.Signature.getInstance(kotlin.String?):java.security.NoSuchAlgorithmException" + - "java.security.Signature.initVerify(java.security.PublicKey?):java.security.InvalidKeyException" + - "java.security.Signature.update(kotlin.ByteArray?):java.security.SignatureException" + - "java.security.Signature.verify(kotlin.ByteArray?):java.security.SignatureException" + - "java.security.cert.CertificateFactory.generateCertificate(java.io.InputStream?):java.security.cert.CertificateException" + - "java.security.cert.CertificateFactory.getInstance(kotlin.String?):java.security.cert.CertificateException" + - "java.security.cert.X509Certificate.verify(java.security.PublicKey?):java.security.GeneralSecurityException" + - "kotlin.ByteArray.toByteString(kotlin.Int, kotlin.Int):java.lang.IndexOutOfBoundsException,java.lang.IllegalArgumentException" + - "kotlin.String.decodeHex():java.lang.IllegalArgumentException" + - "okhttp3.ResponseBody.bytes():java.io.IOException" + - "okio.BufferedSource.request(kotlin.Long):java.io.IOException,java.lang.IllegalArgumentException" + # endregion diff --git a/features/dd-sdk-android-flags/README.md b/features/dd-sdk-android-flags/README.md index 47e6a7fca5..ea79362532 100644 --- a/features/dd-sdk-android-flags/README.md +++ b/features/dd-sdk-android-flags/README.md @@ -60,6 +60,47 @@ Flags.enable(flagsConfig) The `FlagsConfiguration.Builder` supports the following options: +#### Response signing (experimental draft) + +Response signing is disabled by default. During a browser-first pilot, Android can +observe the same v3 response proofs with an explicitly provisioned public trust anchor: + +```kotlin +val flagsConfig = FlagsConfiguration.Builder() + .responseSigning(ResponseSigningMode.OBSERVE, listOf(publicRootCertificateBase64Der)) + .build() +``` + +No production root or test root is bundled. The list contains locally trusted public +root certificates encoded as padded base64 DER. Never put a private key in SDK configuration. +The root stays fixed while each response carries a leaf and one intermediate certificate, +so intermediate rotation does not require an SDK update or a prior successful fetch. +The configured root's validity still limits how long an unchanged SDK can verify responses. + +- `OFF` preserves existing transport and persistence and performs no signing work. +- `OBSERVE` reports bounded verified/unverified telemetry and accepts otherwise-valid + responses when optional verification fails. Authentication, transport, redirect, and + JSON errors remain failures. Signed and unsigned requests are never retried as a downgrade. +- `REQUIRED` accepts only valid proofs. Empty or invalid roots yield evaluation defaults; + an empty root list fails locally before a request. Verified assignments are held only + in memory and are checked against their original expiry on every evaluation. Restart, + expiry, a changed request scope, or a clock earlier than admission causes defaults. + A live RUM application-ID change or stopping the Flags feature immediately invalidates + prior proofs and prevents in-flight responses from restoring them. + +Observe mode keeps unverified persistence in a new namespace scoped to the emitted token, +endpoint and query, environment, application ID, evaluation context, and semantic headers. +It reads that namespace only after forming the request, so the first opt-in is a cold start. +Old client-name-only cache entries are not imported. A valid proof also creates a separate +verified memory fallback, which unsigned observations cannot overwrite or extend. +Persisted entries are never treated as verified. + +The draft verifies complete buffered JSON assignment responses over HTTPS, before parsing +or installing them. It does not introduce a streaming protocol. The shared conformance +corpus and native host-JVM tests are development evidence; Android device/provider tests, +iOS API review, production anchor provisioning, and operational rollout approval remain +release prerequisites. + #### Disable RUM integration By default, flag evaluations are automatically sent to RUM (Real User Monitoring) and attached to the current view if RUM is enabled. You can disable this integration: diff --git a/features/dd-sdk-android-flags/api/apiSurface b/features/dd-sdk-android-flags/api/apiSurface index 77dc984de9..23d64d5d1a 100644 --- a/features/dd-sdk-android-flags/api/apiSurface +++ b/features/dd-sdk-android-flags/api/apiSurface @@ -26,6 +26,7 @@ fun FlagsClient.setEvaluationTelemetryOptOut(Boolean) data class com.datadog.android.flags.FlagsConfiguration fun copy(Boolean = this.trackExposures, Boolean = this.trackEvaluations, String? = this.customExposureEndpoint, String? = this.customEvaluationEndpoint, String? = this.customFlagEndpoint, Long = this.evaluationFlushIntervalMs, Boolean = this.rumIntegrationEnabled, Boolean = this.gracefulModeEnabled): FlagsConfiguration class Builder + fun responseSigning(ResponseSigningMode, List): Builder fun trackExposures(Boolean): Builder fun trackEvaluations(Boolean): Builder fun useCustomExposureEndpoint(String): Builder @@ -41,6 +42,10 @@ interface com.datadog.android.flags.FlagsStateListener fun onStateChanged(com.datadog.android.flags.model.FlagsClientState) interface com.datadog.android.flags.FlagsSubscription fun unsubscribe() +enum com.datadog.android.flags.ResponseSigningMode + - OFF + - OBSERVE + - REQUIRED interface com.datadog.android.flags.StateObservable fun getCurrentState(): com.datadog.android.flags.model.FlagsClientState fun addListener(FlagsStateListener) diff --git a/features/dd-sdk-android-flags/api/dd-sdk-android-flags.api b/features/dd-sdk-android-flags/api/dd-sdk-android-flags.api index 3fdb143343..a50af76150 100644 --- a/features/dd-sdk-android-flags/api/dd-sdk-android-flags.api +++ b/features/dd-sdk-android-flags/api/dd-sdk-android-flags.api @@ -68,6 +68,7 @@ public final class com/datadog/android/flags/FlagsConfiguration$Builder { public final fun evaluationFlushInterval (J)Lcom/datadog/android/flags/FlagsConfiguration$Builder; public final fun gracefulModeEnabled (Z)Lcom/datadog/android/flags/FlagsConfiguration$Builder; public final fun initializationTimeout (J)Lcom/datadog/android/flags/FlagsConfiguration$Builder; + public final fun responseSigning (Lcom/datadog/android/flags/ResponseSigningMode;Ljava/util/List;)Lcom/datadog/android/flags/FlagsConfiguration$Builder; public final fun rumIntegrationEnabled (Z)Lcom/datadog/android/flags/FlagsConfiguration$Builder; public final fun trackEvaluations (Z)Lcom/datadog/android/flags/FlagsConfiguration$Builder; public final fun trackExposures (Z)Lcom/datadog/android/flags/FlagsConfiguration$Builder; @@ -87,6 +88,15 @@ public abstract interface class com/datadog/android/flags/FlagsSubscription { public abstract fun unsubscribe ()V } +public final class com/datadog/android/flags/ResponseSigningMode : java/lang/Enum { + public static final field OBSERVE Lcom/datadog/android/flags/ResponseSigningMode; + public static final field OFF Lcom/datadog/android/flags/ResponseSigningMode; + public static final field REQUIRED Lcom/datadog/android/flags/ResponseSigningMode; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/flags/ResponseSigningMode; + public static fun values ()[Lcom/datadog/android/flags/ResponseSigningMode; +} + public abstract interface class com/datadog/android/flags/StateObservable { public abstract fun addListener (Lcom/datadog/android/flags/FlagsStateListener;)V public abstract fun getCurrentState ()Lcom/datadog/android/flags/model/FlagsClientState; diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt index 52a9ef6cc4..3575727d8d 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt @@ -26,8 +26,11 @@ import com.datadog.android.flags.internal.RumEvaluationLogger import com.datadog.android.flags.internal.evaluation.EvaluationsManager import com.datadog.android.flags.internal.net.PrecomputedAssignmentsDownloader import com.datadog.android.flags.internal.repository.DefaultFlagsRepository +import com.datadog.android.flags.internal.repository.FlagsRepository import com.datadog.android.flags.internal.repository.NoOpFlagsRepository +import com.datadog.android.flags.internal.repository.SigningFlagsRepository import com.datadog.android.flags.internal.repository.net.PrecomputeMapper +import com.datadog.android.flags.internal.signing.ResponseSigningState import com.datadog.android.flags.model.EvaluationContext import com.datadog.android.flags.model.FlagsClientState import com.datadog.android.flags.model.ResolutionDetails @@ -348,6 +351,7 @@ interface FlagsClient { * ensuring thread-safe access and proper lifecycle management. */ companion object { + private const val SIGNING_MILLIS_PER_SECOND = 1000 private const val DEFAULT_CLIENT_NAME = "default" /** @@ -436,31 +440,54 @@ interface FlagsClient { val networkExecutorService = featureSdkCore.createSingleThreadExecutorService( executorContext = FLAGS_NETWORK_EXECUTOR_NAME ) + val signing = flagsFeature.signingContext?.let { + ResponseSigningState(configuration.responseSigning, featureSdkCore.internalLogger, context = it) { + featureSdkCore.timeProvider.getDeviceTimestampMillis() / SIGNING_MILLIS_PER_SECOND + } + } + val deliverFirstFlags: (Runnable) -> Unit = { delivery -> + val worker = featureSdkCore.createSingleThreadExecutorService(FLAGS_FIRST_FLAGS_EXECUTOR_NAME) + try { + worker.executeSafe("Deliver first flags", featureSdkCore.internalLogger, delivery) + } finally { + worker.shutdown() + } + } val datastore = featureSdkCore.getFeature(FLAGS_FEATURE_NAME) ?.dataStore - val flagsRepository = if (datastore != null) { - DefaultFlagsRepository( - featureSdkCore = featureSdkCore, - dataStore = datastore, - instanceName = name, - deliverFirstFlags = { delivery -> - val worker = featureSdkCore.createSingleThreadExecutorService(FLAGS_FIRST_FLAGS_EXECUTOR_NAME) - try { - worker.executeSafe("Deliver first flags", featureSdkCore.internalLogger, delivery) - } finally { - worker.shutdown() - } - } + val ordinaryRepository: (String) -> FlagsRepository = { instanceName -> + if (datastore != null) { + DefaultFlagsRepository( + featureSdkCore = featureSdkCore, + dataStore = datastore, + instanceName = instanceName, + deliverFirstFlags = deliverFirstFlags + ) + } else { + NoOpFlagsRepository() + } + } + val flagsRepository = signing?.let { + SigningFlagsRepository( + { scope -> ordinaryRepository("$name-signing-v3-observe-$scope") }, + it, + deliverFirstFlags ) + } ?: ordinaryRepository(name) + + val callFactory = if (signing == null) { + featureSdkCore.createOkHttpCallFactory() } else { - NoOpFlagsRepository() + featureSdkCore.createOkHttpCallFactory { + followRedirects(false) + followSslRedirects(false) + } } - - val callFactory = featureSdkCore.createOkHttpCallFactory() val assignmentsDownloader = PrecomputedAssignmentsDownloader( internalLogger = featureSdkCore.internalLogger, callFactory = callFactory, - requestFactory = flagsFeature.precomputedRequestFactory + requestFactory = flagsFeature.precomputedRequestFactory, + signing = signing ) val precomputeMapper = PrecomputeMapper(featureSdkCore.internalLogger) @@ -481,7 +508,8 @@ interface FlagsClient { precomputeMapper = precomputeMapper, flagStateManager = flagStateManager, initializationTimeoutMs = configuration.initializationTimeoutMs, - initializationTimeoutScheduler = flagsFeature.initializationTimeoutScheduler + initializationTimeoutScheduler = flagsFeature.initializationTimeoutScheduler, + signing = signing ) val rumEvaluationLogger = createRumEvaluationLogger(featureSdkCore) diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsConfiguration.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsConfiguration.kt index 88d2b2405a..cda6401814 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsConfiguration.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsConfiguration.kt @@ -6,6 +6,8 @@ package com.datadog.android.flags +import com.datadog.android.flags.internal.signing.ResponseSigningConfiguration + private const val DEFAULT_INITIALIZATION_TIMEOUT_MS = 5_000L /** @@ -21,7 +23,8 @@ data class FlagsConfiguration internal constructor( internal val evaluationFlushIntervalMs: Long, internal val rumIntegrationEnabled: Boolean, internal val gracefulModeEnabled: Boolean, - internal val initializationTimeoutMs: Long? + internal val initializationTimeoutMs: Long?, + internal val responseSigning: ResponseSigningConfiguration = ResponseSigningConfiguration() ) { /** * Copies this configuration and preserves the initialization timeout. @@ -46,7 +49,8 @@ data class FlagsConfiguration internal constructor( evaluationFlushIntervalMs = evaluationFlushIntervalMs, rumIntegrationEnabled = rumIntegrationEnabled, gracefulModeEnabled = gracefulModeEnabled, - initializationTimeoutMs = initializationTimeoutMs + initializationTimeoutMs = initializationTimeoutMs, + responseSigning = responseSigning ) /** @@ -62,6 +66,20 @@ data class FlagsConfiguration internal constructor( private var rumIntegrationEnabled: Boolean = true private var gracefulModeEnabled: Boolean = true private var initializationTimeoutMs: Long? = DEFAULT_INITIALIZATION_TIMEOUT_MS + private var responseSigning = ResponseSigningConfiguration() + + /** + * Opts into assignment response verification. No production trust anchor is bundled. + * + * @param mode OFF by default; OBSERVE accepts unverified data, REQUIRED uses verified memory only. + * @param trustedRootCertificates Explicit trusted public root certificates as padded base64 DER. + * Empty or invalid roots leave responses unverified; REQUIRED then returns evaluation defaults. + * @return this builder. + */ + fun responseSigning(mode: ResponseSigningMode, trustedRootCertificates: List): Builder { + responseSigning = ResponseSigningConfiguration(mode, trustedRootCertificates.toList()) + return this + } /** * Sets whether exposures should be logged to the dedicated exposures intake endpoint. @@ -215,7 +233,8 @@ data class FlagsConfiguration internal constructor( evaluationFlushIntervalMs = evaluationFlushIntervalMs, rumIntegrationEnabled = rumIntegrationEnabled, gracefulModeEnabled = gracefulModeEnabled, - initializationTimeoutMs = initializationTimeoutMs + initializationTimeoutMs = initializationTimeoutMs, + responseSigning = responseSigning ) internal companion object { diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/ResponseSigningMode.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/ResponseSigningMode.kt new file mode 100644 index 0000000000..ed05152dab --- /dev/null +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/ResponseSigningMode.kt @@ -0,0 +1,19 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags + +/** Controls verification of assignment responses. Disabled unless explicitly configured. */ +enum class ResponseSigningMode { + /** Preserves the existing transport and cache behavior without cryptographic work. */ + OFF, + + /** Reports verification outcomes while accepting otherwise valid unsigned assignments. */ + OBSERVE, + + /** Requires valid proofs; verified assignments remain in memory until their original expiry. */ + REQUIRED +} diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/FlagsFeature.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/FlagsFeature.kt index 94ec13af65..6b5052615b 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/FlagsFeature.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/FlagsFeature.kt @@ -17,9 +17,11 @@ import com.datadog.android.api.storage.FeatureStorageConfiguration import com.datadog.android.core.internal.utils.scheduleSafe import com.datadog.android.flags.FlagsClient import com.datadog.android.flags.FlagsConfiguration +import com.datadog.android.flags.ResponseSigningMode import com.datadog.android.flags.internal.evaluation.InitializationTimeoutScheduler import com.datadog.android.flags.internal.net.ExposuresRequestFactory import com.datadog.android.flags.internal.net.PrecomputedAssignmentsRequestFactory +import com.datadog.android.flags.internal.signing.ResponseSigningContext import com.datadog.android.flags.internal.storage.ExposureEventRecordWriter import com.datadog.android.flags.internal.storage.NoOpRecordWriter import com.datadog.android.flags.internal.storage.RecordWriter @@ -61,6 +63,12 @@ internal class FlagsFeature( */ private val registeredClients: MutableMap = mutableMapOf() + internal val signingContext = if (flagsConfiguration.responseSigning.mode == ResponseSigningMode.OFF) { + null + } else { + ResponseSigningContext() + } + // region Storage Feature override val storageConfiguration = FeatureStorageConfiguration.DEFAULT @@ -122,6 +130,10 @@ internal class FlagsFeature( } isDebugBuild = (appContext.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE) != 0 isInitialized = true + signingContext?.let { + it.start() + sdkCore.setContextUpdateReceiver(it) + } dataWriter = createDataWriter() processor = ExposureEventsProcessor( writer = dataWriter, @@ -130,6 +142,10 @@ internal class FlagsFeature( } override fun onStop() { + signingContext?.let { + it.stop() + sdkCore.removeContextUpdateReceiver(it) + } dataWriter = NoOpRecordWriter() isInitialized = false // Allow re-initialization if feature is restarted synchronized(registeredClients) { diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/evaluation/EvaluationsManager.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/evaluation/EvaluationsManager.kt index 09ca8d9330..8ad8f86be4 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/evaluation/EvaluationsManager.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/evaluation/EvaluationsManager.kt @@ -19,6 +19,7 @@ import com.datadog.android.flags.internal.net.NetworkRequestFailedException import com.datadog.android.flags.internal.net.PrecomputedAssignmentsReader import com.datadog.android.flags.internal.repository.FlagsRepository import com.datadog.android.flags.internal.repository.net.PrecomputeMapper +import com.datadog.android.flags.internal.signing.ResponseSigningState import com.datadog.android.flags.model.EvaluationContext import com.datadog.android.flags.model.FlagsClientState import java.util.concurrent.Executor @@ -81,6 +82,7 @@ private class InitializationCompletion(private var callback: EvaluationContextCa * @param precomputeMapper transforms network responses into internal flag format * @param flagStateManager channel for notifying state change listeners * @param initializationTimeoutMs optional maximum duration of the first context operation + * @param signing optional verification and request generation state * @param initializationTimeoutScheduler schedules the first context timeout */ internal class EvaluationsManager( @@ -92,10 +94,11 @@ internal class EvaluationsManager( private val precomputeMapper: PrecomputeMapper, private val flagStateManager: FlagsStateManager, private val initializationTimeoutMs: Long?, + private val signing: ResponseSigningState? = null, private val initializationTimeoutScheduler: InitializationTimeoutScheduler ) { private val didStartInitialization = AtomicBoolean(false) - private val initializationTerminalLock = Any() + private val initializationTerminalLock = signing?.lock ?: Any() /** * Processes a new evaluation context by fetching flags and storing atomically. @@ -112,11 +115,21 @@ internal class EvaluationsManager( * @param callback Optional callback invoked when the context is set and the flags have been fetched successfully or not. * @param onFetchFinished Releases request state when the fetch terminates, not when initialization times out. */ + @Suppress("LongMethod") // Preserve the existing off-mode lifecycle; signed admission has its own boundary. fun updateEvaluationsForContext( context: EvaluationContext, callback: EvaluationContextCallback? = null, onFetchFinished: () -> Unit = {} ) { + if (signing != null) { + updateSignedEvaluationsForContext( + context.copy(attributes = context.attributes.toMap()), + callback, + onFetchFinished, + signing + ) + return + } val matchingCachedAssignments = AtomicBoolean(false) val initializationCompletion = startInitializationTimeout(context, callback, matchingCachedAssignments) { flagStateManager.updateState(FlagsClientState.Reconciling) @@ -182,6 +195,72 @@ internal class EvaluationsManager( } } + @Suppress("CyclomaticComplexMethod") // Keep generation, shutdown and proof gates adjacent to installation. + private fun updateSignedEvaluationsForContext( + context: EvaluationContext, + callback: EvaluationContextCallback?, + onFetchFinished: () -> Unit, + signing: ResponseSigningState + ) { + val generation = signing.begin(context) + val cached = AtomicBoolean(false) + val completion = startInitializationTimeout(context, callback, cached, { signing.isCurrent(generation) }) { + flagStateManager.updateState(FlagsClientState.Reconciling) + } + if (completion == null) flagStateManager.updateState(FlagsClientState.Reconciling) + completionAwareExecutor(onFetchFinished).executeSafe(FETCH_AND_STORE_OPERATION_NAME, internalLogger) { + try { + val datadogContext = if (sdkCore.getFeature(Feature.FLAGS_FEATURE_NAME) != null) { + (sdkCore as? InternalSdkCore)?.getDatadogContext(setOf(Feature.RUM_FEATURE_NAME)) + } else { + null + } + val response = datadogContext?.let { + assignmentsReader.readSignedPrecomputedFlags(context, it, generation) { + flagsRepository.waitForPersistenceLoad() + } + } + val assignments = response?.json?.let { precomputeMapper.map(it) } + ?.takeIf { it.obfuscation == null || datadogContext.source == "android" } + var completedCallback: EvaluationContextCallback? = null + val error = NetworkRequestFailedException( + if (response == null) NETWORK_REQUEST_FAILED_MESSAGE else INVALID_RESPONSE_MESSAGE + ) + val eligible = assignments != null && sdkCore.getFeature(Feature.FLAGS_FEATURE_NAME) != null + var installed = false + val admitted = signing.admit(generation) { + synchronized(initializationTerminalLock) { + completedCallback = completion?.take()?.callback ?: if (completion == null) callback else null + if (eligible && !response.isCancelled()) { + flagsRepository.setSignedFlagsAndContext( + context, + assignments.flags, + assignments.obfuscation, + response.proof + ) { + installed = true + flagStateManager.updateState(FlagsClientState.Ready) + } + } + if (!installed) { + flagsRepository.restoreVerifiedFlags() + cached.set(flagsRepository.hasLoadedFlagsForContext(context)) + flagStateManager.updateState( + if (cached.get()) FlagsClientState.Stale else FlagsClientState.Error(error) + ) + } + } + } + if (!admitted) { + completedCallback = completion?.take()?.callback ?: if (completion == null) callback else null + } + if (admitted && installed) completedCallback?.onSuccess() else completedCallback?.onFailure(error) + } finally { + onFetchFinished() + } + } + } + // Executor construction does not run the task. Rejection is rethrown only // to executeSafe, which logs it without exposing it to the caller. @Suppress("UnsafeThirdPartyFunctionCall", "ThrowingInternalException") @@ -221,6 +300,7 @@ internal class EvaluationsManager( context: EvaluationContext, callback: EvaluationContextCallback?, matchingCachedAssignments: AtomicBoolean, + isCurrent: () -> Boolean = { true }, beforeScheduling: () -> Unit ): InitializationCompletion? { val timeoutMs = initializationTimeoutMs @@ -234,7 +314,9 @@ internal class EvaluationsManager( val claimedResult = completion.take(shouldCancelTimeout = false) ?: return@synchronized null val currentState = flagStateManager.getCurrentState() - if (currentState != FlagsClientState.Ready && currentState != FlagsClientState.Stale) { + if (isCurrent() && currentState != FlagsClientState.Ready && + currentState != FlagsClientState.Stale + ) { val hasMatchingCachedAssignments = matchingCachedAssignments.get() || flagsRepository.hasLoadedFlagsForContext(context) val timeoutState = if (hasMatchingCachedAssignments) { diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsDownloader.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsDownloader.kt index 65311982c4..72c78ec064 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsDownloader.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsDownloader.kt @@ -9,10 +9,16 @@ package com.datadog.android.flags.internal.net import androidx.annotation.WorkerThread import com.datadog.android.api.InternalLogger import com.datadog.android.api.context.DatadogContext +import com.datadog.android.flags.ResponseSigningMode +import com.datadog.android.flags.internal.signing.ResponseSigningState +import com.datadog.android.flags.internal.signing.ResponseSigningVerifier +import com.datadog.android.flags.internal.signing.SignedAssignmentsResponse import com.datadog.android.flags.model.EvaluationContext import okhttp3.Call +import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response +import java.io.IOException /** * Downloads precomputed flag assignments from Datadog Feature Flags service. @@ -20,11 +26,13 @@ import okhttp3.Response * @param callFactory Factory for creating HTTP calls * @param internalLogger Logger for error and debug messages * @param requestFactory Factory for creating precomputed assignments requests + * @param signing optional signing verification state */ internal class PrecomputedAssignmentsDownloader( private val callFactory: Call.Factory, private val internalLogger: InternalLogger, - private val requestFactory: PrecomputedAssignmentsRequestFactory + private val requestFactory: PrecomputedAssignmentsRequestFactory, + private val signing: ResponseSigningState? = null ) : PrecomputedAssignmentsReader { @WorkerThread @@ -34,6 +42,82 @@ internal class PrecomputedAssignmentsDownloader( return executeDownloadRequest(request) } + @WorkerThread + // Transport failures and proof failures have different fallback rules. + @Suppress("ReturnCount", "CyclomaticComplexMethod") + override fun readSignedPrecomputedFlags( + context: EvaluationContext, + datadogContext: DatadogContext, + generation: Long, + onPrepared: () -> Unit + ): SignedAssignmentsResponse? { + val state = + signing ?: return readPrecomputedFlags(context, datadogContext)?.let { SignedAssignmentsResponse(it, null) } + if (!state.isCurrent(generation)) return null + val original = requestFactory.create(context, datadogContext) ?: return null + val prepared = state.prepare(original, generation) + if (prepared == null && state.configuration.mode == ResponseSigningMode.REQUIRED) return null + onPrepared() + val request = prepared ?: original + val transport = + (callFactory as? OkHttpClient)?.newBuilder()?.followRedirects(false)?.followSslRedirects(false)?.build() + ?: callFactory + return try { + val call = transport.newCall(request) + call.execute().use { response -> + if (!response.isSuccessful) { + handleResponse(response) + return null + } + if (redirected(response, request) || call.isCanceled()) return null + val body = response.body ?: return null + if (state.configuration.mode == ResponseSigningMode.REQUIRED && + body.source().request(ResponseSigningVerifier.MAX_RESPONSE_BYTES.toLong() + 1) + ) { + return null + } + val bytes = body.bytes() + val proof = if (prepared != null && + ResponseSigningVerifier.matchesRequest(prepared, response.request) + ) { + state.verifier.verify(prepared, response.code, response.headers, bytes, state.now()) + } else { + null + } + state.report(proof != null) + if (proof == null && state.configuration.mode == ResponseSigningMode.REQUIRED) return null + SignedAssignmentsResponse(bytes.toString(Charsets.UTF_8), proof) { call.isCanceled() } + } + } catch (_: IllegalArgumentException) { + failedSignedDownload() + } catch (_: IllegalStateException) { + failedSignedDownload() + } catch (exception: IOException) { + failedSignedDownload(exception) + } + } + + private fun redirected(response: Response, request: Request): Boolean { + var prior = response.priorResponse + var redirected = response.request.url != request.url || response.request.method != request.method + while (prior != null) { + redirected = redirected || prior.isRedirect + prior = prior.priorResponse + } + return redirected + } + + private fun failedSignedDownload(exception: IOException? = null): SignedAssignmentsResponse? { + internalLogger.log( + InternalLogger.Level.WARN, + InternalLogger.Target.MAINTAINER, + { "Unable to download signed flag assignments" }, + exception, + onlyOnce = true + ) + return null + } + @Suppress("TooGenericExceptionCaught") private fun executeDownloadRequest(request: Request): String? = try { val response = callFactory.newCall(request).execute() diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsReader.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsReader.kt index e254a9c08e..0eba6140b3 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsReader.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/net/PrecomputedAssignmentsReader.kt @@ -8,6 +8,7 @@ package com.datadog.android.flags.internal.net import androidx.annotation.WorkerThread import com.datadog.android.api.context.DatadogContext +import com.datadog.android.flags.internal.signing.SignedAssignmentsResponse import com.datadog.android.flags.model.EvaluationContext import com.datadog.tools.annotation.NoOpImplementation @@ -15,4 +16,14 @@ import com.datadog.tools.annotation.NoOpImplementation internal interface PrecomputedAssignmentsReader { @WorkerThread fun readPrecomputedFlags(context: EvaluationContext, datadogContext: DatadogContext): String? + + @WorkerThread + fun readSignedPrecomputedFlags( + context: EvaluationContext, + datadogContext: DatadogContext, + generation: Long, + onPrepared: () -> Unit = {} + ): SignedAssignmentsResponse? = readPrecomputedFlags(context, datadogContext)?.let { + SignedAssignmentsResponse(it, null) + } } diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/repository/FlagsRepository.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/repository/FlagsRepository.kt index 801748a6b7..ab5b90bedc 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/repository/FlagsRepository.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/repository/FlagsRepository.kt @@ -8,6 +8,7 @@ package com.datadog.android.flags.internal.repository import com.datadog.android.flags.internal.model.FlagKeyObfuscation import com.datadog.android.flags.internal.model.PrecomputedFlag +import com.datadog.android.flags.internal.signing.VerifiedResponse import com.datadog.android.flags.model.EvaluationContext internal interface FlagsRepository { @@ -25,6 +26,16 @@ internal interface FlagsRepository { onInstalled: () -> Unit = {} ) + fun setSignedFlagsAndContext( + context: EvaluationContext, + flags: Map, + obfuscation: FlagKeyObfuscation?, + proof: VerifiedResponse?, + onInstalled: () -> Unit + ) = setFlagsAndContext(context, flags, obfuscation, onInstalled) + + fun restoreVerifiedFlags() = Unit + /** Waits for initial persistence loading, up to the repository's timeout. Call without holding locks. */ fun waitForPersistenceLoad() diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/repository/SigningFlagsRepository.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/repository/SigningFlagsRepository.kt new file mode 100644 index 0000000000..c02becfc19 --- /dev/null +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/repository/SigningFlagsRepository.kt @@ -0,0 +1,119 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.internal.repository + +import com.datadog.android.flags.ResponseSigningMode +import com.datadog.android.flags.internal.model.FlagKeyObfuscation +import com.datadog.android.flags.internal.model.PrecomputedFlag +import com.datadog.android.flags.internal.signing.ResponseSigningState +import com.datadog.android.flags.internal.signing.VerifiedResponse +import com.datadog.android.flags.model.EvaluationContext +import java.util.concurrent.atomic.AtomicReference + +/** Verified state is never persisted or replaced by an unsigned observation. */ +internal class SigningFlagsRepository( + private val ordinaryFactory: (String) -> FlagsRepository, + private val signing: ResponseSigningState, + private val deliverFirstFlags: (Runnable) -> Unit +) : FlagsRepository { + private data class VerifiedFlags( + val context: EvaluationContext, + val flags: Map, + val obfuscation: FlagKeyObfuscation?, + val proof: VerifiedResponse + ) + private val verified = AtomicReference(null) + private val required = signing.configuration.mode == ResponseSigningMode.REQUIRED + override val firstFlags = FirstFlagsLatch() + private val empty = NoOpFlagsRepository() + private var ordinaryScope: String? = null + private var scopedOrdinary: FlagsRepository = empty + + private fun ordinary(): FlagsRepository = synchronized(signing.lock) { + val scope = signing.currentScope() + if (required || scope == null) return empty + if (ordinaryScope != scope) { + scopedOrdinary = ordinaryFactory(scope) + ordinaryScope = scope + scopedOrdinary.firstFlags.whenComplete { keys -> + synchronized(signing.lock) { + if (signing.currentScope() == scope) firstFlags.complete(keys, deliverFirstFlags) + } + } + } + scopedOrdinary + } + + override fun waitForPersistenceLoad() = ordinary().waitForPersistenceLoad() + + private fun current(): VerifiedFlags? = verified.get()?.takeIf { signing.permits(it.context, it.proof) } + + override fun setFlagsAndContext( + context: EvaluationContext, + flags: Map, + obfuscation: FlagKeyObfuscation?, + onInstalled: () -> Unit + ) { + if (!required) ordinary().setFlagsAndContext(context, flags, obfuscation, onInstalled) + } + + override fun setSignedFlagsAndContext( + context: EvaluationContext, + flags: Map, + obfuscation: FlagKeyObfuscation?, + proof: VerifiedResponse?, + onInstalled: () -> Unit + ) { + if (proof != null && signing.permits(context, proof)) { + verified.set(VerifiedFlags(context, flags, obfuscation, proof)) + } else if (required) { + return + } + if (required) { + onInstalled() + firstFlags.complete(if (obfuscation == null) flags.keys else emptySet(), deliverFirstFlags) + } else { + ordinary().setFlagsAndContext(context, flags, obfuscation, onInstalled) + } + } + + override fun restoreVerifiedFlags() { + if (!required) current()?.let { ordinary().setFlagsAndContext(it.context, it.flags, it.obfuscation) } + } + + @Suppress("ReturnCount") // Stop before resolving a flag when no admissible snapshot exists. + override fun getPrecomputedFlagWithContext(key: String): Pair? { + if (!required) return ordinary().getPrecomputedFlagWithContext(key) + val state = current() ?: return null + val encodedKey = state.obfuscation?.encode(key) ?: if (state.obfuscation == null) key else return null + return state.flags[encodedKey] to state.context + } + + override fun getPrecomputedFlag(key: String): PrecomputedFlag? = + if (required) getPrecomputedFlagWithContext(key)?.first else ordinary().getPrecomputedFlag(key) + + override fun getEvaluationContext(): EvaluationContext? = + if (required) current()?.context else ordinary().getEvaluationContext() + + override fun getFlagsSnapshot(): Map = + if (required) { + current()?.takeIf { + it.obfuscation == null + }?.flags ?: emptyMap() + } else { + ordinary().getFlagsSnapshot() + } + + override fun hasFlags(): Boolean = if (required) current()?.flags?.isNotEmpty() == true else ordinary().hasFlags() + + override fun hasLoadedFlagsForContext(context: EvaluationContext): Boolean = + if (required) { + current()?.let { it.context == context && it.flags.isNotEmpty() } == true + } else { + ordinary().hasLoadedFlagsForContext(context) + } +} diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningContext.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningContext.kt new file mode 100644 index 0000000000..310761155b --- /dev/null +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningContext.kt @@ -0,0 +1,34 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.internal.signing + +import com.datadog.android.api.feature.Feature +import com.datadog.android.api.feature.FeatureContextUpdateReceiver +import com.datadog.android.internal.rum.rumContext + +/** Shared per Flags feature; RUM app changes invalidate clients without polling core on evaluation. */ +internal class ResponseSigningContext : FeatureContextUpdateReceiver { + class Snapshot(val applicationId: String?, val active: Boolean) + val lock = Any() + private var identity = Snapshot(null, true) + + fun snapshot(): Snapshot = synchronized(lock) { identity } + + fun start() = synchronized(lock) { identity = Snapshot(null, true) } + + fun stop() = synchronized(lock) { identity = Snapshot(null, false) } + + override fun onContextUpdate(featureName: String, context: Map) { + if (featureName != Feature.RUM_FEATURE_NAME) return + val applicationId = context.rumContext()?.applicationId + synchronized(lock) { + if (identity.active && applicationId != identity.applicationId) { + identity = Snapshot(applicationId, true) + } + } + } +} diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt new file mode 100644 index 0000000000..bcba7ec8bd --- /dev/null +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt @@ -0,0 +1,114 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.internal.signing + +import com.datadog.android.api.InternalLogger +import com.datadog.android.flags.ResponseSigningMode +import com.datadog.android.flags.model.EvaluationContext +import okhttp3.Request +import java.io.IOException +import java.security.SecureRandom + +internal data class ResponseSigningConfiguration( + val mode: ResponseSigningMode = ResponseSigningMode.OFF, + val trustedRoots: List = emptyList() +) + +internal data class SignedAssignmentsResponse( + val json: String, + val proof: VerifiedResponse?, + val isCancelled: () -> Boolean = { false } +) + +/** Serializes request generations with admission; no response can change trust anchors. */ +internal class ResponseSigningState( + val configuration: ResponseSigningConfiguration, + private val logger: InternalLogger, + private val context: ResponseSigningContext = ResponseSigningContext(), + private val nowSeconds: () -> Long +) { + val lock = context.lock + private var identity = context.snapshot() + private var generation = 0L + private var requestedContext: EvaluationContext? = null + private var expectedScope: String? = null + val verifier = ResponseSigningVerifier(configuration.trustedRoots) + + fun now(): Long = nowSeconds() + + fun currentScope(): String? = synchronized(lock) { if (identity === context.snapshot()) expectedScope else null } + + fun begin(context: EvaluationContext): Long = synchronized(lock) { + generation += 1 + requestedContext = context + identity = this.context.snapshot() + expectedScope = null + generation + } + + fun isCurrent(requestGeneration: Long): Boolean = synchronized(lock) { + requestGeneration == generation && identity.active && identity === context.snapshot() + } + + fun admit(requestGeneration: Long, action: () -> Unit): Boolean = synchronized(lock) { + if (!isCurrent(requestGeneration)) return false + action() + true + } + + fun permits(context: EvaluationContext, proof: VerifiedResponse): Boolean = synchronized(lock) { + identity.active && identity === this.context.snapshot() && context == requestedContext && + proof.scope == expectedScope && now() in proof.verifiedAt until proof.expiresAt + } + + fun prepare(original: Request, requestGeneration: Long): Request? = try { + signingCheck(configuration.mode != ResponseSigningMode.REQUIRED || configuration.trustedRoots.isNotEmpty()) + val nonce = ByteArray(NONCE_BYTES) + SecureRandom().nextBytes(nonce) + val capabilities = original.header("x-dd-feature-flags-capabilities") + ?.split(',')?.map { it.trim() }?.toMutableSet() ?: mutableSetOf() + capabilities.add(ResponseSigningVerifier.CAPABILITY) + val request = original.newBuilder() + .header("x-dd-feature-flags-capabilities", capabilities.sorted().joinToString(",")) + .header(ResponseSigningVerifier.PREFIX + "signature-version", "3") + .header(ResponseSigningVerifier.PREFIX + "request-nonce", nonce.signingBytes().hex()) + .build() + signingCheck(original.header("dd-application-id") == identity.applicationId) + val scope = ResponseSigningVerifier.scope(request) + admit(requestGeneration) { expectedScope = scope } + request + } catch (_: IllegalArgumentException) { + prepareUnverified(original, requestGeneration) + } catch (_: IOException) { + prepareUnverified(original, requestGeneration) + } catch (_: IllegalStateException) { + prepareUnverified(original, requestGeneration) + } catch (_: java.security.ProviderException) { + prepareUnverified(original, requestGeneration) + } + + private fun prepareUnverified(original: Request, requestGeneration: Long): Request? { + report(false) + if (configuration.mode == ResponseSigningMode.OBSERVE) { + val scope = ResponseSigningVerifier.unverifiedScope(original) + admit(requestGeneration) { expectedScope = scope } + } + return null + } + + fun report(verified: Boolean) { + logger.log( + InternalLogger.Level.INFO, + InternalLogger.Target.TELEMETRY, + { if (verified) "Flag response signing v3: verified" else "Flag response signing v3: unverified" }, + onlyOnce = true + ) + } + private companion object { + const val NONCE_BYTES = 16 + } +} diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifier.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifier.kt new file mode 100644 index 0000000000..59c6ea6705 --- /dev/null +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifier.kt @@ -0,0 +1,285 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.internal.signing + +import okhttp3.Headers +import okhttp3.Request +import okio.Buffer +import okio.ByteString.Companion.decodeBase64 +import java.io.IOException +import java.security.GeneralSecurityException +import java.security.cert.X509Certificate +import java.util.Locale + +internal data class VerifiedResponse(val scope: String, val verifiedAt: Long, val expiresAt: Long) + +/** Native JCA verifies signatures; the explicit anchor never enters a system trust/path builder. */ +@Suppress("MagicNumber") // Time windows, DER OIDs and integer widths are frozen protocol constants. +internal class ResponseSigningVerifier(private val trustedRoots: List) { + fun verify(request: Request, status: Int, headers: Headers, body: ByteArray, now: Long): VerifiedResponse? = try { + verifyProof(request, status, headers, body, now) + } catch (_: GeneralSecurityException) { + null + } catch (_: IllegalArgumentException) { + null + } catch (_: IOException) { + null + } + + private fun verifyProof( + request: Request, + status: Int, + headers: Headers, + body: ByteArray, + now: Long + ): VerifiedResponse { + signingCheck(status == 200 && body.size <= MAX_RESPONSE_BYTES) + signingCheck(single(headers, PREFIX + "signature-version") == "3") + val leafBytes = base64(single(headers, PREFIX + "signing-certificate"), 4096) + val intermediateBytes = base64(single(headers, PREFIX + "signing-intermediate"), 4096) + signingCheck(single(headers, PREFIX + "certificate-id") == leafBytes.signingBytes().sha256().hex()) + val issued = seconds(single(headers, PREFIX + "issued-at")) + val expires = seconds(single(headers, PREFIX + "expires-at")) + signingCheck(now >= 0 && issued <= now + 30 && expires > now && expires > issued && expires - issued <= 300) + val leaf = certificate(leafBytes) + val intermediate = certificate(intermediateBytes) + leaf.restrict(false) + intermediate.restrict(true) + val anchor = trustedRoots.asSequence().mapNotNull { root -> + try { + certificate(base64(root, 4096)).takeIf { parent -> + parent.covers(now, issued, expires) && intermediate.issuedBy(parent) + } + } catch (_: GeneralSecurityException) { + null + } catch (_: IllegalArgumentException) { + null + } + }.firstOrNull() + signingCheck(anchor != null && leaf.issuedBy(intermediate)) + signingCheck(leaf.covers(now, issued, expires) && intermediate.covers(now, issued, expires)) + val signature = base64(single(headers, PREFIX + "signature"), 72) + strictSignature(signature) + val transcript = requestTranscript(request) + transcript.writeShort(status).writeLong(issued).writeLong(expires).writeLong(body.size.toLong()) + transcript.write(body.signingBytes().sha256()) + transcript.write(leafBytes.signingBytes().sha256()).write(intermediateBytes.signingBytes().sha256()) + signingCheck(verifySignature(leaf.native.publicKey, transcript.signingBytes(), signature)) + return VerifiedResponse(scope(request), now, expires) + } + + private class Certificate( + val native: X509Certificate, + val issuer: ByteArray, + val subject: ByteArray, + val extensions: Map> + ) { + fun covers(now: Long, issued: Long, expires: Long): Boolean { + val start = native.notBefore.time / 1000 + val end = native.notAfter.time / 1000 + return now in start..end && issued >= start && expires <= end + } + + @Suppress("ReturnCount") // Reject each issuer linkage before invoking native cryptography. + fun issuedBy(parent: Certificate): Boolean { + if (!issuer.contentEquals(parent.subject) || native.notBefore.time < parent.native.notBefore.time || + native.notAfter.time > parent.native.notAfter.time + ) { + return false + } + val aki = extensions[AUTHORITY_KEY_ID]?.second?.let { identifier(it, true) } + val ski = parent.extensions[SUBJECT_KEY_ID]?.second?.let { identifier(it, false) } + if (aki != null && ski != null && !aki.contentEquals(ski)) return false + return verifyCertificate(native, parent.native.publicKey) + } + + fun restrict(isIntermediate: Boolean) { + val basic = extensions["551d13"] ?: signingFailure() + val usage = extensions["551d0f"] ?: signingFailure() + signingCheck(basic.first && usage.first) + signingCheck(basic.second.contentEquals(hex(if (isIntermediate) "30060101ff020100" else "3000"))) + signingCheck(usage.second.contentEquals(hex(if (isIntermediate) "03020106" else "03020780"))) + val eku = extensions["551d25"]?.second + signingCheck((isIntermediate && eku == null) || eku?.contentEquals(hex("300a06082b06010505070303")) == true) + } + } + + // Explicit checks preserve the restricted certificate profile. + @Suppress("CyclomaticComplexMethod", "StringLiteralDuplication") + private fun certificate(bytes: ByteArray): Certificate { + val cert = SigningDer.read(bytes).sequence() + signingCheck(cert.size == 3) + val tbs = cert[0].sequence() + signingCheck(tbs.size == 8 && tbs[0].encoded.contentEquals(hex("a003020102"))) + signingCheck(tbs[1].tag == 2 && tbs[1].value[0].toInt() and 128 == 0) + signingCheck(cert[1].encoded.contentEquals(hex("300a06082a8648ce3d040302"))) + signingCheck(tbs[2].encoded.contentEquals(cert[1].encoded)) + signingCheck(cert[2].tag == 3 && cert[2].value[0] == 0.toByte()) + strictSignature(signingSlice(cert[2].value, 1, cert[2].value.size)) + val spki = tbs[6].sequence() + signingCheck(spki.size == 2 && spki[0].encoded.contentEquals(hex("301306072a8648ce3d020106082a8648ce3d030107"))) + signingCheck( + spki[1].tag == 3 && spki[1].value.size == 66 && spki[1].value[0] == 0.toByte() && + spki[1].value[1] == 4.toByte() + ) + signingCheck(tbs[7].tag == 0xa3 && tbs[7].children.size == 1) + val extensions = linkedMapOf>() + tbs[7].children[0].sequence().forEach { extension -> + val fields = extension.sequence() + signingCheck(fields.size in 2..3 && fields[0].tag == 6 && fields[fields.size - 1].tag == 4) + val oid = fields[0].value.signingBytes().hex() + signingCheck(!extensions.containsKey(oid)) + val critical = fields.size == 3 + if (critical) signingCheck(fields[1].encoded.contentEquals(hex("0101ff"))) + signingCheck(!critical || oid in setOf("551d13", "551d0f", "551d25", "551d0e", "551d23")) + signingCheck(oid !in setOf("551d1e", "551d24", "551d36")) + val value = fields[fields.size - 1].value + SigningDer.read(value) + if (oid == "551d0e") identifier(value, false) + if (oid == "551d23") identifier(value, true) + extensions[oid] = critical to value + } + val native = signingCertificate(bytes) + return Certificate(native, tbs[3].encoded, tbs[5].encoded, extensions) + } + + companion object { + const val PREFIX = "x-datadog-feature-flags-" + private const val NONCE_HEADER = PREFIX + "request-nonce" + const val CAPABILITY = "response-signing-v3" + const val MAX_RESPONSE_BYTES = 2 * 1024 * 1024 + private const val AUTHORITY_KEY_ID = "551d23" + private const val SUBJECT_KEY_ID = "551d0e" + private const val MAX_REQUEST_BYTES = 1024 * 1024 + private val SEMANTIC_HEADERS = + listOf("content-type", "dd-application-id", "x-rkyv", "x-use-cache", "x-dd-feature-flags-capabilities") + + fun matchesRequest(expected: Request, actual: Request): Boolean = try { + scope(expected) == scope(actual) && + expected.header(NONCE_HEADER) == actual.header(NONCE_HEADER) + } catch (_: IllegalArgumentException) { + false + } + + fun scope(request: Request): String = requestTranscript( + request, + includeNonce = false + ).signingBytes().signingBytes().sha256().hex() + + fun unverifiedScope(request: Request): String? = try { + requestTranscript(request, includeNonce = false, validateSigning = false) + .signingBytes().signingBytes().sha256().hex() + } catch (_: IllegalArgumentException) { + null + } + + @Suppress("CyclomaticComplexMethod") // Preserve the exact wire field order. + private fun requestTranscript( + request: Request, + includeNonce: Boolean = true, + validateSigning: Boolean = true + ): Buffer { + val url = request.url + val nonce = if (validateSigning) single(request.headers, NONCE_HEADER) else "" + if (validateSigning) { + signingCheck( + request.method == "POST" && url.isHttps && url.username.isEmpty() && url.password.isEmpty() && + url.fragment == null + ) + signingCheck(single(request.headers, PREFIX + "signature-version") == "3") + signingCheck(nonce.matches(Regex("[0-9a-f]{32}"))) + val capabilities = single(request.headers, "x-dd-feature-flags-capabilities") + signingCheck(CAPABILITY in capabilities.split(',').map { it.trim() }) + } + val body = Buffer() + try { + request.body?.writeTo(body) + } catch (_: IOException) { + signingFailure() + } + signingCheck(!validateSigning || body.size <= MAX_REQUEST_BYTES) + val result = Buffer().writeUtf8("datadog.feature-flags.precomputed-assignments.v3").writeByte(0) + val host = if (url.host.contains(':')) "[${url.host}]" else url.host + val authority = host + if (url.port == 443) "" else ":${url.port}" + listOf( + request.method.uppercase(Locale.US), + url.scheme, + authority, + url.encodedPath, + url.encodedQuery?.let { "?$it" } ?: "" + ) + .forEach { result.lp(it.toByteArray(Charsets.UTF_8)) } + if (includeNonce) result.lp(hex(nonce)) + result.write(body.signingBytes().signingBytes().sha256()) + result.write(single(request.headers, "dd-client-token").toByteArray(Charsets.UTF_8).signingBytes().sha256()) + SEMANTIC_HEADERS.forEach { name -> + val values = request.headers.values(name) + signingCheck(values.size <= 1) + result.writeByte(if (values.isEmpty()) 0 else 1) + if (values.isNotEmpty()) result.lp(values[0].toByteArray(Charsets.UTF_8)) + } + val authorization = request.headers.values("authorization") + signingCheck(authorization.size <= 1) + result.writeByte(if (authorization.isEmpty()) 0 else 1) + if (authorization.isNotEmpty()) { + result.write( + authorization[0].toByteArray(Charsets.UTF_8).signingBytes().sha256() + ) + } + return result + } + + private fun Buffer.lp(bytes: ByteArray) { + writeInt(bytes.size) + write(bytes) + } + + private fun single(headers: Headers, name: String): String { + val values = headers.values(name) + signingCheck(values.size == 1) + return values[0] + } + + private fun base64(value: String, max: Int): ByteArray { + signingCheck(value.isNotEmpty() && value.length <= ((max + 2) / 3) * 4) + val decoded = value.decodeBase64() ?: signingFailure() + signingCheck(decoded.size <= max && decoded.base64() == value) + return decoded.toByteArray() + } + + private fun seconds(value: String): Long { + signingCheck(value.matches(Regex("0|[1-9][0-9]{0,15}"))) + return (value.toLongOrNull() ?: signingFailure()).also { signingCheck(it <= 9007199254740991L) } + } + + private fun strictSignature(bytes: ByteArray) { + val values = SigningDer.read(bytes).sequence() + signingCheck(values.size == 2) + values.forEach { + signingCheck(it.tag == 2 && it.value.isNotEmpty() && it.value[0].toInt() and 128 == 0) + val start = if (it.value[0] == 0.toByte()) 1 else 0 + signingCheck( + it.value.size - start in 1..32 && + it.value.any { byte -> byte != 0.toByte() } + ) + } + } + + private fun identifier(bytes: ByteArray, authority: Boolean): ByteArray? { + val node = SigningDer.read(bytes) + if (!authority) { + signingCheck(node.tag == 4 && node.value.isNotEmpty()) + return node.value + } + val fields = node.sequence() + signingCheck(fields.size <= 1) + return fields.firstOrNull()?.also { signingCheck(it.tag == 0x80 && it.value.isNotEmpty()) }?.value + } + + private fun hex(value: String): ByteArray = signingHex(value) + } +} diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningCrypto.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningCrypto.kt new file mode 100644 index 0000000000..92d4adf008 --- /dev/null +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningCrypto.kt @@ -0,0 +1,86 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.internal.signing + +import okio.Buffer +import okio.ByteString +import okio.ByteString.Companion.decodeHex +import okio.ByteString.Companion.toByteString +import java.io.ByteArrayInputStream +import java.io.IOException +import java.security.GeneralSecurityException +import java.security.ProviderException +import java.security.PublicKey +import java.security.Signature +import java.security.cert.CertificateFactory +import java.security.cert.X509Certificate + +internal fun signingCheck(condition: Boolean) { + if (!condition) signingFailure() +} + +@Suppress("ThrowingInternalException") // Every signing entrypoint catches this bounded validation failure. +internal fun signingFailure(): Nothing = throw IllegalArgumentException("Invalid response signing v3 input") + +internal fun ByteArray.signingBytes(): ByteString = try { + toByteString() +} catch (_: IndexOutOfBoundsException) { + signingFailure() +} catch (_: IllegalArgumentException) { + signingFailure() +} + +internal fun Buffer.signingBytes(): ByteArray = try { + readByteArray() +} catch (_: IOException) { + signingFailure() +} catch (_: IllegalArgumentException) { + signingFailure() +} + +internal fun signingHex(value: String): ByteArray = try { + value.decodeHex().toByteArray() +} catch (_: IllegalArgumentException) { + signingFailure() +} + +internal fun signingSlice(value: ByteArray, start: Int, end: Int): ByteArray { + signingCheck(start >= 0 && end >= start && end <= value.size) + return try { + ByteArray(end - start) { value[start + it] } + } catch (_: NegativeArraySizeException) { + signingFailure() + } +} + +internal fun signingCertificate(bytes: ByteArray): X509Certificate = try { + CertificateFactory.getInstance("X.509").generateCertificate(ByteArrayInputStream(bytes)) as X509Certificate +} catch (_: GeneralSecurityException) { + signingFailure() +} catch (_: ProviderException) { + signingFailure() +} + +internal fun verifyCertificate(certificate: X509Certificate, key: PublicKey): Boolean = try { + certificate.verify(key) + true +} catch (_: GeneralSecurityException) { + false +} catch (_: ProviderException) { + false +} + +internal fun verifySignature(key: PublicKey, transcript: ByteArray, signature: ByteArray): Boolean = try { + val verifier = Signature.getInstance("SHA256withECDSA") + verifier.initVerify(key) + verifier.update(transcript) + verifier.verify(signature) +} catch (_: GeneralSecurityException) { + false +} catch (_: ProviderException) { + false +} diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningDer.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningDer.kt new file mode 100644 index 0000000000..19a3adaaec --- /dev/null +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningDer.kt @@ -0,0 +1,101 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.internal.signing + +/** Bounded, canonical DER envelope reader for the restricted signing certificate profile. */ +@Suppress("MagicNumber") // DER tags, length forms and bit masks are wire constants. +internal class SigningDer private constructor( + val tag: Int, + val encoded: ByteArray, + val value: ByteArray, + val children: List +) { + fun sequence(): List { + signingCheck(tag == 0x30) + return children + } + + companion object { + fun read(bytes: ByteArray): SigningDer { + val budget = intArrayOf(512) + val (node, end) = parse(bytes, 0, bytes.size, 0, budget) + signingCheck(end == bytes.size) + return node + } + + private fun parse( + bytes: ByteArray, + start: Int, + limit: Int, + depth: Int, + budget: IntArray + ): Pair { + signingCheck(depth <= 24 && --budget[0] >= 0 && start + 2 <= limit) + var offset = start + val tag = bytes[offset++].toInt() and 255 + signingCheck(tag != 0 && tag and 31 != 31) + var length = bytes[offset++].toInt() and 255 + if (length >= 128) { + val count = length and 127 + signingCheck(count in 1..2 && offset + count <= limit && bytes[offset] != 0.toByte()) + length = 0 + repeat(count) { length = (length shl 8) or (bytes[offset++].toInt() and 255) } + signingCheck(length >= 128 && (count == 1 || length >= 256)) + } + signingCheck(length <= limit - offset) + val end = offset + length + val value = signingSlice(bytes, offset, end) + val children = mutableListOf() + if (tag and 32 != 0) { + while (offset < end) { + val child = parse(bytes, offset, end, depth + 1, budget) + children.add(child.first) + offset = child.second + } + } + canonical(tag, value, children) + return SigningDer(tag, signingSlice(bytes, start, end), value, children) to end + } + + private fun canonical(tag: Int, value: ByteArray, children: List) { + when (tag) { + 1 -> signingCheck(value.size == 1 && (value[0] == 0.toByte() || value[0] == (-1).toByte())) + 2 -> { + signingCheck(value.isNotEmpty()) + if (value.size > 1) { + signingCheck(!(value[0] == 0.toByte() && value[1].toInt() and 128 == 0)) + signingCheck(!(value[0] == (-1).toByte() && value[1].toInt() and 128 != 0)) + } + } + 3 -> { + signingCheck(value.isNotEmpty()) + val unused = value[0].toInt() + signingCheck(unused in 0..7 && (value.size > 1 || unused == 0)) + signingCheck(value[value.size - 1].toInt() and ((1 shl unused) - 1) == 0) + } + 5 -> signingCheck(value.isEmpty()) + 6 -> { + signingCheck(value.isNotEmpty() && value[value.size - 1].toInt() and 128 == 0) + value.forEachIndexed { i, b -> + signingCheck(!(b == 128.toByte() && (i == 0 || value[i - 1].toInt() and 128 == 0))) + } + } + 23 -> signingCheck(value.toString(Charsets.US_ASCII).matches(Regex("[0-9]{12}Z"))) + 24 -> signingCheck(value.toString(Charsets.US_ASCII).matches(Regex("[0-9]{14}Z"))) + 0x31 -> children.zipWithNext().forEach { (a, b) -> signingCheck(compare(a.encoded, b.encoded) <= 0) } + } + } + + private fun compare(a: ByteArray, b: ByteArray): Int { + for (i in 0 until minOf(a.size, b.size)) { + val difference = (a[i].toInt() and 255) - (b[i].toInt() and 255) + if (difference != 0) return difference + } + return a.size - b.size + } + } +} diff --git a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt new file mode 100644 index 0000000000..8ce3f9edd4 --- /dev/null +++ b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt @@ -0,0 +1,582 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.internal.signing + +import com.datadog.android.api.InternalLogger +import com.datadog.android.api.context.DatadogContext +import com.datadog.android.api.feature.Feature +import com.datadog.android.api.feature.FeatureScope +import com.datadog.android.api.storage.datastore.DataStoreHandler +import com.datadog.android.core.InternalSdkCore +import com.datadog.android.flags.FlagsConfiguration +import com.datadog.android.flags.FlagsStateListener +import com.datadog.android.flags.ResponseSigningMode +import com.datadog.android.flags.internal.DatadogFlagsClient +import com.datadog.android.flags.internal.FlagsStateManager +import com.datadog.android.flags.internal.evaluation.EvaluationsManager +import com.datadog.android.flags.internal.model.FlagsStateEntry +import com.datadog.android.flags.internal.net.PrecomputedAssignmentsDownloader +import com.datadog.android.flags.internal.net.PrecomputedAssignmentsRequestFactory +import com.datadog.android.flags.internal.repository.DefaultFlagsRepository +import com.datadog.android.flags.internal.repository.FlagsRepository +import com.datadog.android.flags.internal.repository.SigningFlagsRepository +import com.datadog.android.flags.internal.repository.net.PrecomputeMapper +import com.datadog.android.flags.model.EvaluationContext +import com.datadog.android.flags.model.FlagsClientState +import com.datadog.android.flags.utils.forge.ForgeConfigurator +import com.datadog.android.internal.FeatureContextKeys +import com.datadog.android.internal.rum.RumContext +import com.datadog.android.internal.time.TimeProvider +import com.datadog.android.internal.utils.DDCoreStateHolder +import com.google.gson.JsonObject +import com.google.gson.JsonParser +import fr.xgouchet.elmyr.annotation.Forgery +import fr.xgouchet.elmyr.junit5.ForgeConfiguration +import fr.xgouchet.elmyr.junit5.ForgeExtension +import okhttp3.Call +import okhttp3.Headers +import okhttp3.Protocol +import okhttp3.Request +import okhttp3.Response +import okhttp3.ResponseBody.Companion.toResponseBody +import okio.Buffer +import okio.ByteString.Companion.decodeBase64 +import okio.ByteString.Companion.decodeHex +import okio.ByteString.Companion.toByteString +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.EnumSource +import org.mockito.kotlin.any +import org.mockito.kotlin.anyOrNull +import org.mockito.kotlin.argumentCaptor +import org.mockito.kotlin.doAnswer +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.times +import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoInteractions +import org.mockito.kotlin.whenever +import java.io.ByteArrayOutputStream +import java.io.DataOutputStream +import java.security.KeyFactory +import java.security.MessageDigest +import java.security.Signature +import java.security.spec.PKCS8EncodedKeySpec +import java.util.concurrent.ExecutorService + +@ExtendWith(ForgeExtension::class) +@ForgeConfiguration(ForgeConfigurator::class) +internal class ResponseSigningClientTest { + @Forgery lateinit var fakeDatadogContext: DatadogContext + private val mockLogger: InternalLogger = mock() + private val mockCore: InternalSdkCore = mock() + private val mockStore: DataStoreHandler = mock() + private val mockExecutor: ExecutorService = mock() + private val queue = ArrayDeque() + private val corpus = resource() + private val vector = corpus.getAsJsonArray("cases")[0].asJsonObject + private val originalNow = vector["now"].asLong + private var now = originalNow + private val coreSigningContext = ResponseSigningContext() + private var cancelledChecks = 0 + private val requests = mutableListOf() + private var responseKind = "valid" + private var endpoint = "https://flags.example.test/assignments?dd_env=test" + private var beforeResponse: () -> Unit = {} + private lateinit var testedClient: DatadogFlagsClient + private lateinit var repository: FlagsRepository + + @BeforeEach + fun `set up`() { + fakeDatadogContext = fakeDatadogContext.copy(source = "android") + whenever(mockCore.internalLogger) doReturn mockLogger + val mockTimeProvider = mock { + on { getDeviceTimestampMillis() } doAnswer { now * 1000 } + } + whenever(mockCore.timeProvider) doReturn mockTimeProvider + whenever(mockCore.getFeature(Feature.FLAGS_FEATURE_NAME)) doReturn mock() + whenever(mockCore.getDatadogContext(setOf(Feature.RUM_FEATURE_NAME))) doAnswer { fakeDatadogContext } + whenever(mockCore.source) doReturn "android" + whenever(mockExecutor.execute(any())) doAnswer { queue.add(it.getArgument(0)); Unit } + } + + @ParameterizedTest + @EnumSource(ResponseSigningMode::class) + fun `M evaluate real signed responses W setEvaluationContext() {all modes}`(mode: ResponseSigningMode) { + // Given + create(mode) + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isTrue() + assertThat(requests).hasSize(1) + assertThat(requests.single().header(ResponseSigningVerifier.PREFIX + "signature-version")) + .isEqualTo(if (mode == ResponseSigningMode.OFF) null else "3") + if (mode == ResponseSigningMode.REQUIRED) verifyNoInteractions(mockStore) + } + + @ParameterizedTest + @EnumSource(ResponseSigningMode::class, names = ["OBSERVE", "REQUIRED"]) + fun `M apply optional proof policy W setEvaluationContext() {tampered body}`(mode: ResponseSigningMode) { + // Given + create(mode) + responseKind = "tampered" + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isEqualTo( + mode == ResponseSigningMode.OBSERVE + ) + assertThat(requests).hasSize(1) + } + + @ParameterizedTest + @EnumSource(ResponseSigningMode::class, names = ["OBSERVE", "REQUIRED"]) + fun `M apply optional proof policy W setEvaluationContext() {unsigned}`(mode: ResponseSigningMode) { + // Given + create(mode) + responseKind = "unsigned" + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isEqualTo( + mode == ResponseSigningMode.OBSERVE + ) + assertThat(requests).hasSize(1) + } + + @ParameterizedTest + @EnumSource(ResponseSigningMode::class, names = ["OBSERVE", "REQUIRED"]) + fun `M reject redirects W setEvaluationContext() {custom transport follows}`(mode: ResponseSigningMode) { + // Given + create(mode) + responseKind = "redirect" + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isFalse() + assertThat(requests).hasSize(1) + } + + @ParameterizedTest + @EnumSource(ResponseSigningMode::class, names = ["OBSERVE", "REQUIRED"]) + fun `M preserve HTTP errors W setEvaluationContext() {403 with signed headers}`(mode: ResponseSigningMode) { + // Given + create(mode) + responseKind = "403" + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isFalse() + assertThat(requests).hasSize(1) + } + + @Test + fun `M freeze request context W setEvaluationContext() {caller mutates attributes}`() { + // Given + create(ResponseSigningMode.REQUIRED) + val attributes = mutableMapOf("plan" to "before") + // When + testedClient.setEvaluationContext(EvaluationContext("subject", attributes), null) + attributes["plan"] = "after" + queue.removeFirst().run() + // Then + assertThat(repository.getEvaluationContext()?.attributes).containsEntry("plan", "before") + val body = Buffer().also { requests.single().body?.writeTo(it) }.readUtf8() + assertThat(body).contains("before").doesNotContain("after") + } + + @Test + fun `M discard superseded responses W setEvaluationContext() {new context during fetch}`() { + // Given + create(ResponseSigningMode.REQUIRED) + beforeResponse = { + beforeResponse = {} + testedClient.setEvaluationContext(EvaluationContext("new-subject"), null) + } + // When + testedClient.setEvaluationContext(EvaluationContext("old-subject"), null) + queue.removeFirst().run() + // Then + assertThat(repository.getEvaluationContext()).isNull() + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isFalse() + queue.removeFirst().run() + assertThat(repository.getEvaluationContext()?.targetingKey).isEqualTo("new-subject") + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isTrue() + } + + @Test + fun `M enforce original expiry on every read W resolveBooleanValue() {required cache}`() { + // Given + create(ResponseSigningMode.REQUIRED) + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // When + now += 300 + val actual = testedClient.resolveBooleanValue("critical-demo", false) + // Then + assertThat(actual).isFalse() + assertThat(repository.hasFlags()).isFalse() + assertThat(repository.getFlagsSnapshot()).isEmpty() + assertThat(repository.getPrecomputedFlag("critical-demo")).isNull() + assertThat(repository.getEvaluationContext()).isNull() + assertThat(repository.hasLoadedFlagsForContext(EvaluationContext("subject"))).isFalse() + verifyNoInteractions(mockStore) + } + + @Test + fun `M reject changed token fallback W setEvaluationContext() {required failed fetch}`() { + // Given + create(ResponseSigningMode.REQUIRED) + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + fakeDatadogContext = fakeDatadogContext.copy(clientToken = "different-token") + responseKind = "unsigned" + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isFalse() + } + + @Test + fun `M fail locally W setEvaluationContext() {required without anchor}`() { + // Given + create(ResponseSigningMode.REQUIRED, emptyList()) + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(requests).isEmpty() + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isFalse() + verifyNoInteractions(mockStore) + } + + @Test + fun `M retain verified fallback W setEvaluationContext() {unsigned observation then error}`() { + // Given + create(ResponseSigningMode.OBSERVE) + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + responseKind = "unsigned-false" + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + assertThat(testedClient.resolveBooleanValue("critical-demo", true)).isFalse() + responseKind = "403" + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isTrue() + } + + @ParameterizedTest + @EnumSource(ResponseSigningMode::class, names = ["OBSERVE", "REQUIRED"]) + fun `M preserve ordinary observe behavior W setEvaluationContext() {unsupported HTTP endpoint}`( + mode: ResponseSigningMode + ) { + // Given + endpoint = "http://flags.example.test/assignments" + create(mode) + responseKind = "unsigned" + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isEqualTo( + mode == ResponseSigningMode.OBSERVE + ) + assertThat(requests).hasSize(if (mode == ResponseSigningMode.OBSERVE) 1 else 0) + } + + @Test + fun `M start empty W resolveBooleanValue() {new required client cannot load persistence}`() { + // Given + create(ResponseSigningMode.REQUIRED) + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + create(ResponseSigningMode.REQUIRED) + // When + val actual = testedClient.resolveBooleanValue("critical-demo", false) + // Then + assertThat(actual).isFalse() + verifyNoInteractions(mockStore) + } + + @Test + fun `M defer persistence W resolveBooleanValue() {observe scope not established}`() { + // Given + create(ResponseSigningMode.OBSERVE) + // When + val actual = testedClient.resolveBooleanValue("critical-demo", false) + // Then + assertThat(actual).isFalse() + verifyNoInteractions(mockStore) + } + + @Test + fun `M scope persistence without nonce churn W setEvaluationContext() {observe environment changes}`() { + // Given + create(ResponseSigningMode.OBSERVE) + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + fakeDatadogContext = fakeDatadogContext.copy(env = "other-environment") + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + val keys = argumentCaptor() + verify(mockStore, times(2)).value(keys.capture(), anyOrNull(), any(), any()) + assertThat(keys.allValues).hasSize(2).doesNotHaveDuplicates() + assertThat(keys.allValues).allMatch { it.startsWith("flags-state-signing-test-") && it.length > 64 } + } + + @ParameterizedTest + @EnumSource(ResponseSigningMode::class, names = ["OBSERVE", "REQUIRED"]) + fun `M reject changed emitted token proof W setEvaluationContext()`(mode: ResponseSigningMode) { + // Given + create(mode) + responseKind = "emitted-token" + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isEqualTo( + mode == ResponseSigningMode.OBSERVE + ) + assertThat(requests).hasSize(1) + } + + @Test + fun `M invalidate cached app scope W resolveBooleanValue() {RUM app changes}`() { + // Given + updateApp("application-a") + create(ResponseSigningMode.REQUIRED) + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // When + updateApp("application-b") + val actual = testedClient.resolveBooleanValue("critical-demo", false) + // Then + assertThat(actual).isFalse() + assertThat(requests).hasSize(1) + } + + @Test + fun `M discard old app response W setEvaluationContext() {RUM changes during fetch}`() { + // Given + updateApp("application-a") + create(ResponseSigningMode.REQUIRED) + beforeResponse = { beforeResponse = {}; updateApp("application-b") } + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isFalse() + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isTrue() + assertThat(requests.last().header("dd-application-id")).isEqualTo("application-b") + } + + @Test + fun `M retain current app proof W resolveBooleanValue() {RUM session update}`() { + // Given + updateApp("application-a") + create(ResponseSigningMode.REQUIRED) + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // When + updateApp("application-a", "another-session") + val actual = testedClient.resolveBooleanValue("critical-demo", false) + // Then + assertThat(actual).isTrue() + } + + @Test + fun `M discard stopped feature response W setEvaluationContext()`() { + // Given + create(ResponseSigningMode.REQUIRED) + beforeResponse = { coreSigningContext.stop() } + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isFalse() + assertThat(repository.getFlagsSnapshot()).isEmpty() + } + + @ParameterizedTest + @EnumSource(ResponseSigningMode::class, names = ["OBSERVE", "REQUIRED"]) + fun `M discard cancellation after verification W setEvaluationContext()`(mode: ResponseSigningMode) { + // Given + create(mode) + responseKind = "cancelled" + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isFalse() + assertThat(cancelledChecks).isEqualTo(2) + } + + @Test + fun `M retain configured anchor W setEvaluationContext() {caller clears original list}`() { + // Given + val roots = mutableListOf(corpus["anchor_der_base64"].asString) + create(ResponseSigningMode.REQUIRED, roots) + roots.clear() + // When + testedClient.setEvaluationContext(EvaluationContext("subject"), null) + queue.removeFirst().run() + // Then + assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isTrue() + } + + private fun updateApp(applicationId: String, sessionId: String = "session") { + val context = mapOf(FeatureContextKeys.RUM_CONTEXT to RumContext(applicationId, sessionId)) + fakeDatadogContext = fakeDatadogContext.copy(featuresContext = mapOf(Feature.RUM_FEATURE_NAME to context)) + coreSigningContext.onContextUpdate(Feature.RUM_FEATURE_NAME, context) + } + + private fun create(mode: ResponseSigningMode, roots: List = listOf(corpus["anchor_der_base64"].asString)) { + val configuration = FlagsConfiguration.Builder().trackExposures(false).trackEvaluations(false) + .rumIntegrationEnabled(false).responseSigning(mode, roots).build() + val signing = if (mode == + ResponseSigningMode.OFF + ) { + null + } else { + ResponseSigningState(configuration.responseSigning, mockLogger, coreSigningContext) { now } + } + fun ordinary(scope: String): FlagsRepository = DefaultFlagsRepository( + mockCore, + "signing-test-$scope", + mockStore, + persistenceLoadTimeoutMs = 0 + ) + repository = signing?.let { SigningFlagsRepository(::ordinary, it, Runnable::run) } ?: ordinary("off") + + val transport = Call.Factory { request -> + requests.add(request) + mock { + on { execute() } doAnswer { beforeResponse(); response(request) } + on { isCanceled() } doAnswer { responseKind == "cancelled" && ++cancelledChecks > 1 } + } + } + val reader = PrecomputedAssignmentsDownloader( + transport, + mockLogger, + PrecomputedAssignmentsRequestFactory(mockLogger, endpoint), + signing + ) + val stateManager = + FlagsStateManager(DDCoreStateHolder.create(FlagsClientState.NotReady, FlagsStateListener::onStateChanged)) + val manager = EvaluationsManager( + mockCore, mockExecutor, mockLogger, repository, reader, PrecomputeMapper(mockLogger), stateManager, + initializationTimeoutMs = null, signing = signing, initializationTimeoutScheduler = { _, _ -> {} } + ) + testedClient = + DatadogFlagsClient(mockCore, manager, repository, configuration, mock(), mock(), null, stateManager, false) + } + + private fun response(request: Request): Response { + val json = """ + {"data":{"attributes":{"flags":{"critical-demo":{ + "variationType":"boolean","variationValue":"true","doLog":false, + "allocationKey":"test","variationKey":"on","reason":"TARGETING_MATCH","extraLogging":{} + }}}}} + """.trimIndent() + val headers = signedHeaders(request, json.toByteArray()) + val response = Response.Builder().request(request).protocol(Protocol.HTTP_1_1).message("test") + .code(if (responseKind == "403") 403 else 200) + .headers(if (responseKind.startsWith("unsigned")) Headers.Builder().build() else headers) + .body( + when (responseKind) { + "tampered" -> (json + " ").toResponseBody() + "unsigned-false" -> json.replace("\"true\"", "\"false\"").toResponseBody() + else -> json.toResponseBody() + } + ) + if (responseKind == "emitted-token") { + response.request(request.newBuilder().header("dd-client-token", "different-emitted-token").build()) + } + if (responseKind == "redirect") { + response.priorResponse( + Response.Builder().request(request).protocol(Protocol.HTTP_1_1).code(302).message("redirect").build() + ) + } + return response.build() + } + + private fun signedHeaders(request: Request, body: ByteArray): Headers { + if (request.header(ResponseSigningVerifier.PREFIX + "request-nonce") == null) return Headers.Builder().build() + val credential = vector.getAsJsonObject("credential") + val leaf = bytes(credential["certificate_der_base64"].asString) + val intermediate = bytes(credential["intermediate_der_base64"].asString) + val output = ByteArrayOutputStream() + val transcript = DataOutputStream(output) + transcript.write("datadog.feature-flags.precomputed-assignments.v3\u0000".toByteArray()) + fun lp(bytes: ByteArray) { transcript.writeInt(bytes.size); transcript.write(bytes) } + val url = request.url + listOf(request.method, url.scheme, url.host, url.encodedPath, url.encodedQuery?.let { "?$it" } ?: "") + .forEach { lp(it.toByteArray()) } + lp(checkNotNull(request.header(ResponseSigningVerifier.PREFIX + "request-nonce")).decodeHex().toByteArray()) + transcript.write(sha(Buffer().also { request.body?.writeTo(it) }.readByteArray())) + transcript.write(sha(checkNotNull(request.header("dd-client-token")).toByteArray())) + listOf( + "content-type", + "dd-application-id", + "x-rkyv", + "x-use-cache", + "x-dd-feature-flags-capabilities" + ).forEach { + val header = request.header(it) + transcript.writeByte(if (header == null) 0 else 1) + if (header != null) lp(header.toByteArray()) + } + transcript.writeByte(0) + transcript.writeShort(200) + transcript.writeLong(originalNow) + transcript.writeLong(originalNow + 300) + transcript.writeLong(body.size.toLong()) + transcript.write(sha(body)); transcript.write(sha(leaf)); transcript.write(sha(intermediate)) + val key = KeyFactory.getInstance( + "EC" + ).generatePrivate(PKCS8EncodedKeySpec(bytes(credential["private_key_pkcs8_der_base64"].asString))) + val signature = Signature.getInstance("SHA256withECDSA").apply { + initSign(key); update(output.toByteArray()) + }.sign() + return Headers.Builder() + .add(ResponseSigningVerifier.PREFIX + "signature-version", "3") + .add(ResponseSigningVerifier.PREFIX + "signing-certificate", credential["certificate_der_base64"].asString) + .add( + ResponseSigningVerifier.PREFIX + "signing-intermediate", + credential["intermediate_der_base64"].asString + ) + .add(ResponseSigningVerifier.PREFIX + "certificate-id", sha(leaf).toByteString().hex()) + .add(ResponseSigningVerifier.PREFIX + "issued-at", originalNow.toString()) + .add(ResponseSigningVerifier.PREFIX + "expires-at", (originalNow + 300).toString()) + .add(ResponseSigningVerifier.PREFIX + "signature", signature.toByteString().base64()).build() + } + + private fun sha(bytes: ByteArray): ByteArray = MessageDigest.getInstance("SHA-256").digest(bytes) + private fun bytes(value: String): ByteArray = checkNotNull(value.decodeBase64()).toByteArray() + private fun resource(): JsonObject = checkNotNull(javaClass.classLoader) + .getResourceAsStream("response-signing-v3/corpus.json").let { checkNotNull(it) }.bufferedReader() + .use { JsonParser.parseReader(it).asJsonObject } +} diff --git a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningConstructionTest.kt b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningConstructionTest.kt new file mode 100644 index 0000000000..825ca00779 --- /dev/null +++ b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningConstructionTest.kt @@ -0,0 +1,85 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.internal.signing + +import android.content.Context +import android.content.pm.ApplicationInfo +import com.datadog.android.api.InternalLogger +import com.datadog.android.api.feature.Feature +import com.datadog.android.api.feature.FeatureContextUpdateReceiver +import com.datadog.android.api.feature.FeatureScope +import com.datadog.android.api.feature.FeatureSdkCore +import com.datadog.android.api.storage.datastore.DataStoreHandler +import com.datadog.android.flags.FlagsClient +import com.datadog.android.flags.FlagsConfiguration +import com.datadog.android.flags.ResponseSigningMode +import com.datadog.android.flags.internal.DatadogFlagsClient +import com.datadog.android.flags.internal.FlagsFeature +import com.datadog.android.internal.time.TimeProvider +import okhttp3.Call +import okhttp3.OkHttpClient +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.EnumSource +import org.mockito.kotlin.any +import org.mockito.kotlin.argumentCaptor +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever +import java.util.concurrent.ExecutorService + +internal class ResponseSigningConstructionTest { + @ParameterizedTest + @EnumSource(ResponseSigningMode::class) + fun `M configure real core factory and scope listener W build() {explicit opt in}`(mode: ResponseSigningMode) { + // Given + val mockLogger = mock() + val mockTime = mock() + val mockExecutor = mock() + val mockCalls = mock() + val mockStore = mock() + val mockCore = mock { + on { internalLogger } doReturn mockLogger + on { timeProvider } doReturn mockTime + on { createSingleThreadExecutorService(any()) } doReturn mockExecutor + on { createOkHttpCallFactory(any()) } doReturn mockCalls + } + val feature = FlagsFeature( + mockCore, + FlagsConfiguration.Builder().trackEvaluations(false).responseSigning(mode, emptyList()).build() + ) + val mockScope = mock { + on { unwrap() } doReturn feature + on { dataStore } doReturn mockStore + } + whenever(mockCore.getFeature(Feature.FLAGS_FEATURE_NAME)) doReturn mockScope + val applicationInfo = ApplicationInfo() + val mockContext = mock { on { this.applicationInfo } doReturn applicationInfo } + feature.onInitialize(mockContext) + // When + val result = FlagsClient.Builder(sdkCore = mockCore).build() + // Then + assertThat(result).isInstanceOf(DatadogFlagsClient::class.java) + val configuration = argumentCaptor Unit>() + verify(mockCore).createOkHttpCallFactory(configuration.capture()) + val transport = OkHttpClient.Builder().apply(configuration.lastValue).build() + assertThat(transport.followRedirects).isEqualTo(mode == ResponseSigningMode.OFF) + assertThat(transport.followSslRedirects).isEqualTo(mode == ResponseSigningMode.OFF) + if (mode == ResponseSigningMode.OFF) { + verify(mockCore, never()).setContextUpdateReceiver(any()) + } else { + val receiver = argumentCaptor() + verify(mockCore).setContextUpdateReceiver(receiver.capture()) + assertThat(receiver.lastValue).isSameAs(feature.signingContext) + feature.onStop() + verify(mockCore).removeContextUpdateReceiver(receiver.lastValue) + assertThat(checkNotNull(feature.signingContext).snapshot().active).isFalse() + } + } +} diff --git a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt new file mode 100644 index 0000000000..2a79030aaa --- /dev/null +++ b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt @@ -0,0 +1,81 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.android.flags.internal.signing + +import com.google.gson.JsonArray +import com.google.gson.JsonObject +import com.google.gson.JsonParser +import okhttp3.Headers +import okhttp3.Request +import okhttp3.RequestBody.Companion.toRequestBody +import okio.ByteString.Companion.decodeBase64 +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.DynamicTest +import org.junit.jupiter.api.TestFactory + +internal class ResponseSigningVerifierTest { + @TestFactory + fun `M match frozen independent vectors W verify()`(): List { + val corpus = resource("corpus.json") + val cases = corpus.getAsJsonArray("cases") + check(cases.size() == 43) + check(cases.count { it.asJsonObject["expected_accept"].asBoolean } == 6) + return cases.map { entry -> + val vector = entry.asJsonObject + DynamicTest.dynamicTest(vector["id"].asString) { + // Given + val testedVerifier = ResponseSigningVerifier(listOf(corpus["anchor_der_base64"].asString)) + // When + val result = verify(testedVerifier, vector) + // Then + assertThat(result != null).isEqualTo(vector["expected_accept"].asBoolean) + } + } + } + + @TestFactory + fun `M reject nonminimal named bits W verify()`(): List { + val corpus = resource("key-usage-supplement.json") + return corpus.getAsJsonArray("cases").map { entry -> + val vector = entry.asJsonObject + DynamicTest.dynamicTest(vector["id"].asString) { + // Given + val testedVerifier = ResponseSigningVerifier(listOf(corpus["anchor"].asString)) + // When + val result = verify(testedVerifier, vector) + // Then + assertThat(result != null).isEqualTo(vector["expected_accept"].asBoolean) + } + } + } + + private fun verify(verifier: ResponseSigningVerifier, vector: JsonObject): VerifiedResponse? { + val input = vector.getAsJsonObject("request") + val request = Request.Builder().url(input["url"].asString) + .headers(headers(input.getAsJsonArray("headers"))) + .method(input["method"].asString, bytes(input["body_base64"].asString).toRequestBody()) + .build() + val response = vector.getAsJsonObject("response") + return verifier.verify( + request, + response["status"].asInt, + headers(response.getAsJsonArray("headers")), + bytes(response["body_base64"].asString), + vector["now"].asLong + ) + } + + private fun headers(values: JsonArray): Headers = Headers.Builder().apply { + values.forEach { add(it.asJsonArray[0].asString, it.asJsonArray[1].asString) } + }.build() + + private fun bytes(value: String): ByteArray = checkNotNull(value.decodeBase64()).toByteArray() + + private fun resource(name: String): JsonObject = checkNotNull(javaClass.classLoader) + .getResourceAsStream("response-signing-v3/$name").let { checkNotNull(it) } + .bufferedReader().use { JsonParser.parseReader(it).asJsonObject } +} diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/README.md b/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/README.md new file mode 100644 index 0000000000..1869c00f39 --- /dev/null +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/README.md @@ -0,0 +1,13 @@ +# Frozen synthetic response signing v3 vectors + +`corpus.json` is an unchanged copy of the independently generated shared corpus, +SHA256 `cc444ec8a2890430fa8dd8aee6cbde5a92d388ee55938596aac67891cfc099b6`. +Profile SHA256 `15649074caeb9a51ce233eb0d29d5725be6b33ee1c2497493f33acf992adff81`. +The native verifier runs all 43 response cases (6 accept, 37 reject). The two +server private-key cases are outside the SDK verifier profile. Private leaf +credentials in this synthetic corpus are public test material, never production. + +`key-usage-supplement.json`, SHA256 +`e6e2bc29ab28b490a1e17bb7c46a9342cf9496d9962c04aa5ca0e3ce6b08d347`, independently +signs canonical and nonminimal named-bit-string KU encodings. Its expected results +follow X.690 11.2.2; it contains no private keys. Neither fixture is rewritten by tests. diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/corpus.json b/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/corpus.json new file mode 100644 index 0000000000..916678b80e --- /dev/null +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/corpus.json @@ -0,0 +1,3656 @@ +{ + "schema_version": 1, + "profile_sha256": "15649074caeb9a51ce233eb0d29d5725be6b33ee1c2497493f33acf992adff81", + "synthetic": true, + "anchor_der_base64": "MIIB9jCCAZygAwIBAgIUPBQ+Rper73pEWaljEpd1HZ3Ss6owCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MDkxMTAwMDAwMFoXDTM2MDkwODAzMTgwOFowRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKjmS3FG7yb7582CUFRXqR2rgHLs41OeR90rGNHqemWDm1pLlRKcj9hC8C9LGf10vNqdPJTI05q/0qawGCGpTtqNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBFfPeond2MpYKMRw/KVBchGX3nZMB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIAPLlSH4z1ZSTW0xp0XEa+niiLdWgrf4NI7RAJqbj+9ZAiEAxY3C7+KdFemR+0NcMtzTRhBc8PYg9fsGWCgA3aFePrI=", + "cases": [ + { + "id": "valid-current", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": true, + "rejection_reason": null, + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEA2TKKlsykzeRRr53itJzRm7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJEjQ1uYU00SWBMZM8hzghKcDWDngnZlQckywsE8cj38JCh1t7QrLXMykh/oz4L1lqveAsaZAmpZB8t0ePxN7ROA==", + "credential": { + "version": 3, + "generation": "valid-current", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", + "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", + "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + } + }, + { + "id": "valid-rotated-leaf", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "a57312935fdf35dec444ab43163c7cd9" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwjCCAWegAwIBAgIUCYrmvIOSVvIhkvPst0TDBpNZxf4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyODAwMDAwMFoXDTI2MTAzMTAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDZ1s/bYy9EOBITGkJJAzjcXGshPnpesRrtmHZ3nIEes5L6TAHZPs77bewZEV0Wpbr+4KsNhIyqZVUsHHh2o6RKjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBThpydnAofy2sFq9nKWpENB8qT6EDAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEArcnhj+PUm1B9B8OrERaTw52CnlWiZWoz2XZP6pNQu5ECIQD/Bt3r1daEOgs9tDvxSghSWBS+nqwfCSmkaU3psFAgfQ==" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "b0ea89dbcd73e89014cd1c3a7c2d210a6d3a799a2f0d3960f0f94c2abe7ad503" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793149200" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793149500" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQC1xgntdfd9CPWEEvwSc1N+n2L6ZouxrFXAUWm+OQiY7QIgOz1jyEQLtAP5TBkBibhFjYhZrSphlGWu5LfoEmDvRTg=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793149200, + "expected_accept": true, + "rejection_reason": null, + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEKVzEpNf3zXexESrQxY8fNm7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAABq4UkQAAAAAGrhSjwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJsOqJ281z6JAUzRw6fC0hCm06eZovDTlg8PlMKr561QNCh1t7QrLXMykh/oz4L1lqveAsaZAmpZB8t0ePxN7ROA==", + "credential": { + "version": 3, + "generation": "valid-rotated-leaf", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgZ5XjKk1x3NL5z0t26yjCnb3e8/CLj3SPa17mpVAsOFKhRANCAAQ2dbP22MvRDgSExpCSQM43FxrIT56XrEa7Zh2d5yBHrOS+kwB2T7O+23sGRFdFqW6/uCrDYSMqmVVLBx4dqOkS", + "certificate_der_base64": "MIIBwjCCAWegAwIBAgIUCYrmvIOSVvIhkvPst0TDBpNZxf4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyODAwMDAwMFoXDTI2MTAzMTAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDZ1s/bYy9EOBITGkJJAzjcXGshPnpesRrtmHZ3nIEes5L6TAHZPs77bewZEV0Wpbr+4KsNhIyqZVUsHHh2o6RKjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBThpydnAofy2sFq9nKWpENB8qT6EDAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEArcnhj+PUm1B9B8OrERaTw52CnlWiZWoz2XZP6pNQu5ECIQD/Bt3r1daEOgs9tDvxSghSWBS+nqwfCSmkaU3psFAgfQ==", + "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + } + }, + { + "id": "valid-2032-rotated-intermediate-no-history", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "5009996309613ee95b60b6089a8f6160" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUOdTAzaKo4DU1cu+ya6eyWJKtVkwwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMB4XDTMyMTAyNzAwMDAwMFoXDTMyMTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDhN8Cx5Y3Hj1Nsr1pB34+IvNSVn2oDJoXr5DSujRN17xcwY0S1NTg1sTpGWAGHF860c4Wo3wGzCiN8HWpQmkMGjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTebim8Q4xa/S4xPpdkFgIWusvpLjAfBgNVHSMEGDAWgBTDyKBSsK2NJjYR2vE8mfIPY7o0ZTATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEArPnGRC4MSM3WA9ni+t8lZxkQssg/9wyI5UoDruotosYCICCo2PfwRok4KXUJ0Ow2ZCY9v4UGwKJ8Pwmf36uFDras" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUfqq7qR+DolDXyh+j4B9HjcA7h3YwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTMyMDgwMTAwMDAwMFoXDTMzMDgwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB4VeIRN2/U4pLxIzZ3svcZ3wrtKfZAXKxFDKe/MWaa8lP1KzKKqZUKilzzZ/sSRd6G0Vi9SurI/4svZZTl3Ei6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMPIoFKwrY0mNhHa8TyZ8g9jujRlMB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCICv0yIXzPdOh4QFZ9j7EZD7H8yiMwvgXORljjGa6fpOVAiEAtng4stktkYRVEFh7h7qA7cE6q+4hMvPYueBqGZ6x7LQ=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "59bd015beb16544539417a8e215eb3d6fcf75ddc500bcad18de794f453886e67" + ], + [ + "x-datadog-feature-flags-issued-at", + "1982451600" + ], + [ + "x-datadog-feature-flags-expires-at", + "1982451900" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDfoUrOV/atQoUSB2c8NYfo0r5gEJPNvpTFlCD662u55AIgKxOgd5DbLuNCPrYXYmO0pBBsVYvRir1ZzWbj6Vy/Ank=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1982451600, + "expected_accept": true, + "rejection_reason": null, + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEFAJmWMJYT7pW2C2CJqPYWC7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAAB2Kc+QAAAAAHYp0LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJWb0BW+sWVEU5QXqOIV6z1vz3XdxQC8rRjeeU9FOIbmcSaNyVazpm07iiAuMDHi5DnIRAMFcOA2KxY9Iy7hOnBQ==", + "credential": { + "version": 3, + "generation": "valid-2032-rotated-intermediate-no-history", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgclKiYwah80EHUvy7M3UVuw1XUP6IFGZXHTzZIoN7JcuhRANCAAQ4TfAseWNx49TbK9aQd+PiLzUlZ9qAyaF6+Q0ro0Tde8XMGNEtTU4NbE6RlgBhxfOtHOFqN8BswojfB1qUJpDB", + "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUOdTAzaKo4DU1cu+ya6eyWJKtVkwwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMB4XDTMyMTAyNzAwMDAwMFoXDTMyMTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDhN8Cx5Y3Hj1Nsr1pB34+IvNSVn2oDJoXr5DSujRN17xcwY0S1NTg1sTpGWAGHF860c4Wo3wGzCiN8HWpQmkMGjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTebim8Q4xa/S4xPpdkFgIWusvpLjAfBgNVHSMEGDAWgBTDyKBSsK2NJjYR2vE8mfIPY7o0ZTATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEArPnGRC4MSM3WA9ni+t8lZxkQssg/9wyI5UoDruotosYCICCo2PfwRok4KXUJ0Ow2ZCY9v4UGwKJ8Pwmf36uFDras", + "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUfqq7qR+DolDXyh+j4B9HjcA7h3YwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTMyMDgwMTAwMDAwMFoXDTMzMDgwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB4VeIRN2/U4pLxIzZ3svcZ3wrtKfZAXKxFDKe/MWaa8lP1KzKKqZUKilzzZ/sSRd6G0Vi9SurI/4svZZTl3Ei6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMPIoFKwrY0mNhHa8TyZ8g9jujRlMB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCICv0yIXzPdOh4QFZ9j7EZD7H8yiMwvgXORljjGa6fpOVAiEAtng4stktkYRVEFh7h7qA7cE6q+4hMvPYueBqGZ6x7LQ=" + } + }, + { + "id": "valid-effective-token-and-authorization", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "40e3e0cb8e1a77eba5e5472410bb95c7" + ], + [ + "dd-client-token", + "synthetic-overridden-token" + ], + [ + "authorization", + "Bearer synthetic-opaque-value" + ], + [ + "dd-application-id", + "" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIAF6e70c1hP6GbQ7GB6Go0FaOkZCg6qDRmN8Q5qQ5XtXAiAc/T+u9THJ2M55QuTZZDxp8gFMEcivebzRJY0OmTNp6w==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": true, + "rejection_reason": null, + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEEDj4MuOGnfrpeVHJBC7lce7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh8Q8ICUwTvIr1x0EuMyLFsMcYoDPLjOM+HbOot30IzBxAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAAAAAQAAAAR0cnVlAQAAABNyZXNwb25zZS1zaWduaW5nLXYzAWei0CtlNcV8HrSmyHb7oVR2HhX8LBssttu2KRTUEJRwAMgAAAAAat/3kAAAAABq3/i8AAAAAAAAAGwY6KNgVa7BQb7G+/5J3ZFrhCboCXJAROsfMjXR6jRFSRI0NbmFNNElgTGTPIc4ISnA1g54J2ZUHJMsLBPHI9/CQodbe0Ky1zMpIf6M+C9Zar3gLGmQJqWQfLdHj8Te0Tg=", + "credential": { + "version": 3, + "generation": "valid-effective-token-and-authorization", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", + "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", + "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + } + }, + { + "id": "valid-gzip-application-bytes", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "9a1984ebf1a183ce8d2de04a06ba1a28" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEYCIQDu3EK1AwNtmnVx93DwlA+IKmi0nI/EgvpWHWR7P9Jx+QIhANS/ehUvKD1O+C+WC4BAKk7lViDJA/ujXCYozYwvSHUv" + ], + [ + "content-encoding", + "gzip" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9", + "wire_body_base64": "H4sIAAAAAAACAyXMwQnDMAxG4V3+c3Lo1WN0A9WVEoFqg+UYgvFAnaOLxSXXj8frEKPNETpi0aqRbH3zJ/+hUVGqmhMCsgiWKXYwgpA5j7GgHMb+5KZ+V36muvO8rOUxc6MX2+RI8vtiXPbTAXRsAAAA" + }, + "now": 1793062800, + "expected_accept": true, + "rejection_reason": null, + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEJoZhOvxoYPOjS3gSga6Gii7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJEjQ1uYU00SWBMZM8hzghKcDWDngnZlQckywsE8cj38JCh1t7QrLXMykh/oz4L1lqveAsaZAmpZB8t0ePxN7ROA==", + "credential": { + "version": 3, + "generation": "valid-gzip-application-bytes", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", + "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", + "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + } + }, + { + "id": "valid-ipv6-and-absent-optional-headers", + "request": { + "url": "https://[2001:db8::1]:8443/precompute/assignments", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "2f9d5a06a9a94c40837154e6af5dcc48" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIDYXafrhSpGBWgvMpAVPmO80MlVubed2NDd0ypOSU+eRAiEAvcekx0fUoiGVkACkk54zXAyUKSwD3AfxjIXA5OamOTA=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": true, + "rejection_reason": null, + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAElsyMDAxOmRiODo6MV06ODQ0MwAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAAAAAAAQL51aBqmpTECDcVTmr13MSLtFNiQ2aDDsic8G9+jVrApunQq/2rpJ/EIfKA3ilyeH/o2DxNwE/POvEX9MM4v972AXEbsXHBmGt+Pv3bnUB08BAAAAEGFwcGxpY2F0aW9uL2pzb24AAAABAAAAE3Jlc3BvbnNlLXNpZ25pbmctdjMAAMgAAAAAat/3kAAAAABq3/i8AAAAAAAAAGwY6KNgVa7BQb7G+/5J3ZFrhCboCXJAROsfMjXR6jRFSRI0NbmFNNElgTGTPIc4ISnA1g54J2ZUHJMsLBPHI9/CQodbe0Ky1zMpIf6M+C9Zar3gLGmQJqWQfLdHj8Te0Tg=", + "credential": { + "version": 3, + "generation": "valid-ipv6-and-absent-optional-headers", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", + "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", + "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + } + }, + { + "id": "unrelated-root", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "d39ae58b246ef557c83d63dca5c4bc3b" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwzCCAWigAwIBAgIUR01KujW30ZSH+SB4MqaD1LrVQDowCgYIKoZIzj0EAwIwJzElMCMGA1UEAwwcU3ludGhldGljIFdyb25nIEludGVybWVkaWF0ZTAeFw0yNjEwMjcwMDAwMDBaFw0yNjEwMzAwMDAwMDBaMCQxIjAgBgNVBAMMGVN5bnRoZXRpYyBBc3NpZ25tZW50IExlYWYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARQyuc8IhO7DzLg9yDu8IBdlXfkiToIVWGE2yMJctw84HqCOXo0bequKqrKUIMfAWWIXwlE3YJ79AQ/x8OAiJ0so3UwczAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQU9j7wr40u3zCSS+EML6KvW4fpmnswHwYDVR0jBBgwFoAU3w7QmK+wzWvGBa7VggK5C/yPx6wwEwYDVR0lBAwwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDSQAwRgIhAIzxN8/DDAIc9oqN+JD4cs8oqW59TxqUyeesQW0x3mx0AiEA9cjW17z9uk4mgmZMPhj2/+7gE+Dmg6McC4LiHrO/ZFU=" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIBsjCCAVigAwIBAgIUMiSQYCdZJ53qEajapYYLdWtT4ZswCgYIKoZIzj0EAwIwIzEhMB8GA1UEAwwYU3ludGhldGljIFVucmVsYXRlZCBSb290MB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJzElMCMGA1UEAwwcU3ludGhldGljIFdyb25nIEludGVybWVkaWF0ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOAVubPPE1AgWXEFlPLVlaRSrEDCxU9Bsj8os/th6mgINiAk3Xzn2Ew/HR14jnDtWXOmdPSgomGNhxNRYRUXwZujZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTfDtCYr7DNa8YFrtWCArkL/I/HrDAfBgNVHSMEGDAWgBQ2vb1T7cnAs8BX16V3lofR2fE1+jAKBggqhkjOPQQDAgNIADBFAiEAjdZ/KNg/Z1BUEQLjn3tGzsfSbhu1kSenFGAw0SHmw58CIDDq8+isYIOtP8ODyTcF/zSItxGsWobueeVa2zWYZ7Td" + ], + [ + "x-datadog-feature-flags-certificate-id", + "65acb71e56f3fe92cdd01dcf3f983a00cc7b3d23a08a1b0b4b1a62233a68a53c" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEYCIQD8+QiMYFXaWlQ1TPdOYZ6D/085CukMQsaQx1URQXeDQwIhAOdLVyiS0HGLPn9WpG1csppL1+nQXAmJoT5ucZQ3KRGq" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "chain-root" + }, + { + "id": "direct-leaf-under-root", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "7b2c7757790eede89cb71ad9c656ca4b" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIB4jCCAYigAwIBAgIUG1b41wVGRjbhFABDEakfY4khm/swCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABC67+zpCqw/CHKi1osJfMdE1qIUs0sRv0J/HYiU/esIGHfMZ8+ClqeIhkZvOzSJJlqr43QhjsR3mWlXT5l32DoKjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBQ95tYQUrFSbrOtGwiI6Wn5wZVR/TAfBgNVHSMEGDAWgBQRXz3qJ3djKWCjEcPylQXIRl952TATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAuGhRR7Islr/3DY8o/9lo/Q9kjkybLY9QM11/h/+ZRzAIhAIZenSXlIvuJUOweRK0vDUaoor57TAGncPnVjiQEHwNm" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "21c6e2f799192661918bd7a8b6c0938868555aeda04a3680e8360f422d007d2c" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIBznlqdOl5LITwGrWIqr2hwcdv0pE7PLZQRFuBRszzAXAiAFxxDCBjWGOliln63sQm3RD4yemb3yAwWNAEWB5V9rBw==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "chain-link" + }, + { + "id": "expired-leaf", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "d7bec32cabcb005c2a90e11df25c9267" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwjCCAWegAwIBAgIUMggvVwR7xFECAuMqqbZ+9kkvQaEwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNDAxMDAwMFoXDTI2MTAyNzAwNTk1OVowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABK92yS536EMm7jNjjgmmlDFcKvYqJJBiJYpJHcPo4jL5ryv88982nLQYwZ3OEqVsRS1hWQsrGUIkew3ttCROkSSjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSsCWgXhrt0dIKsWp+Lmvg/0W8JSzAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEA6Jn8OZxSdAMifL+xiVYYhr7KPzuaX9jGDHFXZphiywsCIQDsVZimSqYseFk/1i7fNKfxPY1nERY6XRXxMzB3qsIVoQ==" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "9c73cc044462773778bec8d27406f0393be90e41a294177b2602fad5d4b6e560" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIDwET9qoNisIdhO+TqzGIAZG8Xt007t3NWibgMlPD2+VAiAHE/sr58K6bc0bAR6PbRfOuloFugZhKhLommv0mlBp2w==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "certificate-time" + }, + { + "id": "future-leaf", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "96cd1d39a326cc10444c4c9833db1cb6" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUFmIQS91j9WiAkEH8hxzeQTPU3MMwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAxMDAwMVoXDTI2MTAzMDAxMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEcXepJ945Er0MGoJHc7lmX1xZjV60lUYTcgoud8w3sNq0nNLePAPHBUXA2KlDZ3g0SHPYltEpTLqFSunaWOj3ejdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSLLlUQ9jIJL2neWa402tzFD+SpMDAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiBaWENKkUSYQJbzoj0iLniwWEOis4qSRf3f+c3KV/k2TgIhAJPW5A6wHMi/tdzLcck8GtOdXt5ldEtDjbynmqMqA2jz" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "a537536a79787a098cd1feb5222556e7f53c4f1eae7402adb20f94b539a48f1a" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQD3O0lMT1aUGWmKUxBi8yIOqkROSl52O7zdCLOrZSu5tAIgapjoMQUV4fKGx44w+4a5G/7jpCbWl8bI7Q9GRxBbLLs=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "certificate-time" + }, + { + "id": "leaf-ca-true", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "49bb1efb124303ff6ef8992cdda8a322" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBxzCCAW2gAwIBAgIUU2HY9yoknO5Cullul/eQqhIFZxMwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGSe7b1fYmLKc2xjnlQIfoGf7TQi5oPh78r16mAIa2TAhrYMk+HZ3JAsbhaC4B2lDWjGNqBkzhp2mQ+clTGzzXOjezB5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTxlx3Dve+PCpvsZt9IjkAV8I7fjDAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA7ItAfO/ZzWI4l4pgVfxkZg/tEkths/Aqa3joy8BRHhcCICx/e2G0a1HvypDqj7DlZji/gPNTOqUb+S7t+hZvvsNI" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "92ad2dbe157027c5946297e03806da211ca9081369a8cb806fbc39839270dde7" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIGWCURJtYX7TqQNvda/vXO1M1C8PzKMs2nGPdlmKex5XAiEAmgAb6XeADvg6dzPCXH0vFvuAQu8lFQdwSu4kiitjXwA=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "leaf-basic-constraints" + }, + { + "id": "leaf-wrong-key-usage", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "c998261cd393f970d9cff73323d27955" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUNbhRJ750WseYJo0e7imv/N1ZSJQwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN1IYd6W/6pDX0B+cwi5ipyLcKlS8IQy6+kbNyXT9T+uoRYIJsp8xa6Jplj0SwuFNieHRumUe4/ut3FStGYWn6mjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdDgQWBBRhNQ+8dQwb3adhPLcvXuzZdnrmdjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAoGBhDjjyaHfuXJT/swr3bKYn1+4eDBkWPCBx+kO129wIhANtFXpoEs1QlgEDa+GqUL1vmadwHWHFLrmZ3bQ0o0Srb" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "bf8683ad641410f56d748db3133605a0b773b4464bd13c51be5df0abbee3a4c7" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDmDqZgkjc5LClK4//3S3AHCz/WjvyByP9c9YSmU1XHtwIgPfBzLXM+zy6bUYlmzgx8JeE+LTNSlYE0mvMeWtKB2v0=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "leaf-key-usage" + }, + { + "id": "leaf-wrong-eku", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "f39a233ff3f0484b2e4bc978e3525835" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUD4Hctul3N+IOll0Keahh7fPqZ54wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBn2Nki2E+OlIDNbPm5zXEgkn7fIe+zkVqc8udgF3FMuIbAOC+tjj//khl/ZgJLJgkv4FvMeUwW9AIJaEQIewpWjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSft9p65fPsQ8WRRfrjhmMBhuJ8ZjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgNIADBFAiEA60CyQEHauj2gdVhjuWxpCBoWbT1dj0MNarDHm/ICNloCIFE924K31AIYc6t2ipV+VtwjI0S8aqmx5fLIqldUIXoF" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "3b7f82622af0e82930e22482d92a77c9040a6a168b2d1ff7f7efabb8c91d27e2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDRXC53O/orHtNLSlm5FJsUolP+MFeWMDBHW+g1a9fQSQIgVvxKRUPLR9rQaQ/3f7D6I7z+NcQKZwHGogPEQo7KkKg=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "leaf-eku" + }, + { + "id": "leaf-unknown-critical-extension", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "d24eb62b25289d1cd9230fd776a1f331" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIB0zCCAXqgAwIBAgIUc2eHeKB3qvj5Db83E2MTp4CzoNMwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEjeEC5tmNRfquiemzbXhyIvuSmMg1eCt6Ds5NvoQRatrdxBcfP/rsTSYgqWMhOVvrcwoNh5YyQPy0WB9MwbRSSjgYcwgYQwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFJ0QDb+PehkO8+Y14ShuRbotCB4EMB8GA1UdIwQYMBaAFETUQiFxL8NVpenIqnbfr/Dw3ZR6MBMGA1UdJQQMMAoGCCsGAQUFBwMDMA8GBioDBAUGBwEB/wQCBQAwCgYIKoZIzj0EAwIDRwAwRAIgd8dK77Y2LA493zr3V6M2tvzuHt8xrMx0DiBVY4fFB2YCIHo665MsxsZVY2XWdSYH8HWN+52IaZEqg/Dd8mzO5Pbe" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "b42d34a4ff59712064ee4ec8beec73e2bd6f8e654ef80f723b12fa50514533a6" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDwZtEIjtIgHGy/tn64mncJo2KSX/GLDUUUotZeg+OafQIgJIfMYFObYu1ayIjI92BWMA/fNPvTbvKCWhd/WOaLQKM=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "critical-extension" + }, + { + "id": "leaf-issuer-name-mismatch", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "069868ce9267d621f408d4d27752cb47" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBujCCAWGgAwIBAgIUU0DvglbotNYV5Lvbzm1u92OveekwCgYIKoZIzj0EAwIwIDEeMBwGA1UEAwwVRGlmZmVyZW50IElzc3VlciBOYW1lMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLYVMYikOTRROg6tQgV8W5Cf+eXXz0y/ClxyEnhP4++fYrJ6M/d2nqq+dfI08uzIkhQ+T7iU6zsCG3q0zqT9lJajdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTxFMWTnz6cb8URWXVcMF7gxXIEGTAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNHADBEAiAkMHdI8xvs2Lmow8kkGwAQTmfo+AfpL7hap3viJQZBIwIgP7gDCv5SgjkZBLPFZ6ILLDbz6EhEWWprlN7UMbKphpM=" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "64b630c44a535d66814d38a7d7eb8c4d33140f35fd5a3d4fca53a7b11f1178c6" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQC8XEbEQ9NAu6e4oixqPDyz4BeQB2CTC5NCuJmnnWBKiwIgLgMxEv493GL4zBC41b8x5tC6FXF/enr/vkakqxoGoHc=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "chain-name" + }, + { + "id": "leaf-aki-mismatch", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0e901572de39562774a03ebc817d4813" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUJ4/SVhlbBk+9WuF/YiFYG3YMJ3YwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGAhea/goJJ4f/YGf5Y2yzXCX7DR/H/GS2vf9cQSPETpg+meNaMVjvp0vm/x2K2GM/p+lsGf23pobC0Tzy4O3ymjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRIIc6/snmJEwqDUaicHoNiU7aa/DAfBgNVHSMEGDAWgBRCQkJCQkJCQkJCQkJCQkJCQkJCQjATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAXZGenLXwBG3gMfiqrPlB4NIwAWbENzH4uojEBUb8jJwIhAMoZvxqa0CYTymx/Nb4Gvp/rFzuQ0YLUsef/5lVZh+5z" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "0e74fd3942f74f209757930e6a94e16c6cc506e6bc17f1bfee45d104fc641a27" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQD6QejWa6yjmavqKmlSsvcR8G3UB88Gb7sfOXFg5rkPPwIgZIazu28FLmZdWzyqeCIW6/vUYMzblNC7lhCFwE6cHo0=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "key-identifier" + }, + { + "id": "leaf-outlives-intermediate", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "ca26b3be93a583ff45d576619e38c1c3" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwjCCAWegAwIBAgIUDT3ZT8LswcLZm2P8mK2TtC2iyvQwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI3MTAwMTAwMDAwMVowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFDTEKvtFi/cUmPqtRWe5S/Iw1tVue471/B/B5LTvOaSRsMUivJ8J7pjTCtmpu9If7mRzLglER3FN0nqcS+H7FijdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR64K21fvS4NkUqWZkAZXSeYSpJLTAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEA4tX6FMwmHVXE1BGc9lYEUL39cCaw6+xg7X55E1EDC/4CIQDO+52sogFRQHUI/4/Dcm7QHYB4QBFwj5EfK3fGKndRhw==" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "78d4e07601757b6cf5c7018317f958e919de79ee4cddbfd152c2c92caab0c266" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEYCIQCQOJmM7VXHHMQ3A/d0VIZouu6y4fk1O+Gz6NzOV7WelQIhAM9ayUA894ESnoLkOvdAcaUky2ZTuBJIoevhSuS4tTRz" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "validity-containment" + }, + { + "id": "leaf-unsupported-name-constraints", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "1ba610c4bbe7cf3e74dadccbe20ef056" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIB5jCCAYygAwIBAgIUZgQ2IizacSY8hdf+//mZ83e/48EwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI08z2TmltFAM9z0uXWnAgvJvsbh4jnxK31qzg8Yy37WF1p8/ks7U0qwBiJmXdNV5DO70J6g9f8oFs2n3f9j3D+jgZkwgZYwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFDSOQ7K8kqPpgMZnbWkuYh17giHFMB8GA1UdIwQYMBaAFETUQiFxL8NVpenIqnbfr/Dw3ZR6MBMGA1UdJQQMMAoGCCsGAQUFBwMDMCEGA1UdHgEB/wQXMBWgEzARgg9yZXN0cmljdGVkLnRlc3QwCgYIKoZIzj0EAwIDSAAwRQIgIdEYh5yOmwMAUPpdq6x2tjEJj01j7Eba/6I3r9UULvYCIQDOiLqoonvMkBa7Rv/h1uAltZWrpalOuM2/uA673nIZ+A==" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "00d1bb53987fe73bfd4445898493de002611511da91096171d7dd4a2372a87ba" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIBu0OXyDrX+0CN5PA1SPrf9+VOfqGumPTu12PBuEadEmAiBj7imUoKjZoWOnZo0+/lo9TzGh0QaONJ/f18Qx+z4i9w==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "unsupported-constraint" + }, + { + "id": "intermediate-ca-false", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "e0ac11d91eb78398fedf5ad86d6ca946" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBuzCCAWGgAwIBAgIUE78wpfgMWWN4ZbgAzsaDod88/FcwCgYIKoZIzj0EAwIwIDEeMBwGA1UEAwwVaW50ZXJtZWRpYXRlLWNhLWZhbHNlMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPOPEj6a+E8JboS/lsT05jXA9Q5lEXm2Esa7kwi2OrFUmjTbrZafijRw79edprU74DZoltHeynHRy2hxBprDYE2jdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTDZ9ZWI0S0ekpD2s0ttB+ZyQr9KjAfBgNVHSMEGDAWgBTemwGcHptXRw91YVq3JNaA9GOoEjATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiBCvM75817q+HBKCDPmg/XKCIvvG2L44Cp97A958cA62wIhAOuXgYtvZXKFI1iPWPrEYcVPeI0IJuj01mxCHJh8QQtU" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIByTCCAW+gAwIBAgIUGi5KixLO+QCub9kojQA/8d8GIGcwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowIDEeMBwGA1UEAwwVaW50ZXJtZWRpYXRlLWNhLWZhbHNlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuhX2pS3b/RrFIWLH7gVMLow6psrqM/WcIR9aTTD7r559Rm2VawPtW5BNqsh1Izjywt8W5rySkhe+4X/lXHqxA6NgMF4wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFN6bAZwem1dHD3VhWrck1oD0Y6gSMB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIAsk4vVyk1E2GhUv7furQ8IMxf2GSp5H/NvbchnpHsxEAiEAh/+vEIRhMYrQhu+rPMhKuFNNprqL/0Yu/U+WWwPvMrc=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "75980c55820a65615edff9c88c9cfaa4d54824a2c1b17e5e4ce196bf416026f7" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCID2ieqjbh4Nk/wB7PJn1unNQdimxZbwoGLt9/BxfgXIJAiEAot+qGiBXFgucbq7Tl5/ejwggwC8gs4FYAkLlgArc2KQ=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "intermediate-basic-constraints" + }, + { + "id": "intermediate-pathlen-one", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "080833a7e8d98e17c4fd0c389bf6d761" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBvjCCAWSgAwIBAgIUaYsdTcnkh7MFc5L7QodxrlyTX3swCgYIKoZIzj0EAwIwIzEhMB8GA1UEAwwYaW50ZXJtZWRpYXRlLXBhdGhsZW4tb25lMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBRaimQnUDqIlclTWtMzy3D/DOHhueWEScPLjcqoT+eXAbhUxqVErCs8HyAEzZ9Mu7j7irZDF41Dod/X7mF5rDWjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBQ9H+ZnB+HaGoVpK7ft1fUS77HgkzAfBgNVHSMEGDAWgBQTuGP3uf3/R9IE1gYQfiONpdmM/zATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEAkDq0Dnyo38Zhm7jzKGMQS6ViArRfStzQWFNzIzAQxfgCIDaRUDXmRzPnJ9gdpDWvDRfpvtQHI7cypR3hvT3NIjQj" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB0TCCAXigAwIBAgIUMKgpr0ih/HFzt8LqoyWqUKB4O8kwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowIzEhMB8GA1UEAwwYaW50ZXJtZWRpYXRlLXBhdGhsZW4tb25lMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOUY740lzEF+HCz7oLKTRgeabgIa5gywXKcNQrehNXghaPSMCQueyhiql4L5+HpdDwaKgmg4rfwOD+aBYIJjo/aNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBO4Y/e5/f9H0gTWBhB+I42l2Yz/MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0cAMEQCIB2XwIm0+/JmgdWP4ScHl7nQS8WyBXm7r/CooE/kQCEnAiAb27FbH6mRcRejJ06/mx2MLaf4c+hamZMfdXgm8RNaMA==" + ], + [ + "x-datadog-feature-flags-certificate-id", + "80a08700fe65bdf7bcac7d4506b3430ef6baf6ffab8367113522d5ce5259d9fc" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIDuNKTnHDNV7wdy7MqI/djWxP23MxDdPN7mYY2H5JVIWAiBDOVjAbFJ3nDX9pRHJ0Bq+j3SfNGXoW7r3k3yM3mip5A==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "intermediate-path-length" + }, + { + "id": "intermediate-ku-missing-crl-sign", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0607d2564cce9ea0694efb98aa0f321d" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBxjCCAWygAwIBAgIURppmbbPiZYU4KdKuS47rXG5DBBgwCgYIKoZIzj0EAwIwKzEpMCcGA1UEAwwgaW50ZXJtZWRpYXRlLWt1LW1pc3NpbmctY3JsLXNpZ24wHhcNMjYxMDI3MDAwMDAwWhcNMjYxMDMwMDAwMDAwWjAkMSIwIAYDVQQDDBlTeW50aGV0aWMgQXNzaWdubWVudCBMZWFmMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEW3VaYEZj7UUM6I16kY8cvvTJRYdbJpB+O8fvZRDN7Fo8hHhY6KMCazwzKNyUvRkMsTIbFU04krPE8L3NA/uubqN1MHMwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFF7CUk9WxMVAfmGNco3JqCrKITm+MB8GA1UdIwQYMBaAFDiq6oLEkIixSWU5/aBut/BzzYzVMBMGA1UdJQQMMAoGCCsGAQUFBwMDMAoGCCqGSM49BAMCA0gAMEUCIEFD4VRPBU9frgyATf/0iRy9G8f+i+sw/2m8UR0AebUMAiEA4VkF9i+uRgOBO2+mQXKAOT0dRaZi7x1sy+ugJo6puJM=" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB2DCCAYCgAwIBAgIUHK61sa8Ejzeb/rbjtXnmlz40lpswCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowKzEpMCcGA1UEAwwgaW50ZXJtZWRpYXRlLWt1LW1pc3NpbmctY3JsLXNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT4kIFALaS9C+1tjPI4Nd13nkwz2g/wVr+kRNRc2gT193SgyPM3DxVLwmhPbkbTm+wSUqYENgq1z6/Ezli+39dgo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwICBDAdBgNVHQ4EFgQUOKrqgsSQiLFJZTn9oG638HPNjNUwHwYDVR0jBBgwFoAUEV896id3YylgoxHD8pUFyEZfedkwCgYIKoZIzj0EAwIDRgAwQwIfDoUTVqUbm+qd6QM7LtT2zHnm63piw8OcKY2lpAmuuQIgeMXNl4qHB/Wl8umnUipmeLGB7hItjLBHiGxElvyrgrg=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "70435533bfb709d050731bdb73163779d198e0c526b86bbc7da5a1762a701c38" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIFbvJm8PSjEzVprz6f/cpn9u8yU7xF6N0u1yHi95jb1YAiEAnXys5WOIGTf32x+QOgQ8h3/oxW73j6j+I4MLnqMYc5o=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "intermediate-key-usage" + }, + { + "id": "intermediate-wrong-eku", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "a886e5ff17792840b7594ffd41af2bfb" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBuzCCAWKgAwIBAgIUHDF+KWYQPQrAjQPJY/lQyp0S3YowCgYIKoZIzj0EAwIwITEfMB0GA1UEAwwWaW50ZXJtZWRpYXRlLXdyb25nLWVrdTAeFw0yNjEwMjcwMDAwMDBaFw0yNjEwMzAwMDAwMDBaMCQxIjAgBgNVBAMMGVN5bnRoZXRpYyBBc3NpZ25tZW50IExlYWYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATAWXKIk9KFKDlMqiz6isonWVAx6QnvwrT4ZSrjOvvyodhU7B4d44Gd3Rdle4E5KuN/yR3wbBuxnkB5KUBUOilbo3UwczAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQUpOqTCzsQyzt+Q2zxb1s4zYpPU2MwHwYDVR0jBBgwFoAUDZRXXQBGzC8AGTUJ6oz2Ok6fWJgwEwYDVR0lBAwwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDRwAwRAIgWveuofvNMcl8hV/r0WIPWi4woe7pqNTq4HzxoA5Hu1oCIH0c5qQMM0F5cn99qcNIDVEVpPKtMqFnwFdpmmpC6uJu" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB5TCCAYugAwIBAgIUZVKlij3wBsIZNzKBQgtNsCc35PIwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowITEfMB0GA1UEAwwWaW50ZXJtZWRpYXRlLXdyb25nLWVrdTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMsubB/4XBtHk77Q6+Qaq5lpScngmTaghBETE5pywmnu6gvhiv816rlewZCrIRH8bgAhkkJV9DEYMXz5LN3Kzh2jezB5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQNlFddAEbMLwAZNQnqjPY6Tp9YmDAfBgNVHSMEGDAWgBQRXz3qJ3djKWCjEcPylQXIRl952TATBgNVHSUEDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgNIADBFAiBZ4lTaYCd07Q4jgSxoJ6rTD7MzvyH6qMvn8ieVUgt32gIhAODSVcl74u5RhXUEshvs0ITcVs1AsrQ1TGl0qz+M1gSu" + ], + [ + "x-datadog-feature-flags-certificate-id", + "e084d9d3230e6954243cbec5891a5a7a6244428e2ecd30dfa8d47fa83e75fa21" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDDvl/PTz/JlJtqvMmHoZSYt7UfbL+uTurRxz+h4F8llgIgJl/MRm9kQkA/jodFqVvGrx6HbT1OAsRsTppySHYCEro=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "intermediate-eku" + }, + { + "id": "missing-intermediate", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "missing-proof" + }, + { + "id": "changed-response-bytes", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9IA==" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "transcript-signature" + }, + { + "id": "changed-request-body", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9IA==" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "transcript-signature" + }, + { + "id": "changed-nonce", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "00000000000000000000000000000000" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "transcript-signature" + }, + { + "id": "changed-effective-token", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ], + [ + "dd-client-token", + "different-token" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "transcript-signature" + }, + { + "id": "changed-query-order", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?marker=a%2Fb&dd_env=production", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "transcript-signature" + }, + { + "id": "changed-authority", + "request": { + "url": "https://other.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "transcript-signature" + }, + { + "id": "changed-semantic-header", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ], + [ + "x-use-cache", + "false" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "transcript-signature" + }, + { + "id": "changed-http-status", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 201, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "response-status" + }, + { + "id": "future-issued-at", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "6ff9bb9af5612bd9e67652fd32e62d6e" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062831" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063131" + ], + [ + "x-datadog-feature-flags-signature", + "MEYCIQCy/I4vNBs44LdFkHtGjshXFY2b1TINV8yStuIZ4yXgHgIhAKHRssvzuaLooBUslXsmTQ/6POXvDWEH/Wy6cc0Uu8Fj" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "response-time" + }, + { + "id": "expired-response", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "7ebaf7a7b9edd4a28bbd8cc9b27b1776" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062500" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIF4Il9u41l86oICAr2Y2/jEWfGDTH+HjivcgVjsCW4qPAiB6xu+lnIliAA3VR+04y3ZwHdkEabS2C2TDE+nQm92jwg==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "response-time" + }, + { + "id": "excess-response-lifetime", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "bd4be81c0c2213014a3d8c9ac7af2d29" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063101" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIBexQpYgRrp56h9IEPCu4vrrgshVE/YdWVqLYOwNLCVlAiBTHL614Fv7D1ldi27zkeVaOLqJ2JTHPeBeU8vfotT9Gw==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "response-time" + }, + { + "id": "noncanonical-issued-at", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ], + [ + "x-datadog-feature-flags-issued-at", + "01793062800" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "canonical-time" + }, + { + "id": "duplicate-proof-header", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "duplicate-proof" + }, + { + "id": "comma-combined-proof-header", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ], + [ + "x-datadog-feature-flags-signature-version", + "3, 3" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "combined-proof" + }, + { + "id": "oversized-certificate", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "certificate-size" + }, + { + "id": "malformed-certificate-base64", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "not@base64" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "certificate-encoding" + }, + { + "id": "signature-trailing-der", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktwA" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "signature-encoding" + }, + { + "id": "certificate-trailing-der", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUBAA==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "certificate-encoding" + }, + { + "id": "cryptographic-signature-tampering", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIBqXxgJm/E+GWNe1V/I9MwO8Q9NB8CxcaYZHI73gUKv2AiBXTb5RUuTeedKCKxg0zqaxSKzD/TnJZXLpal68/L6ISA==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "transcript-signature" + }, + { + "id": "duplicate-request-semantic-header", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "0d9328a96cca4cde451af9de2b49cd19" + ], + [ + "x-use-cache", + "true" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "duplicate-semantic-header" + } + ], + "signing_cases": [ + { + "id": "signer-valid-key-pair", + "case_id": "valid-current", + "credential": { + "version": 3, + "generation": "valid-current", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", + "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", + "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + }, + "expected_signing": true + }, + { + "id": "signer-private-key-mismatch", + "case_id": "valid-current", + "credential": { + "version": 3, + "generation": "valid-current", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRQ3f5cvHncb+REReuGcuCaUxSA8B+0GlkORtt4+WFxGhRANCAAQqHf4sxKPaJI4D/Aa4qrEg/QVHpopwHZ9Z/CruP37NR2/+Gtq4yN9mjXi6gz0IViBQjEAvBqzX/mEtsIAsFF3R", + "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", + "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + }, + "expected_signing": false + } + ] +} diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/key-usage-supplement.json b/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/key-usage-supplement.json new file mode 100644 index 0000000000..8368ed2eda --- /dev/null +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/key-usage-supplement.json @@ -0,0 +1,174 @@ +{ + "anchor": "MIIB9jCCAZygAwIBAgIUXo55ltoHIzARserQVk/np+sLYQMwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MDkxMTAwMDAwMFoXDTM2MDkwODAzMTgwOFowRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXd6cKcwHOfW4B7A/rBSNBgIXm1O1U21UkozNddwNKD94hHLJJhokbzc2yihhcEGHbfYIlhtIil1py4CfOu2SHKNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLuNHAxC4pPU6Iey2aieGq5PrIfIMB8GA1UdIwQYMBaAFLuNHAxC4pPU6Iey2aieGq5PrIfIMAoGCCqGSM49BAMCA0gAMEUCIQDW+qTMhmH+XJKR6IKagg0OgBrYWBc7ksorNpuJYhkUogIgMUQrGANl33RwKUxdQTETdKmOYeHwBusdCarRWzF7Js0=", + "cases": [ + { + "id": "canonical-leaf-ku", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "8c1578bea3319bf3dac8243fd5593407" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWegAwIBAgIUUvaUkMqlT3T746kIxYRDP4j2LjEwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOkQnqH0bh8Y0sMEQjLLdbAgAh8yEPhqVmXT1r4cUssdWBbrAtVQqPQkQ34STytxBQ1Jn240Z8z3yJOPu9yiaZGjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTHwbt/CbErPPhijnTdvbmh40IJwTAfBgNVHSMEGDAWgBQwwPo1Ak8bfXkjkGvD1UpmabcXETATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAdraVcTrY600NKl6hdiW+urWrL7rOEEhvb1bTB8XB8SwIhAIuvzB9KBXa2L6H3THjxyTMcAAUpd7obP9FW5z+TjtJL" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUbaU6t2nsPEqNriCT/EgPlSzd1fEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+ZN2E+8+boZSClOvBgsawV38IdYuXFWSGgJNuQMF0u4dN0RjXzZm7RXTAv7+0BinhMUsCVHVVxPWrJvHVSmMQKNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDDA+jUCTxt9eSOQa8PVSmZptxcRMB8GA1UdIwQYMBaAFLuNHAxC4pPU6Iey2aieGq5PrIfIMAoGCCqGSM49BAMCA0gAMEUCIQD2PaAO1Q38L4FA5ca3uFTaqR7JN9UdBHowekx+4dw1wAIgTs3Hqb+DBYTHGgLp5dQwtqSlcM+wnW8SgtcS4M6gVkE=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "e69bfa1704ed4fa03d90d75e1198a21d4f325e0b742d8bd59027bf61fbb8045c" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIGlURIB1dZ/oEpcz9cea70l//ZZRooRNDRA0IXBHkXlQAiEA5eunZjLBrcER14FlQ0kIM8HVZRkAdCqpPYiT/JUtBEw=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": true, + "rejection_reason": null, + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEIwVeL6jMZvz2sgkP9VZNAe7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJ5pv6FwTtT6A9kNdeEZiiHU8yXgt0LYvVkCe/Yfu4BFzUhMjwcYj5TOdkrhYUYlHXRpA1bsa14S1snTuxEZoJzQ==" + }, + { + "id": "nonminimal-leaf-ku", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v3" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-request-nonce", + "077b98a07ecb8097a9cc3010b46aeda6" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwTCCAWigAwIBAgIUS4AgbMXxAcSoCEqzYuYZukUCM/UwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDuU52kYmVzcsZ/rpFJYS7JXZ9swcTPKiX5w3uyzXK8beqH9oYMexxEKj5YBCGwzmnnfjT5htGR9KJHUbYlQHnijdjB0MAwGA1UdEwEB/wQCMAAwDwYDVR0PAQH/BAUDAwCAADAdBgNVHQ4EFgQUaIyOchOJ9O0olKnVxwEOYFAP7dswHwYDVR0jBBgwFoAUMMD6NQJPG315I5Brw9VKZmm3FxEwEwYDVR0lBAwwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDRwAwRAIgEkx7UK6WSkcdwykDdY4EvC/grJbPOwxN3dcrrLsOS64CIHNntdPrtOKhJ1ETB3lgkqwPKzLtIAO8r9qE5bqNqdlZ" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1TCCAXugAwIBAgIUbaU6t2nsPEqNriCT/EgPlSzd1fEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+ZN2E+8+boZSClOvBgsawV38IdYuXFWSGgJNuQMF0u4dN0RjXzZm7RXTAv7+0BinhMUsCVHVVxPWrJvHVSmMQKNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDDA+jUCTxt9eSOQa8PVSmZptxcRMB8GA1UdIwQYMBaAFLuNHAxC4pPU6Iey2aieGq5PrIfIMAoGCCqGSM49BAMCA0gAMEUCIQD2PaAO1Q38L4FA5ca3uFTaqR7JN9UdBHowekx+4dw1wAIgTs3Hqb+DBYTHGgLp5dQwtqSlcM+wnW8SgtcS4M6gVkE=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "3ab0b5a3c0da69bd26838946c79796e54dca9848ebae11ce059ebcd7e3a024bf" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIApFE85ZvkAe+qFyMdkUi6pr71P6EBeRfroSCHd4eM5oAiBhwVmHINIBLKPQgNtRLk+2+Z+qDxYqef3VkgImh3FxZQ==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "nonminimal-key-usage-named-bit-list" + } + ], + "profile_sha256": "15649074caeb9a51ce233eb0d29d5725be6b33ee1c2497493f33acf992adff81", + "source": "Independent Python cryptography issuance, CA/leaf keys ephemeral; X.690 11.2.2 named-bit-list DER requires trailing zero bits removed." +} From bfa03d7adf72d375a2df0d989e2a5ea39030afb4 Mon Sep 17 00:00:00 2001 From: Leo Romanovsky Date: Mon, 2 Nov 2026 20:16:36 +0000 Subject: [PATCH 2/5] FFLSDK-267: Use v1 for the first public signing protocol Rename signing protocol identifiers and refresh shared synthetic fixtures. Keep X.509 v3 certificate encoding and optional rollout behavior unchanged. Ref: FFLSDK-267 --- features/dd-sdk-android-flags/README.md | 8 +- .../com/datadog/android/flags/FlagsClient.kt | 2 +- .../internal/signing/ResponseSigningState.kt | 4 +- .../signing/ResponseSigningVerifier.kt | 8 +- .../flags/internal/signing/SigningCrypto.kt | 2 +- .../signing/ResponseSigningClientTest.kt | 8 +- .../signing/ResponseSigningVerifierTest.kt | 4 +- .../resources/response-signing-v1/README.md | 17 + .../corpus.json | 1009 ++++++++++------- .../key-usage-supplement.json | 38 +- .../resources/response-signing-v3/README.md | 13 - 11 files changed, 686 insertions(+), 427 deletions(-) create mode 100644 features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md rename features/dd-sdk-android-flags/src/test/resources/{response-signing-v3 => response-signing-v1}/corpus.json (59%) rename features/dd-sdk-android-flags/src/test/resources/{response-signing-v3 => response-signing-v1}/key-usage-supplement.json (60%) delete mode 100644 features/dd-sdk-android-flags/src/test/resources/response-signing-v3/README.md diff --git a/features/dd-sdk-android-flags/README.md b/features/dd-sdk-android-flags/README.md index ea79362532..08e2a58d9c 100644 --- a/features/dd-sdk-android-flags/README.md +++ b/features/dd-sdk-android-flags/README.md @@ -62,8 +62,14 @@ The `FlagsConfiguration.Builder` supports the following options: #### Response signing (experimental draft) +The first public response-signing protocol is v1. The SDK advertises +`response-signing-v1`, sends signature version `1`, and verifies the +`datadog.feature-flags.precomputed-assignments.v1` transcript. Earlier POC v1/v2 +and draft v3 labels are not supported public versions; public v1 rejects their proofs. +X.509 v3 certificate encoding is unchanged. + Response signing is disabled by default. During a browser-first pilot, Android can -observe the same v3 response proofs with an explicitly provisioned public trust anchor: +observe the same public v1 response proofs with an explicitly provisioned public trust anchor: ```kotlin val flagsConfig = FlagsConfiguration.Builder() diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt index 3575727d8d..98b7871d0e 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/FlagsClient.kt @@ -469,7 +469,7 @@ interface FlagsClient { } val flagsRepository = signing?.let { SigningFlagsRepository( - { scope -> ordinaryRepository("$name-signing-v3-observe-$scope") }, + { scope -> ordinaryRepository("$name-signing-v1-observe-$scope") }, it, deliverFirstFlags ) diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt index bcba7ec8bd..75d0f18eac 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt @@ -74,7 +74,7 @@ internal class ResponseSigningState( capabilities.add(ResponseSigningVerifier.CAPABILITY) val request = original.newBuilder() .header("x-dd-feature-flags-capabilities", capabilities.sorted().joinToString(",")) - .header(ResponseSigningVerifier.PREFIX + "signature-version", "3") + .header(ResponseSigningVerifier.PREFIX + "signature-version", "1") .header(ResponseSigningVerifier.PREFIX + "request-nonce", nonce.signingBytes().hex()) .build() signingCheck(original.header("dd-application-id") == identity.applicationId) @@ -104,7 +104,7 @@ internal class ResponseSigningState( logger.log( InternalLogger.Level.INFO, InternalLogger.Target.TELEMETRY, - { if (verified) "Flag response signing v3: verified" else "Flag response signing v3: unverified" }, + { if (verified) "Flag response signing v1: verified" else "Flag response signing v1: unverified" }, onlyOnce = true ) } diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifier.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifier.kt index 59c6ea6705..a63b8d4706 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifier.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifier.kt @@ -38,7 +38,7 @@ internal class ResponseSigningVerifier(private val trustedRoots: List) { now: Long ): VerifiedResponse { signingCheck(status == 200 && body.size <= MAX_RESPONSE_BYTES) - signingCheck(single(headers, PREFIX + "signature-version") == "3") + signingCheck(single(headers, PREFIX + "signature-version") == "1") val leafBytes = base64(single(headers, PREFIX + "signing-certificate"), 4096) val intermediateBytes = base64(single(headers, PREFIX + "signing-intermediate"), 4096) signingCheck(single(headers, PREFIX + "certificate-id") == leafBytes.signingBytes().sha256().hex()) @@ -150,7 +150,7 @@ internal class ResponseSigningVerifier(private val trustedRoots: List) { companion object { const val PREFIX = "x-datadog-feature-flags-" private const val NONCE_HEADER = PREFIX + "request-nonce" - const val CAPABILITY = "response-signing-v3" + const val CAPABILITY = "response-signing-v1" const val MAX_RESPONSE_BYTES = 2 * 1024 * 1024 private const val AUTHORITY_KEY_ID = "551d23" private const val SUBJECT_KEY_ID = "551d0e" @@ -190,7 +190,7 @@ internal class ResponseSigningVerifier(private val trustedRoots: List) { request.method == "POST" && url.isHttps && url.username.isEmpty() && url.password.isEmpty() && url.fragment == null ) - signingCheck(single(request.headers, PREFIX + "signature-version") == "3") + signingCheck(single(request.headers, PREFIX + "signature-version") == "1") signingCheck(nonce.matches(Regex("[0-9a-f]{32}"))) val capabilities = single(request.headers, "x-dd-feature-flags-capabilities") signingCheck(CAPABILITY in capabilities.split(',').map { it.trim() }) @@ -202,7 +202,7 @@ internal class ResponseSigningVerifier(private val trustedRoots: List) { signingFailure() } signingCheck(!validateSigning || body.size <= MAX_REQUEST_BYTES) - val result = Buffer().writeUtf8("datadog.feature-flags.precomputed-assignments.v3").writeByte(0) + val result = Buffer().writeUtf8("datadog.feature-flags.precomputed-assignments.v1").writeByte(0) val host = if (url.host.contains(':')) "[${url.host}]" else url.host val authority = host + if (url.port == 443) "" else ":${url.port}" listOf( diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningCrypto.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningCrypto.kt index 92d4adf008..21ab9d6856 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningCrypto.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/SigningCrypto.kt @@ -24,7 +24,7 @@ internal fun signingCheck(condition: Boolean) { } @Suppress("ThrowingInternalException") // Every signing entrypoint catches this bounded validation failure. -internal fun signingFailure(): Nothing = throw IllegalArgumentException("Invalid response signing v3 input") +internal fun signingFailure(): Nothing = throw IllegalArgumentException("Invalid response signing v1 input") internal fun ByteArray.signingBytes(): ByteString = try { toByteString() diff --git a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt index 8ce3f9edd4..846f126075 100644 --- a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt +++ b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt @@ -119,7 +119,7 @@ internal class ResponseSigningClientTest { assertThat(testedClient.resolveBooleanValue("critical-demo", false)).isTrue() assertThat(requests).hasSize(1) assertThat(requests.single().header(ResponseSigningVerifier.PREFIX + "signature-version")) - .isEqualTo(if (mode == ResponseSigningMode.OFF) null else "3") + .isEqualTo(if (mode == ResponseSigningMode.OFF) null else "1") if (mode == ResponseSigningMode.REQUIRED) verifyNoInteractions(mockStore) } @@ -530,7 +530,7 @@ internal class ResponseSigningClientTest { val intermediate = bytes(credential["intermediate_der_base64"].asString) val output = ByteArrayOutputStream() val transcript = DataOutputStream(output) - transcript.write("datadog.feature-flags.precomputed-assignments.v3\u0000".toByteArray()) + transcript.write("datadog.feature-flags.precomputed-assignments.v1\u0000".toByteArray()) fun lp(bytes: ByteArray) { transcript.writeInt(bytes.size); transcript.write(bytes) } val url = request.url listOf(request.method, url.scheme, url.host, url.encodedPath, url.encodedQuery?.let { "?$it" } ?: "") @@ -562,7 +562,7 @@ internal class ResponseSigningClientTest { initSign(key); update(output.toByteArray()) }.sign() return Headers.Builder() - .add(ResponseSigningVerifier.PREFIX + "signature-version", "3") + .add(ResponseSigningVerifier.PREFIX + "signature-version", "1") .add(ResponseSigningVerifier.PREFIX + "signing-certificate", credential["certificate_der_base64"].asString) .add( ResponseSigningVerifier.PREFIX + "signing-intermediate", @@ -577,6 +577,6 @@ internal class ResponseSigningClientTest { private fun sha(bytes: ByteArray): ByteArray = MessageDigest.getInstance("SHA-256").digest(bytes) private fun bytes(value: String): ByteArray = checkNotNull(value.decodeBase64()).toByteArray() private fun resource(): JsonObject = checkNotNull(javaClass.classLoader) - .getResourceAsStream("response-signing-v3/corpus.json").let { checkNotNull(it) }.bufferedReader() + .getResourceAsStream("response-signing-v1/corpus.json").let { checkNotNull(it) }.bufferedReader() .use { JsonParser.parseReader(it).asJsonObject } } diff --git a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt index 2a79030aaa..34b5dfb76c 100644 --- a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt +++ b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt @@ -22,7 +22,7 @@ internal class ResponseSigningVerifierTest { fun `M match frozen independent vectors W verify()`(): List { val corpus = resource("corpus.json") val cases = corpus.getAsJsonArray("cases") - check(cases.size() == 43) + check(cases.size() == 46) check(cases.count { it.asJsonObject["expected_accept"].asBoolean } == 6) return cases.map { entry -> val vector = entry.asJsonObject @@ -76,6 +76,6 @@ internal class ResponseSigningVerifierTest { private fun bytes(value: String): ByteArray = checkNotNull(value.decodeBase64()).toByteArray() private fun resource(name: String): JsonObject = checkNotNull(javaClass.classLoader) - .getResourceAsStream("response-signing-v3/$name").let { checkNotNull(it) } + .getResourceAsStream("response-signing-v1/$name").let { checkNotNull(it) } .bufferedReader().use { JsonParser.parseReader(it).asJsonObject } } diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md new file mode 100644 index 0000000000..0f02560d1e --- /dev/null +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md @@ -0,0 +1,17 @@ +# Frozen synthetic response signing public v1 vectors + +`corpus.json` is an unchanged copy of the independently generated shared corpus, +SHA256 `f749069c3344eb72eac11a614bdb92215208e472feeb98467367d78ef42782c5`. +Profile SHA256 `a32c6919d1f730b076994f89317ef441fa4c4b4556c093edf0216632a882f783`. +The native verifier runs all 46 response cases (6 accept, 40 reject). The two +server private-key cases are outside the SDK verifier profile. Private leaf +credentials in this synthetic corpus are public test material, never production. + +`key-usage-supplement.json`, SHA256 +`f7b55015240951b90596692c5edec4209660a842b6f5e82e9d39da2be7c83cd1`, independently +signs canonical and nonminimal named-bit-string KU encodings. Its expected results +follow X.690 11.2.2; it contains no private keys. Neither fixture is rewritten by tests. + +Applicability profile `response-signing-public-v1`, manifest SHA256 +`18193622653a5867ff5e8501fb4fabebcbe6b979233b07406e2d70d172005544`. +The FFE LEAN spreadsheet remains decision authority; this adaptation makes no Lean proof claim. diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/corpus.json b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/corpus.json similarity index 59% rename from features/dd-sdk-android-flags/src/test/resources/response-signing-v3/corpus.json rename to features/dd-sdk-android-flags/src/test/resources/response-signing-v1/corpus.json index 916678b80e..e9e15086e0 100644 --- a/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/corpus.json +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/corpus.json @@ -1,8 +1,8 @@ { "schema_version": 1, - "profile_sha256": "15649074caeb9a51ce233eb0d29d5725be6b33ee1c2497493f33acf992adff81", + "profile_sha256": "a32c6919d1f730b076994f89317ef441fa4c4b4556c093edf0216632a882f783", "synthetic": true, - "anchor_der_base64": "MIIB9jCCAZygAwIBAgIUPBQ+Rper73pEWaljEpd1HZ3Ss6owCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MDkxMTAwMDAwMFoXDTM2MDkwODAzMTgwOFowRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKjmS3FG7yb7582CUFRXqR2rgHLs41OeR90rGNHqemWDm1pLlRKcj9hC8C9LGf10vNqdPJTI05q/0qawGCGpTtqNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBFfPeond2MpYKMRw/KVBchGX3nZMB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIAPLlSH4z1ZSTW0xp0XEa+niiLdWgrf4NI7RAJqbj+9ZAiEAxY3C7+KdFemR+0NcMtzTRhBc8PYg9fsGWCgA3aFePrI=", + "anchor_der_base64": "MIIB9TCCAZygAwIBAgIUQmfdcyqdry8YfhE+hvwNjHlpk4kwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MDkxMTAwMDAwMFoXDTM2MDkwODAzMTgwOFowRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAvmRtWpy01JOlef99amBe3hVi6PFhaxsx4X07KlFMwnqKI3u7cuub0E7PoAIbE9eoXwoCfteUWlogk9y7lxyS6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFIK0DwksM2iEGrA4Vc2PJKmgK6b7MB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIFkx4k1mNISsliG06Ixs9s4WxyeTMqmX9/5Xg8vZlgMUAiBNIJGrAMJeC0cAXu/jeAlQSqnLkue/hS8pES2PIkf+8w==", "cases": [ { "id": "valid-current", @@ -28,15 +28,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -54,19 +54,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -78,7 +78,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -86,13 +86,13 @@ "now": 1793062800, "expected_accept": true, "rejection_reason": null, - "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEA2TKKlsykzeRRr53itJzRm7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJEjQ1uYU00SWBMZM8hzghKcDWDngnZlQckywsE8cj38JCh1t7QrLXMykh/oz4L1lqveAsaZAmpZB8t0ePxN7ROA==", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEMdE6KAiC4TmNqM4Bt71Nlq7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJRcItIW5R3g9HUNvRJ/XL7q3vK8O0JsuV1oKrzIjJIQuK5IXeXBsvfM61fHg4wyYFpic/Ia2/EMmSIZ43j2NQqw==", "credential": { - "version": 3, + "version": 1, "generation": "valid-current", - "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", - "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", - "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3CTaM180jSh+DN3yEcdUy5NiXg9uiqIbKMXo8tIQfxmhRANCAARaDtotVSlwOC7NQIAf4qDzIzSW8SMsy1Urpmz23gC13FvbhS0QL7EwIdl7kLrQ+Xdnz9sH/szvPtBiGRa7OyXg", + "certificate_der_base64": "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==", + "intermediate_der_base64": "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" } }, { @@ -119,15 +119,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "a57312935fdf35dec444ab43163c7cd9" + "b084e174f44268eb20c9c57c8b657043" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -145,19 +145,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwjCCAWegAwIBAgIUCYrmvIOSVvIhkvPst0TDBpNZxf4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyODAwMDAwMFoXDTI2MTAzMTAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDZ1s/bYy9EOBITGkJJAzjcXGshPnpesRrtmHZ3nIEes5L6TAHZPs77bewZEV0Wpbr+4KsNhIyqZVUsHHh2o6RKjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBThpydnAofy2sFq9nKWpENB8qT6EDAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEArcnhj+PUm1B9B8OrERaTw52CnlWiZWoz2XZP6pNQu5ECIQD/Bt3r1daEOgs9tDvxSghSWBS+nqwfCSmkaU3psFAgfQ==" + "MIIBwjCCAWegAwIBAgIUbbxT5F1oO8a622lOub/ZuFM/CicwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyODAwMDAwMFoXDTI2MTAzMTAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJor0Q5yD/5eZ0R3aG9ExYfqrd7tA1QdDMJ2yINXKWNeky1tiUPo3GMKxeamrh6Sx2XhTPyRTxjDyzLVlfSuFQijdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSxz84fQhhH4M9rSLgGSmAtkarVFDAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEA1wf5UGnba0g/Kiznp2Se8q5eH3YB0oeOnxNiUzxJEOYCIQDVG7cJO74duQe25Z6/VMI/St0mqNrmvFUmoHjE5uUplg==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "b0ea89dbcd73e89014cd1c3a7c2d210a6d3a799a2f0d3960f0f94c2abe7ad503" + "cf4d8ddea4eb7488565aad4a8972f54eb14667b3bba101cad62ddec7a78df150" ], [ "x-datadog-feature-flags-issued-at", @@ -169,7 +169,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQC1xgntdfd9CPWEEvwSc1N+n2L6ZouxrFXAUWm+OQiY7QIgOz1jyEQLtAP5TBkBibhFjYhZrSphlGWu5LfoEmDvRTg=" + "MEUCIQCq4s0R1CNG3jnRd/b5oz3OwQW87duBI+off+4UM0W3lAIgUfc5rIKlrpBUgjlfHYImStzEH55aGZmKxv8pJEFQPaw=" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -177,13 +177,13 @@ "now": 1793149200, "expected_accept": true, "rejection_reason": null, - "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEKVzEpNf3zXexESrQxY8fNm7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAABq4UkQAAAAAGrhSjwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJsOqJ281z6JAUzRw6fC0hCm06eZovDTlg8PlMKr561QNCh1t7QrLXMykh/oz4L1lqveAsaZAmpZB8t0ePxN7ROA==", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAELCE4XT0QmjrIMnFfItlcEO7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAABq4UkQAAAAAGrhSjwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJz02N3qTrdIhWWq1KiXL1TrFGZ7O7oQHK1i3ex6eN8VCK5IXeXBsvfM61fHg4wyYFpic/Ia2/EMmSIZ43j2NQqw==", "credential": { - "version": 3, + "version": 1, "generation": "valid-rotated-leaf", - "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgZ5XjKk1x3NL5z0t26yjCnb3e8/CLj3SPa17mpVAsOFKhRANCAAQ2dbP22MvRDgSExpCSQM43FxrIT56XrEa7Zh2d5yBHrOS+kwB2T7O+23sGRFdFqW6/uCrDYSMqmVVLBx4dqOkS", - "certificate_der_base64": "MIIBwjCCAWegAwIBAgIUCYrmvIOSVvIhkvPst0TDBpNZxf4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyODAwMDAwMFoXDTI2MTAzMTAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDZ1s/bYy9EOBITGkJJAzjcXGshPnpesRrtmHZ3nIEes5L6TAHZPs77bewZEV0Wpbr+4KsNhIyqZVUsHHh2o6RKjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBThpydnAofy2sFq9nKWpENB8qT6EDAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEArcnhj+PUm1B9B8OrERaTw52CnlWiZWoz2XZP6pNQu5ECIQD/Bt3r1daEOgs9tDvxSghSWBS+nqwfCSmkaU3psFAgfQ==", - "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgwC/wEAvEHp17U5iE9eBVoTZTRKZG21oZSpbTGLDFW3ChRANCAASaK9EOcg/+XmdEd2hvRMWH6q3e7QNUHQzCdsiDVyljXpMtbYlD6NxjCsXmpq4eksdl4Uz8kU8Yw8sy1ZX0rhUI", + "certificate_der_base64": "MIIBwjCCAWegAwIBAgIUbbxT5F1oO8a622lOub/ZuFM/CicwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyODAwMDAwMFoXDTI2MTAzMTAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJor0Q5yD/5eZ0R3aG9ExYfqrd7tA1QdDMJ2yINXKWNeky1tiUPo3GMKxeamrh6Sx2XhTPyRTxjDyzLVlfSuFQijdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSxz84fQhhH4M9rSLgGSmAtkarVFDAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEA1wf5UGnba0g/Kiznp2Se8q5eH3YB0oeOnxNiUzxJEOYCIQDVG7cJO74duQe25Z6/VMI/St0mqNrmvFUmoHjE5uUplg==", + "intermediate_der_base64": "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" } }, { @@ -210,15 +210,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "5009996309613ee95b60b6089a8f6160" + "ec61af9e519a35c38a1e2171cc461a56" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -236,19 +236,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUOdTAzaKo4DU1cu+ya6eyWJKtVkwwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMB4XDTMyMTAyNzAwMDAwMFoXDTMyMTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDhN8Cx5Y3Hj1Nsr1pB34+IvNSVn2oDJoXr5DSujRN17xcwY0S1NTg1sTpGWAGHF860c4Wo3wGzCiN8HWpQmkMGjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTebim8Q4xa/S4xPpdkFgIWusvpLjAfBgNVHSMEGDAWgBTDyKBSsK2NJjYR2vE8mfIPY7o0ZTATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEArPnGRC4MSM3WA9ni+t8lZxkQssg/9wyI5UoDruotosYCICCo2PfwRok4KXUJ0Ow2ZCY9v4UGwKJ8Pwmf36uFDras" + "MIIBwTCCAWegAwIBAgIUELzwFGNXZgLkQw4JTzbWZU9xKsQwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMB4XDTMyMTAyNzAwMDAwMFoXDTMyMTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKLQ+uG6YnviGgd69e5UjzNH7wOXELWuE55W7Gj1dB3nebFMpzkPD2da7yt6krkOiome9eeW5kbCXjvE5W5TOSijdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRqkRAgOB6L04PmS7QvyUSU6UkVczAfBgNVHSMEGDAWgBTgfi7nbPGJ/PkdeLXNeS2REcCq5jATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiBDUlLKHbgfcHfJI+f+fYQmX1ULCH1pW1rUt2/Tph2bqgIhAP7OCQiHespuBPI++IPo78YahJkzqHgHb56gichcwC7q" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUfqq7qR+DolDXyh+j4B9HjcA7h3YwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTMyMDgwMTAwMDAwMFoXDTMzMDgwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB4VeIRN2/U4pLxIzZ3svcZ3wrtKfZAXKxFDKe/MWaa8lP1KzKKqZUKilzzZ/sSRd6G0Vi9SurI/4svZZTl3Ei6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMPIoFKwrY0mNhHa8TyZ8g9jujRlMB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCICv0yIXzPdOh4QFZ9j7EZD7H8yiMwvgXORljjGa6fpOVAiEAtng4stktkYRVEFh7h7qA7cE6q+4hMvPYueBqGZ6x7LQ=" + "MIIB1TCCAXugAwIBAgIUPuerTobptaJ/3XUE2PJiVuugBZowCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTMyMDgwMTAwMDAwMFoXDTMzMDgwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7Mk0KeIDxf851NPhhiw77R4jF45W4wdxFCbsttSWvv+i2XQXpbGPrXX0NK1HoLzvzb8XDfYp403KsUGPlb/n7qNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFOB+Luds8Yn8+R14tc15LZERwKrmMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0gAMEUCIQC8jGuYxrpN6/HynW9uE1LGnvyILs4vZ1W20NuN+jlPigIgQ5LjnsplGtwbkGQPUEMZalz3ZM1d0cZHWfv+t5yvIF8=" ], [ "x-datadog-feature-flags-certificate-id", - "59bd015beb16544539417a8e215eb3d6fcf75ddc500bcad18de794f453886e67" + "3fac7cf4052f56246f58d4422fb163a5acfafc336dc73291af0f4003da157dd6" ], [ "x-datadog-feature-flags-issued-at", @@ -260,7 +260,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDfoUrOV/atQoUSB2c8NYfo0r5gEJPNvpTFlCD662u55AIgKxOgd5DbLuNCPrYXYmO0pBBsVYvRir1ZzWbj6Vy/Ank=" + "MEYCIQCLIyP9lCVEqhrfcepTbsUp3Pk3CvdQ6utsdbuAZaGwEgIhAIjDNHBAWbl48IFPDT5hKV/h2pInNlgtpTPG50OeCFVM" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -268,13 +268,13 @@ "now": 1982451600, "expected_accept": true, "rejection_reason": null, - "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEFAJmWMJYT7pW2C2CJqPYWC7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAAB2Kc+QAAAAAHYp0LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJWb0BW+sWVEU5QXqOIV6z1vz3XdxQC8rRjeeU9FOIbmcSaNyVazpm07iiAuMDHi5DnIRAMFcOA2KxY9Iy7hOnBQ==", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEOxhr55RmjXDih4hccxGGla7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAAB2Kc+QAAAAAHYp0LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJP6x89AUvViRvWNRCL7Fjpaz6/DNtxzKRrw9AA9oVfdbsrwZDVu1DbcPUGCPr+3U9ajZ72TmVotSFkuEUgmVJHw==", "credential": { - "version": 3, + "version": 1, "generation": "valid-2032-rotated-intermediate-no-history", - "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgclKiYwah80EHUvy7M3UVuw1XUP6IFGZXHTzZIoN7JcuhRANCAAQ4TfAseWNx49TbK9aQd+PiLzUlZ9qAyaF6+Q0ro0Tde8XMGNEtTU4NbE6RlgBhxfOtHOFqN8BswojfB1qUJpDB", - "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUOdTAzaKo4DU1cu+ya6eyWJKtVkwwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMB4XDTMyMTAyNzAwMDAwMFoXDTMyMTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDhN8Cx5Y3Hj1Nsr1pB34+IvNSVn2oDJoXr5DSujRN17xcwY0S1NTg1sTpGWAGHF860c4Wo3wGzCiN8HWpQmkMGjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTebim8Q4xa/S4xPpdkFgIWusvpLjAfBgNVHSMEGDAWgBTDyKBSsK2NJjYR2vE8mfIPY7o0ZTATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEArPnGRC4MSM3WA9ni+t8lZxkQssg/9wyI5UoDruotosYCICCo2PfwRok4KXUJ0Ow2ZCY9v4UGwKJ8Pwmf36uFDras", - "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUfqq7qR+DolDXyh+j4B9HjcA7h3YwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTMyMDgwMTAwMDAwMFoXDTMzMDgwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB4VeIRN2/U4pLxIzZ3svcZ3wrtKfZAXKxFDKe/MWaa8lP1KzKKqZUKilzzZ/sSRd6G0Vi9SurI/4svZZTl3Ei6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMPIoFKwrY0mNhHa8TyZ8g9jujRlMB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCICv0yIXzPdOh4QFZ9j7EZD7H8yiMwvgXORljjGa6fpOVAiEAtng4stktkYRVEFh7h7qA7cE6q+4hMvPYueBqGZ6x7LQ=" + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgC6muD4mmxVRTtVOBrzBPgiAUnq+Ow0H/KOBkjszlUcqhRANCAASi0PrhumJ74hoHevXuVI8zR+8DlxC1rhOeVuxo9XQd53mxTKc5Dw9nWu8repK5DoqJnvXnluZGwl47xOVuUzko", + "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUELzwFGNXZgLkQw4JTzbWZU9xKsQwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMB4XDTMyMTAyNzAwMDAwMFoXDTMyMTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKLQ+uG6YnviGgd69e5UjzNH7wOXELWuE55W7Gj1dB3nebFMpzkPD2da7yt6krkOiome9eeW5kbCXjvE5W5TOSijdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRqkRAgOB6L04PmS7QvyUSU6UkVczAfBgNVHSMEGDAWgBTgfi7nbPGJ/PkdeLXNeS2REcCq5jATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiBDUlLKHbgfcHfJI+f+fYQmX1ULCH1pW1rUt2/Tph2bqgIhAP7OCQiHespuBPI++IPo78YahJkzqHgHb56gichcwC7q", + "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUPuerTobptaJ/3XUE2PJiVuugBZowCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTMyMDgwMTAwMDAwMFoXDTMzMDgwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDMyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7Mk0KeIDxf851NPhhiw77R4jF45W4wdxFCbsttSWvv+i2XQXpbGPrXX0NK1HoLzvzb8XDfYp403KsUGPlb/n7qNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFOB+Luds8Yn8+R14tc15LZERwKrmMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0gAMEUCIQC8jGuYxrpN6/HynW9uE1LGnvyILs4vZ1W20NuN+jlPigIgQ5LjnsplGtwbkGQPUEMZalz3ZM1d0cZHWfv+t5yvIF8=" } }, { @@ -293,15 +293,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "40e3e0cb8e1a77eba5e5472410bb95c7" + "978aa8a4db6c2abc2b02d25f5ae1f209" ], [ "dd-client-token", @@ -331,19 +331,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -355,7 +355,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCIAF6e70c1hP6GbQ7GB6Go0FaOkZCg6qDRmN8Q5qQ5XtXAiAc/T+u9THJ2M55QuTZZDxp8gFMEcivebzRJY0OmTNp6w==" + "MEYCIQD1xqwACO9mhmGZhrcZqSIKNcR9DCFEAbumv39iXZZZ8QIhAJM1QASAfflzBR1vgnjl00ANW+XU4rIIFDgcWDG2JXJy" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -363,13 +363,13 @@ "now": 1793062800, "expected_accept": true, "rejection_reason": null, - "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEEDj4MuOGnfrpeVHJBC7lce7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh8Q8ICUwTvIr1x0EuMyLFsMcYoDPLjOM+HbOot30IzBxAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAAAAAQAAAAR0cnVlAQAAABNyZXNwb25zZS1zaWduaW5nLXYzAWei0CtlNcV8HrSmyHb7oVR2HhX8LBssttu2KRTUEJRwAMgAAAAAat/3kAAAAABq3/i8AAAAAAAAAGwY6KNgVa7BQb7G+/5J3ZFrhCboCXJAROsfMjXR6jRFSRI0NbmFNNElgTGTPIc4ISnA1g54J2ZUHJMsLBPHI9/CQodbe0Ky1zMpIf6M+C9Zar3gLGmQJqWQfLdHj8Te0Tg=", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEJeKqKTbbCq8KwLSX1rh8gm7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh8Q8ICUwTvIr1x0EuMyLFsMcYoDPLjOM+HbOot30IzBxAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAAAAAQAAAAR0cnVlAQAAABNyZXNwb25zZS1zaWduaW5nLXYxAWei0CtlNcV8HrSmyHb7oVR2HhX8LBssttu2KRTUEJRwAMgAAAAAat/3kAAAAABq3/i8AAAAAAAAAGwY6KNgVa7BQb7G+/5J3ZFrhCboCXJAROsfMjXR6jRFSUXCLSFuUd4PR1Db0Sf1y+6t7yvDtCbLldaCq8yIySELiuSF3lwbL3zOtXx4OMMmBaYnPyGtvxDJkiGeN49jUKs=", "credential": { - "version": 3, + "version": 1, "generation": "valid-effective-token-and-authorization", - "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", - "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", - "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3CTaM180jSh+DN3yEcdUy5NiXg9uiqIbKMXo8tIQfxmhRANCAARaDtotVSlwOC7NQIAf4qDzIzSW8SMsy1Urpmz23gC13FvbhS0QL7EwIdl7kLrQ+Xdnz9sH/szvPtBiGRa7OyXg", + "certificate_der_base64": "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==", + "intermediate_der_base64": "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" } }, { @@ -396,15 +396,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "9a1984ebf1a183ce8d2de04a06ba1a28" + "f761d583fb7db3d9fb7c9d61ffea04fb" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -422,19 +422,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -446,7 +446,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEYCIQDu3EK1AwNtmnVx93DwlA+IKmi0nI/EgvpWHWR7P9Jx+QIhANS/ehUvKD1O+C+WC4BAKk7lViDJA/ujXCYozYwvSHUv" + "MEUCIAs2gaOYJe4m9gOvcivU0WVJs1JI+DWTG+a2T6pCcFiIAiEAxKjjrtPUrDYD3rCy9gSLs28Y6u1s/01Z47foFgcOcAk=" ], [ "content-encoding", @@ -459,13 +459,13 @@ "now": 1793062800, "expected_accept": true, "rejection_reason": null, - "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEJoZhOvxoYPOjS3gSga6Gii7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJEjQ1uYU00SWBMZM8hzghKcDWDngnZlQckywsE8cj38JCh1t7QrLXMykh/oz4L1lqveAsaZAmpZB8t0ePxN7ROA==", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEPdh1YP7fbPZ+3ydYf/qBPu7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJRcItIW5R3g9HUNvRJ/XL7q3vK8O0JsuV1oKrzIjJIQuK5IXeXBsvfM61fHg4wyYFpic/Ia2/EMmSIZ43j2NQqw==", "credential": { - "version": 3, + "version": 1, "generation": "valid-gzip-application-bytes", - "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", - "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", - "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3CTaM180jSh+DN3yEcdUy5NiXg9uiqIbKMXo8tIQfxmhRANCAARaDtotVSlwOC7NQIAf4qDzIzSW8SMsy1Urpmz23gC13FvbhS0QL7EwIdl7kLrQ+Xdnz9sH/szvPtBiGRa7OyXg", + "certificate_der_base64": "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==", + "intermediate_der_base64": "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" } }, { @@ -484,15 +484,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "2f9d5a06a9a94c40837154e6af5dcc48" + "a4d64860448a5590839bca5da9145485" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -510,19 +510,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -534,7 +534,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIDYXafrhSpGBWgvMpAVPmO80MlVubed2NDd0ypOSU+eRAiEAvcekx0fUoiGVkACkk54zXAyUKSwD3AfxjIXA5OamOTA=" + "MEUCIBAXoWE/r3pVjS1VgSHkb0M5guk3rXcJ4J70gzKlXyUiAiEA0FAFPL3pOFgWXNqdMiHjQe08D9fZntc5kCTiiXyksxI=" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -542,13 +542,13 @@ "now": 1793062800, "expected_accept": true, "rejection_reason": null, - "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAElsyMDAxOmRiODo6MV06ODQ0MwAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAAAAAAAQL51aBqmpTECDcVTmr13MSLtFNiQ2aDDsic8G9+jVrApunQq/2rpJ/EIfKA3ilyeH/o2DxNwE/POvEX9MM4v972AXEbsXHBmGt+Pv3bnUB08BAAAAEGFwcGxpY2F0aW9uL2pzb24AAAABAAAAE3Jlc3BvbnNlLXNpZ25pbmctdjMAAMgAAAAAat/3kAAAAABq3/i8AAAAAAAAAGwY6KNgVa7BQb7G+/5J3ZFrhCboCXJAROsfMjXR6jRFSRI0NbmFNNElgTGTPIc4ISnA1g54J2ZUHJMsLBPHI9/CQodbe0Ky1zMpIf6M+C9Zar3gLGmQJqWQfLdHj8Te0Tg=", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAElsyMDAxOmRiODo6MV06ODQ0MwAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAAAAAAAQpNZIYESKVZCDm8pdqRRUhbtFNiQ2aDDsic8G9+jVrApunQq/2rpJ/EIfKA3ilyeH/o2DxNwE/POvEX9MM4v972AXEbsXHBmGt+Pv3bnUB08BAAAAEGFwcGxpY2F0aW9uL2pzb24AAAABAAAAE3Jlc3BvbnNlLXNpZ25pbmctdjEAAMgAAAAAat/3kAAAAABq3/i8AAAAAAAAAGwY6KNgVa7BQb7G+/5J3ZFrhCboCXJAROsfMjXR6jRFSUXCLSFuUd4PR1Db0Sf1y+6t7yvDtCbLldaCq8yIySELiuSF3lwbL3zOtXx4OMMmBaYnPyGtvxDJkiGeN49jUKs=", "credential": { - "version": 3, + "version": 1, "generation": "valid-ipv6-and-absent-optional-headers", - "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", - "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", - "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3CTaM180jSh+DN3yEcdUy5NiXg9uiqIbKMXo8tIQfxmhRANCAARaDtotVSlwOC7NQIAf4qDzIzSW8SMsy1Urpmz23gC13FvbhS0QL7EwIdl7kLrQ+Xdnz9sH/szvPtBiGRa7OyXg", + "certificate_der_base64": "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==", + "intermediate_der_base64": "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" } }, { @@ -575,15 +575,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "d39ae58b246ef557c83d63dca5c4bc3b" + "b3af7f5ee6238788725f7994369aea7e" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -601,19 +601,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwzCCAWigAwIBAgIUR01KujW30ZSH+SB4MqaD1LrVQDowCgYIKoZIzj0EAwIwJzElMCMGA1UEAwwcU3ludGhldGljIFdyb25nIEludGVybWVkaWF0ZTAeFw0yNjEwMjcwMDAwMDBaFw0yNjEwMzAwMDAwMDBaMCQxIjAgBgNVBAMMGVN5bnRoZXRpYyBBc3NpZ25tZW50IExlYWYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARQyuc8IhO7DzLg9yDu8IBdlXfkiToIVWGE2yMJctw84HqCOXo0bequKqrKUIMfAWWIXwlE3YJ79AQ/x8OAiJ0so3UwczAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQU9j7wr40u3zCSS+EML6KvW4fpmnswHwYDVR0jBBgwFoAU3w7QmK+wzWvGBa7VggK5C/yPx6wwEwYDVR0lBAwwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDSQAwRgIhAIzxN8/DDAIc9oqN+JD4cs8oqW59TxqUyeesQW0x3mx0AiEA9cjW17z9uk4mgmZMPhj2/+7gE+Dmg6McC4LiHrO/ZFU=" + "MIIBwTCCAWigAwIBAgIUNSnieC/lr1+SySpX3qFmltip1JUwCgYIKoZIzj0EAwIwJzElMCMGA1UEAwwcU3ludGhldGljIFdyb25nIEludGVybWVkaWF0ZTAeFw0yNjEwMjcwMDAwMDBaFw0yNjEwMzAwMDAwMDBaMCQxIjAgBgNVBAMMGVN5bnRoZXRpYyBBc3NpZ25tZW50IExlYWYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARcE2mhNdQh/k60iz/gwYRgD3fokpfPRHY71cnDC3qUdInCQSMyDFcy7qpZma5TgQtDyxPVELoYX2cruXPkPJl7o3UwczAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQUU6ZXP4KRvaEMJ9U8xY7RphbeiVowHwYDVR0jBBgwFoAUKR7SpwWRm1+g/VdCsO7aVB26NtQwEwYDVR0lBAwwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDRwAwRAIgbyYGQcIFX1DcxFo54Ykh9iIuvdoDMpz/nkOi3kewrvECIGTe6xq2uK215tyaZMHdPEmr5ziy1EEk+jxFffSSkT2m" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIBsjCCAVigAwIBAgIUMiSQYCdZJ53qEajapYYLdWtT4ZswCgYIKoZIzj0EAwIwIzEhMB8GA1UEAwwYU3ludGhldGljIFVucmVsYXRlZCBSb290MB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJzElMCMGA1UEAwwcU3ludGhldGljIFdyb25nIEludGVybWVkaWF0ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOAVubPPE1AgWXEFlPLVlaRSrEDCxU9Bsj8os/th6mgINiAk3Xzn2Ew/HR14jnDtWXOmdPSgomGNhxNRYRUXwZujZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTfDtCYr7DNa8YFrtWCArkL/I/HrDAfBgNVHSMEGDAWgBQ2vb1T7cnAs8BX16V3lofR2fE1+jAKBggqhkjOPQQDAgNIADBFAiEAjdZ/KNg/Z1BUEQLjn3tGzsfSbhu1kSenFGAw0SHmw58CIDDq8+isYIOtP8ODyTcF/zSItxGsWobueeVa2zWYZ7Td" + "MIIBsTCCAVigAwIBAgIUaeod8AKuaJbjjboA/CcCw/nrxEIwCgYIKoZIzj0EAwIwIzEhMB8GA1UEAwwYU3ludGhldGljIFVucmVsYXRlZCBSb290MB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJzElMCMGA1UEAwwcU3ludGhldGljIFdyb25nIEludGVybWVkaWF0ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI98J29jBUK2Cw1AiuTBAi1q3wlaMnKTh/QVvCqnomcAvLcKqK0nRvgUlz5ami5y9FejNb+xSRUDH5IVhVpLxJijZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQpHtKnBZGbX6D9V0Kw7tpUHbo21DAfBgNVHSMEGDAWgBSGLmdOWQCk6VNv34Z/MrGD56e8wTAKBggqhkjOPQQDAgNHADBEAiBD+8k3LfXdZT9dDKuvd6eUVnUhdaNIK+jMPkj24Gv1SgIgCpNoLLEVq70TDtD8DAxtcUJuTGyzQ/EELuKLULoadXY=" ], [ "x-datadog-feature-flags-certificate-id", - "65acb71e56f3fe92cdd01dcf3f983a00cc7b3d23a08a1b0b4b1a62233a68a53c" + "58525b25bc94e658a751d51bfc84463a80c8596633e394e7d20aca3a35e5ffdf" ], [ "x-datadog-feature-flags-issued-at", @@ -625,7 +625,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEYCIQD8+QiMYFXaWlQ1TPdOYZ6D/085CukMQsaQx1URQXeDQwIhAOdLVyiS0HGLPn9WpG1csppL1+nQXAmJoT5ucZQ3KRGq" + "MEYCIQCCxhskwSMt5i+toRPke2sfrw/0eIyvdw8/4Et+ygKKOgIhAJ90XWtg/E9VyogRKrMFGiDARkr9bt2xun7E0w8SahLn" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -658,15 +658,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "7b2c7757790eede89cb71ad9c656ca4b" + "0e8289ef86c04552d8a8a14238a628af" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -684,19 +684,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIB4jCCAYigAwIBAgIUG1b41wVGRjbhFABDEakfY4khm/swCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABC67+zpCqw/CHKi1osJfMdE1qIUs0sRv0J/HYiU/esIGHfMZ8+ClqeIhkZvOzSJJlqr43QhjsR3mWlXT5l32DoKjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBQ95tYQUrFSbrOtGwiI6Wn5wZVR/TAfBgNVHSMEGDAWgBQRXz3qJ3djKWCjEcPylQXIRl952TATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAuGhRR7Islr/3DY8o/9lo/Q9kjkybLY9QM11/h/+ZRzAIhAIZenSXlIvuJUOweRK0vDUaoor57TAGncPnVjiQEHwNm" + "MIIB4jCCAYigAwIBAgIUYIfR0WvsyOBVFMXhQgCC5jmnBVMwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBrJ7/DDvElwApEqI0gN84BmNy15yrpMEZlf1qmHB3K9ATRORw20AVhA83D63wtt2kLAiEfN+IfA5zelAdDRyuSjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBQ5ijDvmIYjuzsNmBK1xZp1N9CaRTAfBgNVHSMEGDAWgBSCtA8JLDNohBqwOFXNjySpoCum+zATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEApXGUQlPjvdK9Ivilpa2vcs6oB4fee4GLRu+49D1qQrgCIBImHWPCj1TDlZYC4sUzcHpLyj2JBV0bC8bjc2G8kV8d" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "21c6e2f799192661918bd7a8b6c0938868555aeda04a3680e8360f422d007d2c" + "2b34e67e464c65984be02e70f0f097a337a8bb4558ec7fe0f7dbefca2805da91" ], [ "x-datadog-feature-flags-issued-at", @@ -708,7 +708,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCIBznlqdOl5LITwGrWIqr2hwcdv0pE7PLZQRFuBRszzAXAiAFxxDCBjWGOliln63sQm3RD4yemb3yAwWNAEWB5V9rBw==" + "MEYCIQCWFDwkpVCs1f6dxUaznhfxtXhwVBVlBYnusbv7Qfph+AIhAOMhMqn1XHw8F8GqwSe+9igpggD21VhBXA/2qFgnvKdW" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -741,15 +741,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "d7bec32cabcb005c2a90e11df25c9267" + "010af83c18b7d379c974a1b5777a2942" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -767,19 +767,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwjCCAWegAwIBAgIUMggvVwR7xFECAuMqqbZ+9kkvQaEwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNDAxMDAwMFoXDTI2MTAyNzAwNTk1OVowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABK92yS536EMm7jNjjgmmlDFcKvYqJJBiJYpJHcPo4jL5ryv88982nLQYwZ3OEqVsRS1hWQsrGUIkew3ttCROkSSjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSsCWgXhrt0dIKsWp+Lmvg/0W8JSzAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEA6Jn8OZxSdAMifL+xiVYYhr7KPzuaX9jGDHFXZphiywsCIQDsVZimSqYseFk/1i7fNKfxPY1nERY6XRXxMzB3qsIVoQ==" + "MIIBwjCCAWegAwIBAgIUP471IdBbxQuvm51RQ+tJ60yKNREwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNDAxMDAwMFoXDTI2MTAyNzAwNTk1OVowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFHMLt22A1atapOo7ttDTZBTRdY7D7pxv9oJOPDn0iOwO7qebd58ejLEFBGWhPyOCTdXjvYxER9pFOEUUCql5wmjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTOZeOOjXOC6Zgs/pX4epx7Ym7UrzAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEA6fdFGKCEf/ps/Vy7gNXWUMj1tPSaFnxdRia/l1sWo9cCIQDSTCbXL6sDXmWETrTuqmsC2Z406PruucGbS5viOH/aLA==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "9c73cc044462773778bec8d27406f0393be90e41a294177b2602fad5d4b6e560" + "2aa858bace1a5117edd7635cae459f22e35272344a7d66a3ceaf2abfaa4b7baf" ], [ "x-datadog-feature-flags-issued-at", @@ -791,7 +791,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCIDwET9qoNisIdhO+TqzGIAZG8Xt007t3NWibgMlPD2+VAiAHE/sr58K6bc0bAR6PbRfOuloFugZhKhLommv0mlBp2w==" + "MEYCIQCxZbqnWeYUdZpfsBQT21qCoS8W5ojSXUaHKg4YPgA2AwIhALxwsGksh6poPMgX8ZFEUrv7lVMhKGyY9OFWs6VCrp/v" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -824,15 +824,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "96cd1d39a326cc10444c4c9833db1cb6" + "c72c65bd4026fa000618d359a02851ed" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -850,19 +850,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUFmIQS91j9WiAkEH8hxzeQTPU3MMwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAxMDAwMVoXDTI2MTAzMDAxMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEcXepJ945Er0MGoJHc7lmX1xZjV60lUYTcgoud8w3sNq0nNLePAPHBUXA2KlDZ3g0SHPYltEpTLqFSunaWOj3ejdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSLLlUQ9jIJL2neWa402tzFD+SpMDAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiBaWENKkUSYQJbzoj0iLniwWEOis4qSRf3f+c3KV/k2TgIhAJPW5A6wHMi/tdzLcck8GtOdXt5ldEtDjbynmqMqA2jz" + "MIIBwTCCAWegAwIBAgIUNngD5VRqFvvITVgbnSFXxS5H1jAwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAxMDAwMVoXDTI2MTAzMDAxMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKJ6NzGdJp9aH6XZbn60/YGgMYGFQIZj7jCgaJxl/0FWckt1MkRbLXvj29ddE0ZZo9hZbzn0l34GpEfMI04Vr5yjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRtdA9u0ydqWoezzKYRPPVpB8i9dzAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiBb5Ck0qEKb0mvd+zZa5R+Ia37w79HVB+GDHLpNkADyFwIhANeTH/jzPkYx2TzZKtg3z9PEo8LFQrhgf1jfBL3OJ7Y+" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "a537536a79787a098cd1feb5222556e7f53c4f1eae7402adb20f94b539a48f1a" + "330eb5c3438a6b9abdfecc90c04d98a845eb9afda7d04f64a823275a05a2d75c" ], [ "x-datadog-feature-flags-issued-at", @@ -874,7 +874,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQD3O0lMT1aUGWmKUxBi8yIOqkROSl52O7zdCLOrZSu5tAIgapjoMQUV4fKGx44w+4a5G/7jpCbWl8bI7Q9GRxBbLLs=" + "MEYCIQClzJIkNmkYd1whftbB9dlOLg8MBpuVzPeVFafWnX5FlAIhAKaxgKDUiWLG6pNNWJzASPW6nn0FCg3sXHKjFhY6n2ni" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -907,15 +907,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "49bb1efb124303ff6ef8992cdda8a322" + "71fce3a2123581ff2d96d741f8ec97ac" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -933,19 +933,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBxzCCAW2gAwIBAgIUU2HY9yoknO5Cullul/eQqhIFZxMwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGSe7b1fYmLKc2xjnlQIfoGf7TQi5oPh78r16mAIa2TAhrYMk+HZ3JAsbhaC4B2lDWjGNqBkzhp2mQ+clTGzzXOjezB5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTxlx3Dve+PCpvsZt9IjkAV8I7fjDAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA7ItAfO/ZzWI4l4pgVfxkZg/tEkths/Aqa3joy8BRHhcCICx/e2G0a1HvypDqj7DlZji/gPNTOqUb+S7t+hZvvsNI" + "MIIByDCCAW2gAwIBAgIUCmLAE6HQivvTntDvMbq7wpqtWvUwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJWcvmBJkMaMEkukp55SjQjRmj85pl5RF/7gB9frHzGI2TdZLSACnuzjrh049Yej4N1ZEmEeacs9qYzFPR0IePejezB5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTNJzFEK0d52f9tbcxyILY7K2pk+jAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAgArTas2GlLNP8t/9HKPvChSEErIdl7xogH5/89P+ibICIQDUk05P3yM455R0ebalB/4M9UCyVPGP0ztJZpISFboAlA==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "92ad2dbe157027c5946297e03806da211ca9081369a8cb806fbc39839270dde7" + "96c2b5c3acd536df0aab7a5812d8c8053094f52fd6e4770d364502c6ac0442d8" ], [ "x-datadog-feature-flags-issued-at", @@ -957,7 +957,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIGWCURJtYX7TqQNvda/vXO1M1C8PzKMs2nGPdlmKex5XAiEAmgAb6XeADvg6dzPCXH0vFvuAQu8lFQdwSu4kiitjXwA=" + "MEQCIBbTfossIOLuB0mIYFIuuXaqQoiiJ2oa+RLmbEFwSh91AiATJbPUZyiV66mIM2+ZLADmIXOlqMq+zndzTUoBxVfSHQ==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -990,15 +990,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "c998261cd393f970d9cff73323d27955" + "ff1e84b2cc4ef66c975cbdc0696ffbf4" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1016,19 +1016,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUNbhRJ750WseYJo0e7imv/N1ZSJQwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN1IYd6W/6pDX0B+cwi5ipyLcKlS8IQy6+kbNyXT9T+uoRYIJsp8xa6Jplj0SwuFNieHRumUe4/ut3FStGYWn6mjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdDgQWBBRhNQ+8dQwb3adhPLcvXuzZdnrmdjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAoGBhDjjyaHfuXJT/swr3bKYn1+4eDBkWPCBx+kO129wIhANtFXpoEs1QlgEDa+GqUL1vmadwHWHFLrmZ3bQ0o0Srb" + "MIIBwjCCAWegAwIBAgIUB7euD87CbExMn9wWKxFplRgrjgkwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEFSMbdya3NWK7bNqo5nym8Fy75zQMt6nqPJrGS4w7fjC1hPpizxZQ2EBy2XguTeNmaoNDEhAtgjmox+huEOYE2jdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdDgQWBBSWEQboBSHVxiacRn6de23RqWC+ojAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAuFqnzKkWe3RChUOz9q7wXZQl8Zndq/iwJURvD1JY/XoCIQC8oSGmnx4nh+z2MU7VAp3J5z2ztuWMq0FzvtiDkwMjwg==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "bf8683ad641410f56d748db3133605a0b773b4464bd13c51be5df0abbee3a4c7" + "aa89ca53c8c2c9e66e67b344789b7a6a526a18951d784c34601329ab6a9dafc8" ], [ "x-datadog-feature-flags-issued-at", @@ -1040,7 +1040,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDmDqZgkjc5LClK4//3S3AHCz/WjvyByP9c9YSmU1XHtwIgPfBzLXM+zy6bUYlmzgx8JeE+LTNSlYE0mvMeWtKB2v0=" + "MEYCIQCrCEfBj9R1ghDomUoWPGK8rFEDZ45oYjO4k2sWE80nhgIhAIIi1N52/IxvoRzO4Trj+WT3onkC9D2Dix0AFtluvPu/" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1073,15 +1073,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "f39a233ff3f0484b2e4bc978e3525835" + "97d70c3e4d1b5f9fe3998734bef1af52" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1099,19 +1099,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUD4Hctul3N+IOll0Keahh7fPqZ54wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBn2Nki2E+OlIDNbPm5zXEgkn7fIe+zkVqc8udgF3FMuIbAOC+tjj//khl/ZgJLJgkv4FvMeUwW9AIJaEQIewpWjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSft9p65fPsQ8WRRfrjhmMBhuJ8ZjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgNIADBFAiEA60CyQEHauj2gdVhjuWxpCBoWbT1dj0MNarDHm/ICNloCIFE924K31AIYc6t2ipV+VtwjI0S8aqmx5fLIqldUIXoF" + "MIIBwDCCAWegAwIBAgIUXkunTy2WAMJdJJelARxx2OSuLyEwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH15T04fOBVi6o6bTPQJv+Oo5/ZnrjI1Mi9LruZ6nA1ko1sxwJup8cFxL8uXWM5lGMnbNBqxNMXAn+nVb1cGbL+jdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSaYOURMyjEqHxJebzg9J2F+WiN7TAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgNHADBEAiBfEDnYPzp4qePWnJ7xqjRp8ebcVqZFO/y89SG1o6LTXwIgCWcJBuPEBSTjJ+gbO1H7kJ8HOA5M+fA7iWBTzseQvwg=" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "3b7f82622af0e82930e22482d92a77c9040a6a168b2d1ff7f7efabb8c91d27e2" + "9393ba9d2c0145915f252190454710fd54e670549948cab1e1ced7936caf578c" ], [ "x-datadog-feature-flags-issued-at", @@ -1123,7 +1123,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDRXC53O/orHtNLSlm5FJsUolP+MFeWMDBHW+g1a9fQSQIgVvxKRUPLR9rQaQ/3f7D6I7z+NcQKZwHGogPEQo7KkKg=" + "MEUCIGwaLhvYnBGapsVtb1zdZXVHEcknrrijuqfiKBMSttnxAiEAsNBSW8oaWbYTRyJmRzZi2lmdoHorghhukCSxVVIO6a0=" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1156,15 +1156,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "d24eb62b25289d1cd9230fd776a1f331" + "e43ef752cb2a4faf58a916d26629df6e" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1182,19 +1182,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIB0zCCAXqgAwIBAgIUc2eHeKB3qvj5Db83E2MTp4CzoNMwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEjeEC5tmNRfquiemzbXhyIvuSmMg1eCt6Ds5NvoQRatrdxBcfP/rsTSYgqWMhOVvrcwoNh5YyQPy0WB9MwbRSSjgYcwgYQwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFJ0QDb+PehkO8+Y14ShuRbotCB4EMB8GA1UdIwQYMBaAFETUQiFxL8NVpenIqnbfr/Dw3ZR6MBMGA1UdJQQMMAoGCCsGAQUFBwMDMA8GBioDBAUGBwEB/wQCBQAwCgYIKoZIzj0EAwIDRwAwRAIgd8dK77Y2LA493zr3V6M2tvzuHt8xrMx0DiBVY4fFB2YCIHo665MsxsZVY2XWdSYH8HWN+52IaZEqg/Dd8mzO5Pbe" + "MIIB1DCCAXqgAwIBAgIUAr+wnZ8YHJbZDn/WcFSdPvvH98owCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKIYbyEYqturrj00tWuUph4+JaXgLgrS4jEE0CyotrdNSkah3R9M/1T5NG5vdbwZOaM92FdMTjTBd/XKL7fn1fWjgYcwgYQwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFMrc7p3+9P+iIO0kZFm00gILuuYyMB8GA1UdIwQYMBaAFGflQq+p4fra5WqIDdjQE7XLbnlEMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA8GBioDBAUGBwEB/wQCBQAwCgYIKoZIzj0EAwIDSAAwRQIgR+JG/PmiLKRvhN3foK4VSbXNH740nBhtrXYa6NF8SJICIQDtkjyDdxZUciP/TyALVZcOB4Xo99mNoCwFNyLhCX/fjA==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "b42d34a4ff59712064ee4ec8beec73e2bd6f8e654ef80f723b12fa50514533a6" + "238dbeae944be5435f22b6b47033de06ab849aedb9dd3bd34f3da6d191e41dc0" ], [ "x-datadog-feature-flags-issued-at", @@ -1206,7 +1206,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDwZtEIjtIgHGy/tn64mncJo2KSX/GLDUUUotZeg+OafQIgJIfMYFObYu1ayIjI92BWMA/fNPvTbvKCWhd/WOaLQKM=" + "MEQCIFORPhE2OBRvUMbgDU2eUdYAN1Bx0O3vBqfNpjgepY1LAiAVC9juuKnmWLC8sgngi9FVruXUFPc21wBfSxw/LGmGGA==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1239,15 +1239,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "069868ce9267d621f408d4d27752cb47" + "f605458fd30d1e49d8e0399b26946802" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1265,19 +1265,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBujCCAWGgAwIBAgIUU0DvglbotNYV5Lvbzm1u92OveekwCgYIKoZIzj0EAwIwIDEeMBwGA1UEAwwVRGlmZmVyZW50IElzc3VlciBOYW1lMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLYVMYikOTRROg6tQgV8W5Cf+eXXz0y/ClxyEnhP4++fYrJ6M/d2nqq+dfI08uzIkhQ+T7iU6zsCG3q0zqT9lJajdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTxFMWTnz6cb8URWXVcMF7gxXIEGTAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNHADBEAiAkMHdI8xvs2Lmow8kkGwAQTmfo+AfpL7hap3viJQZBIwIgP7gDCv5SgjkZBLPFZ6ILLDbz6EhEWWprlN7UMbKphpM=" + "MIIBuzCCAWGgAwIBAgIURTKZsCAsU5WA+VhPf1/TH3lOD/8wCgYIKoZIzj0EAwIwIDEeMBwGA1UEAwwVRGlmZmVyZW50IElzc3VlciBOYW1lMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJZWZjau4nyJ3mwoRPUXh+CjrGCitnZ5cUCL/luMBZZmiLofc4A3PwnAQnfkLEiW9hVZpLXYDCn3zDZiIPQfvEijdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBQ6xnA6AVxqU3GFNNofa6zXXszz+jAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEAhEWnIBC22/Ikk4yeqbYlGh3TEIMvWPrBzaZJfR70wBECIFsIUQB0cjMAlZ7sikhWm5PVehIWMGdPSqB0VBu5y9zJ" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "64b630c44a535d66814d38a7d7eb8c4d33140f35fd5a3d4fca53a7b11f1178c6" + "5dee23817f349b8d86b4bb4c3bb5a3f958cd5342019edbde9bc31fcf5d83e31d" ], [ "x-datadog-feature-flags-issued-at", @@ -1289,7 +1289,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQC8XEbEQ9NAu6e4oixqPDyz4BeQB2CTC5NCuJmnnWBKiwIgLgMxEv493GL4zBC41b8x5tC6FXF/enr/vkakqxoGoHc=" + "MEYCIQC3erenjRqo2EujO0nHoDeuF49/onreKl2IUMNrpDuqywIhAJL9O+06Kk/Yh3kp3qq/Dp788P3FTTkL16OZrV5MTcxI" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1322,15 +1322,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0e901572de39562774a03ebc817d4813" + "73d9950b53f669d2fe992ecede6c53fe" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1348,19 +1348,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUJ4/SVhlbBk+9WuF/YiFYG3YMJ3YwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGAhea/goJJ4f/YGf5Y2yzXCX7DR/H/GS2vf9cQSPETpg+meNaMVjvp0vm/x2K2GM/p+lsGf23pobC0Tzy4O3ymjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRIIc6/snmJEwqDUaicHoNiU7aa/DAfBgNVHSMEGDAWgBRCQkJCQkJCQkJCQkJCQkJCQkJCQjATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAXZGenLXwBG3gMfiqrPlB4NIwAWbENzH4uojEBUb8jJwIhAMoZvxqa0CYTymx/Nb4Gvp/rFzuQ0YLUsef/5lVZh+5z" + "MIIBwTCCAWegAwIBAgIUGQ3uc5UY6XIw8bdXo80PqXilkgMwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHVTNzL2wSY4FaAtC8uErCtCedZGMxiuBMlpnziRhMjxzo8ATTo1+TFARIdS1sgSiZdltAASMdSarqchSc4SRdOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7iRlzVm2pfryKPG6GwDYNq315kjAfBgNVHSMEGDAWgBRCQkJCQkJCQkJCQkJCQkJCQkJCQjATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiA8YtN37DLiBirhuFFda/ahkm45RuVFbc7tVG7dbiwl0gIhALjC3WsA6BiRyRGfF3S7clPW+aADZ/5t4MpnCyIzv1SI" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "0e74fd3942f74f209757930e6a94e16c6cc506e6bc17f1bfee45d104fc641a27" + "c64c33d5fc16fbcb8d748d9d3e1fe21db53cf0408ea996b9e91e4d920881fe17" ], [ "x-datadog-feature-flags-issued-at", @@ -1372,7 +1372,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQD6QejWa6yjmavqKmlSsvcR8G3UB88Gb7sfOXFg5rkPPwIgZIazu28FLmZdWzyqeCIW6/vUYMzblNC7lhCFwE6cHo0=" + "MEQCIB2JBQQsZwztn7xomgeIk4FHa+gt2VabEXbYby5IrUnxAiAc7O1QrCGPT3gHl4GhupSpe8NrmDtSHCxlDQ/6RmLDkg==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1405,15 +1405,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "ca26b3be93a583ff45d576619e38c1c3" + "0a6a05be529531595c84b49deea9520d" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1431,19 +1431,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwjCCAWegAwIBAgIUDT3ZT8LswcLZm2P8mK2TtC2iyvQwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI3MTAwMTAwMDAwMVowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFDTEKvtFi/cUmPqtRWe5S/Iw1tVue471/B/B5LTvOaSRsMUivJ8J7pjTCtmpu9If7mRzLglER3FN0nqcS+H7FijdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR64K21fvS4NkUqWZkAZXSeYSpJLTAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEA4tX6FMwmHVXE1BGc9lYEUL39cCaw6+xg7X55E1EDC/4CIQDO+52sogFRQHUI/4/Dcm7QHYB4QBFwj5EfK3fGKndRhw==" + "MIIBwTCCAWegAwIBAgIUcrxly1TRhGY8dy685AU/aLUjrHEwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI3MTAwMTAwMDAwMVowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNaE9wwolmfopBYjFsGKi8zk9n+JBXFQU1o4fpm8WbwymKJLx5zxgZTyrCQqxVS7DuvmLxPun9JMJaF8S5Kn/lejdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRXA90Qkl6BIfyOcrKKA0vQ0vrSZDAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAbBqSXnqcG5QmbxLyl1BdfPV9BPyfHOW1v60KM8Fpz2AIhAPDtKfAcRSoYO2LAV/3b7YkgbzHjRei3Ug6vVoRm2LqC" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "78d4e07601757b6cf5c7018317f958e919de79ee4cddbfd152c2c92caab0c266" + "d8c9a6389cb315b72852cfd8db09c9075120e356e3247b141fdef412260d33c6" ], [ "x-datadog-feature-flags-issued-at", @@ -1455,7 +1455,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEYCIQCQOJmM7VXHHMQ3A/d0VIZouu6y4fk1O+Gz6NzOV7WelQIhAM9ayUA894ESnoLkOvdAcaUky2ZTuBJIoevhSuS4tTRz" + "MEUCIGCqpqbwBvlhcOAKqUnUGnl853i0VzL2BUaJz3gICEc6AiEAk5EDQUo0DqgSbXX3/J1fn2Mbt5iuMM5FjOJfo/3O2Oc=" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1488,15 +1488,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "1ba610c4bbe7cf3e74dadccbe20ef056" + "b824bd8d9693f2aeb5b344eb33e1c540" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1514,19 +1514,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIB5jCCAYygAwIBAgIUZgQ2IizacSY8hdf+//mZ83e/48EwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI08z2TmltFAM9z0uXWnAgvJvsbh4jnxK31qzg8Yy37WF1p8/ks7U0qwBiJmXdNV5DO70J6g9f8oFs2n3f9j3D+jgZkwgZYwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFDSOQ7K8kqPpgMZnbWkuYh17giHFMB8GA1UdIwQYMBaAFETUQiFxL8NVpenIqnbfr/Dw3ZR6MBMGA1UdJQQMMAoGCCsGAQUFBwMDMCEGA1UdHgEB/wQXMBWgEzARgg9yZXN0cmljdGVkLnRlc3QwCgYIKoZIzj0EAwIDSAAwRQIgIdEYh5yOmwMAUPpdq6x2tjEJj01j7Eba/6I3r9UULvYCIQDOiLqoonvMkBa7Rv/h1uAltZWrpalOuM2/uA673nIZ+A==" + "MIIB5jCCAYygAwIBAgIUW1cXjMXRVr7Bxh357EgFRJqHkJQwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIqzX8XUQe+w4DphiwTMa1EQFiC8w0kA3v79jFeOrjhqmOAPA1peVF5oeLPHq6nN958fmchBZ9CixWBQmHDLzQWjgZkwgZYwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFLp1pvL28lQEYe7hpNrxFc9TY1I0MB8GA1UdIwQYMBaAFGflQq+p4fra5WqIDdjQE7XLbnlEMBMGA1UdJQQMMAoGCCsGAQUFBwMDMCEGA1UdHgEB/wQXMBWgEzARgg9yZXN0cmljdGVkLnRlc3QwCgYIKoZIzj0EAwIDSAAwRQIhAPdGHoWwJEtAidIUofBA50A9JkoMI3gsLzH/SjHQc0bWAiBUJYyVAb1F8F40X3jx3F5x1NDQ2rHw7vtCMYKEQrGa0A==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "00d1bb53987fe73bfd4445898493de002611511da91096171d7dd4a2372a87ba" + "9e2d0758617cd73314a5092fdef33af82a30463be2c7dc956a8e164954dbf789" ], [ "x-datadog-feature-flags-issued-at", @@ -1538,7 +1538,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCIBu0OXyDrX+0CN5PA1SPrf9+VOfqGumPTu12PBuEadEmAiBj7imUoKjZoWOnZo0+/lo9TzGh0QaONJ/f18Qx+z4i9w==" + "MEYCIQDjjeouGWrkJdtqr7YsjjrAd6h7JB62+n/Rys6FshKExQIhAOlrp4yVLAG9ln7xr0BZL+FoWU49h8zBy2AAO+GwOu/I" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1571,15 +1571,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "e0ac11d91eb78398fedf5ad86d6ca946" + "e61d0ff7f8ca1dabcb2e2d40c32f55aa" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1597,19 +1597,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBuzCCAWGgAwIBAgIUE78wpfgMWWN4ZbgAzsaDod88/FcwCgYIKoZIzj0EAwIwIDEeMBwGA1UEAwwVaW50ZXJtZWRpYXRlLWNhLWZhbHNlMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPOPEj6a+E8JboS/lsT05jXA9Q5lEXm2Esa7kwi2OrFUmjTbrZafijRw79edprU74DZoltHeynHRy2hxBprDYE2jdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTDZ9ZWI0S0ekpD2s0ttB+ZyQr9KjAfBgNVHSMEGDAWgBTemwGcHptXRw91YVq3JNaA9GOoEjATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiBCvM75817q+HBKCDPmg/XKCIvvG2L44Cp97A958cA62wIhAOuXgYtvZXKFI1iPWPrEYcVPeI0IJuj01mxCHJh8QQtU" + "MIIBvDCCAWGgAwIBAgIUfWB4XKjBGNjLQ13GQe8ZbOs8gQAwCgYIKoZIzj0EAwIwIDEeMBwGA1UEAwwVaW50ZXJtZWRpYXRlLWNhLWZhbHNlMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKUcKWvOMt7BKVaXDRh8MB2RkUJK/SjrbbaewtXhjM2ZZJLSpSKbhsOd0f8qgw91AQlNtLkTFdSEbUD43VjU8ZqjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSThhKE2loKZCGPX+bs/NcEX/XCSDAfBgNVHSMEGDAWgBQQwUBIGRKVlhA3efw/v5vlcyOhczATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAwppjAvsjrJ4S0IIXv7LKgQGIyaMqLjL56T9C3H1qTbYCIQCA0S1Q4yGGU5+TVeW3SkTXEhAI7RuSZ90/fCRVUSkv/Q==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIByTCCAW+gAwIBAgIUGi5KixLO+QCub9kojQA/8d8GIGcwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowIDEeMBwGA1UEAwwVaW50ZXJtZWRpYXRlLWNhLWZhbHNlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuhX2pS3b/RrFIWLH7gVMLow6psrqM/WcIR9aTTD7r559Rm2VawPtW5BNqsh1Izjywt8W5rySkhe+4X/lXHqxA6NgMF4wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFN6bAZwem1dHD3VhWrck1oD0Y6gSMB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIAsk4vVyk1E2GhUv7furQ8IMxf2GSp5H/NvbchnpHsxEAiEAh/+vEIRhMYrQhu+rPMhKuFNNprqL/0Yu/U+WWwPvMrc=" + "MIIByTCCAW+gAwIBAgIUQLMEkxHZi64K2aBQF/wvti5ImcwwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowIDEeMBwGA1UEAwwVaW50ZXJtZWRpYXRlLWNhLWZhbHNlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEI1Di9d+74TGkBNkbg/11Sbe3KxfedKiGAm5sqEL3xatSDYfFLpkx1VuqwKxuqRxO+sW97AqcUw7wpz2jt6gh7KNgMF4wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFBDBQEgZEpWWEDd5/D+/m+VzI6FzMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0gAMEUCIQCCvCFXyJswbQ/qUf55afqOK35JAgcBMFVPKOEhW6WsIwIgQXS1WBsT63PVMQpMHbgMuezUSdjfzHdx8kq/qKXzXeo=" ], [ "x-datadog-feature-flags-certificate-id", - "75980c55820a65615edff9c88c9cfaa4d54824a2c1b17e5e4ce196bf416026f7" + "5919631fd5b1cfb80c5f307c7826c7200ec07bb412239cb0b3dc0d30456b2669" ], [ "x-datadog-feature-flags-issued-at", @@ -1621,7 +1621,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCID2ieqjbh4Nk/wB7PJn1unNQdimxZbwoGLt9/BxfgXIJAiEAot+qGiBXFgucbq7Tl5/ejwggwC8gs4FYAkLlgArc2KQ=" + "MEYCIQCoMJRHO9b6AALuqnc6tNf2+D378jy/M2jxKkWReU4rNAIhAJ6zZiH09UIP0puxyfiBqFadPhnpQhdOjG8ISuOg9ySN" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1654,15 +1654,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "080833a7e8d98e17c4fd0c389bf6d761" + "8580b6e8e400bcc46dafe62e0d80d346" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1680,19 +1680,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBvjCCAWSgAwIBAgIUaYsdTcnkh7MFc5L7QodxrlyTX3swCgYIKoZIzj0EAwIwIzEhMB8GA1UEAwwYaW50ZXJtZWRpYXRlLXBhdGhsZW4tb25lMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBRaimQnUDqIlclTWtMzy3D/DOHhueWEScPLjcqoT+eXAbhUxqVErCs8HyAEzZ9Mu7j7irZDF41Dod/X7mF5rDWjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBQ9H+ZnB+HaGoVpK7ft1fUS77HgkzAfBgNVHSMEGDAWgBQTuGP3uf3/R9IE1gYQfiONpdmM/zATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEAkDq0Dnyo38Zhm7jzKGMQS6ViArRfStzQWFNzIzAQxfgCIDaRUDXmRzPnJ9gdpDWvDRfpvtQHI7cypR3hvT3NIjQj" + "MIIBvzCCAWSgAwIBAgIUKsKYORTlHZEeWEQ+ZQzoTGJ0sFAwCgYIKoZIzj0EAwIwIzEhMB8GA1UEAwwYaW50ZXJtZWRpYXRlLXBhdGhsZW4tb25lMB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJuLgYlGrxkSkD+xmUrB/J/73hwyhebJVVY0HzpC6zx2XSxu7lqGsbxNx6cINX0kc/2gWpdKwnQstV4wShRpkeSjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTcztUSal+XslkaQT4iyS2KZ2GjXjAfBgNVHSMEGDAWgBRmPg3PijuE+CNf9zc+KWUKqwHMVzATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAi1RF9OQU7H1zvrTgYcS4Q8heFoYBOHG2e30ixdrSykYCIQD34ekgAiAwRlIcqugnN7cbM+rip9PvqyIg43fLXNlthw==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB0TCCAXigAwIBAgIUMKgpr0ih/HFzt8LqoyWqUKB4O8kwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowIzEhMB8GA1UEAwwYaW50ZXJtZWRpYXRlLXBhdGhsZW4tb25lMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOUY740lzEF+HCz7oLKTRgeabgIa5gywXKcNQrehNXghaPSMCQueyhiql4L5+HpdDwaKgmg4rfwOD+aBYIJjo/aNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBO4Y/e5/f9H0gTWBhB+I42l2Yz/MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0cAMEQCIB2XwIm0+/JmgdWP4ScHl7nQS8WyBXm7r/CooE/kQCEnAiAb27FbH6mRcRejJ06/mx2MLaf4c+hamZMfdXgm8RNaMA==" + "MIIB0jCCAXigAwIBAgIUK5qPEd3PoiOLb6FbxdjsZAWeyXgwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowIzEhMB8GA1UEAwwYaW50ZXJtZWRpYXRlLXBhdGhsZW4tb25lMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6fy74J25gHAlI9g1HbuIVc8WmipKY+iJgipvWUouwZ+jOD2h70yjD2fevfR/mJcZdDtDNgejNrOVJ3Wjk0qSRqNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGY+Dc+KO4T4I1/3Nz4pZQqrAcxXMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0gAMEUCIQDq8gGW70uoFfef1kLvaR8j4JEDfo5zaoCU2C+csMhv7AIgcOZ3CDZ3LomXoFt9HY7PNg3E84jq47OViwbnM8CgbLw=" ], [ "x-datadog-feature-flags-certificate-id", - "80a08700fe65bdf7bcac7d4506b3430ef6baf6ffab8367113522d5ce5259d9fc" + "a3c3b95c29d220cc8a0b8c97e03bfce362b30d3ae27aa050dfab2e96d91ae05a" ], [ "x-datadog-feature-flags-issued-at", @@ -1704,7 +1704,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCIDuNKTnHDNV7wdy7MqI/djWxP23MxDdPN7mYY2H5JVIWAiBDOVjAbFJ3nDX9pRHJ0Bq+j3SfNGXoW7r3k3yM3mip5A==" + "MEUCIQCfveMF4xSDCfqVjakyhBVnuP2QsKX/iw5grlJeinjQUwIgVaCe9tzTiPUl9IPVo8a/yTU7RMhRNkqFSfpCe32Kup8=" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1737,15 +1737,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0607d2564cce9ea0694efb98aa0f321d" + "8c88e64d5e0f02037e96b7c975cae16d" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1763,19 +1763,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBxjCCAWygAwIBAgIURppmbbPiZYU4KdKuS47rXG5DBBgwCgYIKoZIzj0EAwIwKzEpMCcGA1UEAwwgaW50ZXJtZWRpYXRlLWt1LW1pc3NpbmctY3JsLXNpZ24wHhcNMjYxMDI3MDAwMDAwWhcNMjYxMDMwMDAwMDAwWjAkMSIwIAYDVQQDDBlTeW50aGV0aWMgQXNzaWdubWVudCBMZWFmMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEW3VaYEZj7UUM6I16kY8cvvTJRYdbJpB+O8fvZRDN7Fo8hHhY6KMCazwzKNyUvRkMsTIbFU04krPE8L3NA/uubqN1MHMwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFF7CUk9WxMVAfmGNco3JqCrKITm+MB8GA1UdIwQYMBaAFDiq6oLEkIixSWU5/aBut/BzzYzVMBMGA1UdJQQMMAoGCCsGAQUFBwMDMAoGCCqGSM49BAMCA0gAMEUCIEFD4VRPBU9frgyATf/0iRy9G8f+i+sw/2m8UR0AebUMAiEA4VkF9i+uRgOBO2+mQXKAOT0dRaZi7x1sy+ugJo6puJM=" + "MIIBxzCCAWygAwIBAgIUbIKxxug5TMzREcl58m6kcG/kyXgwCgYIKoZIzj0EAwIwKzEpMCcGA1UEAwwgaW50ZXJtZWRpYXRlLWt1LW1pc3NpbmctY3JsLXNpZ24wHhcNMjYxMDI3MDAwMDAwWhcNMjYxMDMwMDAwMDAwWjAkMSIwIAYDVQQDDBlTeW50aGV0aWMgQXNzaWdubWVudCBMZWFmMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+J4cSUk3X2So01ZrEik9Jgqfpn2R2ON5Zp8hMnJ4MkboFqm1xh/KB6HgL3fXeciY2Bq7bD2Llv44LFp+/JZgmqN1MHMwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFN/pCF+LkAk+jcoI728SwS7teuHNMB8GA1UdIwQYMBaAFAokz3roNhmlo4bMKXCBpZCX0UdNMBMGA1UdJQQMMAoGCCsGAQUFBwMDMAoGCCqGSM49BAMCA0kAMEYCIQD2sjpBCdNIUtlN7nmdXqGFRnYz45dFNZY63I8ZjUeUfQIhANc4tcPqNb9JGd832FH6lFxWXENaJC2fEv4B8qcT72iP" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB2DCCAYCgAwIBAgIUHK61sa8Ejzeb/rbjtXnmlz40lpswCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowKzEpMCcGA1UEAwwgaW50ZXJtZWRpYXRlLWt1LW1pc3NpbmctY3JsLXNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT4kIFALaS9C+1tjPI4Nd13nkwz2g/wVr+kRNRc2gT193SgyPM3DxVLwmhPbkbTm+wSUqYENgq1z6/Ezli+39dgo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwICBDAdBgNVHQ4EFgQUOKrqgsSQiLFJZTn9oG638HPNjNUwHwYDVR0jBBgwFoAUEV896id3YylgoxHD8pUFyEZfedkwCgYIKoZIzj0EAwIDRgAwQwIfDoUTVqUbm+qd6QM7LtT2zHnm63piw8OcKY2lpAmuuQIgeMXNl4qHB/Wl8umnUipmeLGB7hItjLBHiGxElvyrgrg=" + "MIIB2zCCAYCgAwIBAgIUHYY7GZ2V/GhHcmwOAVZA2HJhrEcwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowKzEpMCcGA1UEAwwgaW50ZXJtZWRpYXRlLWt1LW1pc3NpbmctY3JsLXNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATqEwgz0qSySbSHK3MiDz97yLYZwa/PHg29TxTqMJ+YsxxQ6At4YxdLKrdv62jIi0PSQqvmAR4vv31zkOZDoLDno2YwZDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwICBDAdBgNVHQ4EFgQUCiTPeug2GaWjhswpcIGlkJfRR00wHwYDVR0jBBgwFoAUgrQPCSwzaIQasDhVzY8kqaArpvswCgYIKoZIzj0EAwIDSQAwRgIhAMAwXMrMYba1AKlPjs5wbKLwV5FqOhFzxLO64+PAuXbVAiEA5YkNeRGk9GVwY8vjNe0bytVbsumokaxxjAeNqFx4/Lk=" ], [ "x-datadog-feature-flags-certificate-id", - "70435533bfb709d050731bdb73163779d198e0c526b86bbc7da5a1762a701c38" + "63a129b0de6969717795479c9232a1d1bf6c58be564fcd261bb92a7adad3e4de" ], [ "x-datadog-feature-flags-issued-at", @@ -1787,7 +1787,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIFbvJm8PSjEzVprz6f/cpn9u8yU7xF6N0u1yHi95jb1YAiEAnXys5WOIGTf32x+QOgQ8h3/oxW73j6j+I4MLnqMYc5o=" + "MEYCIQD9RXhaWTuzXjKx/JBCd2bpbXNtW6Jm8xpB4gZvy4nHbAIhANWVC5phRXxgaenK9+dXiB7Zk7mnFPVEWGgWkh/GUz7u" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1820,15 +1820,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "a886e5ff17792840b7594ffd41af2bfb" + "5bdf4b234bfad3dc7e6517e77043648f" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1846,19 +1846,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBuzCCAWKgAwIBAgIUHDF+KWYQPQrAjQPJY/lQyp0S3YowCgYIKoZIzj0EAwIwITEfMB0GA1UEAwwWaW50ZXJtZWRpYXRlLXdyb25nLWVrdTAeFw0yNjEwMjcwMDAwMDBaFw0yNjEwMzAwMDAwMDBaMCQxIjAgBgNVBAMMGVN5bnRoZXRpYyBBc3NpZ25tZW50IExlYWYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATAWXKIk9KFKDlMqiz6isonWVAx6QnvwrT4ZSrjOvvyodhU7B4d44Gd3Rdle4E5KuN/yR3wbBuxnkB5KUBUOilbo3UwczAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQUpOqTCzsQyzt+Q2zxb1s4zYpPU2MwHwYDVR0jBBgwFoAUDZRXXQBGzC8AGTUJ6oz2Ok6fWJgwEwYDVR0lBAwwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDRwAwRAIgWveuofvNMcl8hV/r0WIPWi4woe7pqNTq4HzxoA5Hu1oCIH0c5qQMM0F5cn99qcNIDVEVpPKtMqFnwFdpmmpC6uJu" + "MIIBuzCCAWKgAwIBAgIUWV3UPSW9yL44M7+45ktJqrU6rawwCgYIKoZIzj0EAwIwITEfMB0GA1UEAwwWaW50ZXJtZWRpYXRlLXdyb25nLWVrdTAeFw0yNjEwMjcwMDAwMDBaFw0yNjEwMzAwMDAwMDBaMCQxIjAgBgNVBAMMGVN5bnRoZXRpYyBBc3NpZ25tZW50IExlYWYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASZd9qy5Id/qxw6ln9cQ45HhfIySylBvAZrnZ/F9OIm8NU8EXhVwkjQ8WzxGamUWupw9qPZYsHtr0ovDHQdgez3o3UwczAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQUyUbGkh+sKGhC4TqgteDpJRSVUiswHwYDVR0jBBgwFoAUtdSf5evKe2tDutS0mImiCyoIAWEwEwYDVR0lBAwwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDRwAwRAIgKlOCzhlCibN66EZJSWAZQUXTvvh9HrFvxjdF/rDdHlECIEBk/5A3DkcBHS7Oo1kHnHBW53ahToXE/dQPJo8sUQhA" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB5TCCAYugAwIBAgIUZVKlij3wBsIZNzKBQgtNsCc35PIwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowITEfMB0GA1UEAwwWaW50ZXJtZWRpYXRlLXdyb25nLWVrdTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMsubB/4XBtHk77Q6+Qaq5lpScngmTaghBETE5pywmnu6gvhiv816rlewZCrIRH8bgAhkkJV9DEYMXz5LN3Kzh2jezB5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQNlFddAEbMLwAZNQnqjPY6Tp9YmDAfBgNVHSMEGDAWgBQRXz3qJ3djKWCjEcPylQXIRl952TATBgNVHSUEDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgNIADBFAiBZ4lTaYCd07Q4jgSxoJ6rTD7MzvyH6qMvn8ieVUgt32gIhAODSVcl74u5RhXUEshvs0ITcVs1AsrQ1TGl0qz+M1gSu" + "MIIB5jCCAYugAwIBAgIUcnulxCBEyvJ1eqC+nP1b5f4agUgwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowITEfMB0GA1UEAwwWaW50ZXJtZWRpYXRlLXdyb25nLWVrdTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGnrZdO2xc5zjLtmclMeREz5+mYUEgTKlMHdduKH12bDJbBcfSZyX0bwPopqG4ob/zbKXDajEVW1SlOshYhjPKijezB5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS11J/l68p7a0O61LSYiaILKggBYTAfBgNVHSMEGDAWgBSCtA8JLDNohBqwOFXNjySpoCum+zATBgNVHSUEDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgNJADBGAiEAq2nDqHEJRCQL56vavTndl3/RS9s7eVILXbUKuLhBiroCIQD49lk6onhlT834sB6hUxwcIOiFpCTcCZu93TjkbFLX+Q==" ], [ "x-datadog-feature-flags-certificate-id", - "e084d9d3230e6954243cbec5891a5a7a6244428e2ecd30dfa8d47fa83e75fa21" + "12c4e27455bf5fdc4c79b1e77027711b1ba54c9ccd5e64a15af747e2ca05b0b0" ], [ "x-datadog-feature-flags-issued-at", @@ -1870,7 +1870,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDDvl/PTz/JlJtqvMmHoZSYt7UfbL+uTurRxz+h4F8llgIgJl/MRm9kQkA/jodFqVvGrx6HbT1OAsRsTppySHYCEro=" + "MEQCIEvhZAjZvrZRpCmG0DN37Z0DdT5Kg2OqvsZSSsKRrhkvAiA4mVf1rM4oBN6vU7JksE87ihhLCS7ngyqkKOXr4wW3ww==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1903,15 +1903,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -1929,15 +1929,15 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -1949,7 +1949,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -1982,15 +1982,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -2008,19 +2008,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2032,7 +2032,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9IA==" @@ -2065,15 +2065,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9IA==" @@ -2091,19 +2091,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2115,7 +2115,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2148,11 +2148,11 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", @@ -2174,19 +2174,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2198,7 +2198,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2227,15 +2227,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ], [ "dd-client-token", @@ -2257,19 +2257,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2281,7 +2281,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2314,15 +2314,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -2340,19 +2340,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2364,7 +2364,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2397,15 +2397,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -2423,19 +2423,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2447,7 +2447,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2476,15 +2476,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ], [ "x-use-cache", @@ -2506,19 +2506,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2530,7 +2530,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2563,15 +2563,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -2589,19 +2589,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2613,7 +2613,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2646,15 +2646,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "6ff9bb9af5612bd9e67652fd32e62d6e" + "ad832a44e6bec72a3220423d65f6b43b" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -2672,19 +2672,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2696,7 +2696,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEYCIQCy/I4vNBs44LdFkHtGjshXFY2b1TINV8yStuIZ4yXgHgIhAKHRssvzuaLooBUslXsmTQ/6POXvDWEH/Wy6cc0Uu8Fj" + "MEQCIBB37dVs7yRgZC95g3VgymmRVMgvK4JdtC6nLZEwmBeMAiBYJo5ISVZdVNkRUfaznQrFZNmIdU4GUJxFigEum1gZRg==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2729,15 +2729,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "7ebaf7a7b9edd4a28bbd8cc9b27b1776" + "d783022838666584f35b7092089aed97" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -2755,19 +2755,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2779,7 +2779,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCIF4Il9u41l86oICAr2Y2/jEWfGDTH+HjivcgVjsCW4qPAiB6xu+lnIliAA3VR+04y3ZwHdkEabS2C2TDE+nQm92jwg==" + "MEUCIQDbxbwVdc8+/pxG+emSpQu+c8siFcG/dJzvfUShJIom9gIgeGTgFwq86nh1VkaHPmNxhdvire51ZTSTLS7nz23GWac=" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2812,15 +2812,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "bd4be81c0c2213014a3d8c9ac7af2d29" + "751225c66509b0751e32201fd6c25360" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -2838,19 +2838,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -2862,7 +2862,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCIBexQpYgRrp56h9IEPCu4vrrgshVE/YdWVqLYOwNLCVlAiBTHL614Fv7D1ldi27zkeVaOLqJ2JTHPeBeU8vfotT9Gw==" + "MEQCIDiHXBJGNyqhE5RliLaF/W78HCzJ9qLlWOJLT2oKoUp/AiAvpb/CYu8RFoZ4Kaxqb/IXroTR1am946tc6nS8KGzTyw==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -2895,15 +2895,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -2921,19 +2921,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-expires-at", @@ -2941,7 +2941,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ], [ "x-datadog-feature-flags-issued-at", @@ -2978,15 +2978,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -3004,19 +3004,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -3028,11 +3028,11 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -3065,15 +3065,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -3091,15 +3091,15 @@ ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -3111,7 +3111,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ], [ "x-datadog-feature-flags-signature-version", @@ -3148,15 +3148,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -3174,15 +3174,15 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -3194,7 +3194,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ], [ "x-datadog-feature-flags-signing-certificate", @@ -3231,15 +3231,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -3257,15 +3257,15 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -3277,7 +3277,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ], [ "x-datadog-feature-flags-signing-certificate", @@ -3314,15 +3314,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -3340,19 +3340,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -3364,7 +3364,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktwA" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6gA=" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -3397,15 +3397,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -3423,15 +3423,15 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -3443,11 +3443,11 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUBAA==" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5gA=" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -3480,15 +3480,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -3506,19 +3506,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -3530,7 +3530,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCIBqXxgJm/E+GWNe1V/I9MwO8Q9NB8CxcaYZHI73gUKv2AiBXTb5RUuTeedKCKxg0zqaxSKzD/TnJZXLpal68/L6ISA==" + "MEUCIQCnD2grHkrMYeEO2i5nlpjCBqBBgIAD68ZQjKyQd+ZbbgIgdQTrofgLk4BzZL1y1yYM2lxwI6a6h1EAFLqEkKYBOxw=" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -3563,15 +3563,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "0d9328a96cca4cde451af9de2b49cd19" + "c744e8a0220b84e636a33806def5365a" ], [ "x-use-cache", @@ -3593,19 +3593,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB" + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" ], [ "x-datadog-feature-flags-certificate-id", - "123435b98534d1258131933c87382129c0d60e782766541c932c2c13c723dfc2" + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" ], [ "x-datadog-feature-flags-issued-at", @@ -3617,7 +3617,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIQDWReet+UJD2NX6BANOgIJedq3fnU6Tz+Xhr/ZdOA4fbwIgZju/RjONhtEExS1bjdP2m6KT7aW+zJfRZ+/50KOQktw=" + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -3625,6 +3625,255 @@ "now": 1793062800, "expected_accept": false, "rejection_reason": "duplicate-semantic-header" + }, + { + "id": "unsupported-prototype-version-2", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v1" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-request-nonce", + "c744e8a0220b84e636a33806def5365a" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" + ], + [ + "x-datadog-feature-flags-certificate-id", + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" + ], + [ + "x-datadog-feature-flags-signature-version", + "2" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "protocol-version" + }, + { + "id": "unsupported-prototype-version-3", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v1" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-request-nonce", + "c744e8a0220b84e636a33806def5365a" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" + ], + [ + "x-datadog-feature-flags-certificate-id", + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" + ], + [ + "x-datadog-feature-flags-signature-version", + "3" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "protocol-version" + }, + { + "id": "draft-v3-domain", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v1" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-request-nonce", + "c744e8a0220b84e636a33806def5365a" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" + ], + [ + "x-datadog-feature-flags-certificate-id", + "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793062800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793063100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIGi+neryDrq8ct6gfZ70vBYqoDY8Yybr3oDXpSNQtggNAiEAqhF7MuNBS2wa0RAARKElenwStq1XFV62qMKlhYDVmUA=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793062800, + "expected_accept": false, + "rejection_reason": "transcript-domain" } ], "signing_cases": [ @@ -3632,11 +3881,11 @@ "id": "signer-valid-key-pair", "case_id": "valid-current", "credential": { - "version": 3, + "version": 1, "generation": "valid-current", - "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3lHSTj1e6agvFJW6zi4CsX8GTi6oDzb2jURIHf/or8yhRANCAARchkEngXJEB8lAS69yvVSlEZeuAoeipT0YgqhvvPb5LF+KrNmXisYLMt7kic/hMbpI4BkxCDYIYcmL/TPu6wDz", - "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", - "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3CTaM180jSh+DN3yEcdUy5NiXg9uiqIbKMXo8tIQfxmhRANCAARaDtotVSlwOC7NQIAf4qDzIzSW8SMsy1Urpmz23gC13FvbhS0QL7EwIdl7kLrQ+Xdnz9sH/szvPtBiGRa7OyXg", + "certificate_der_base64": "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==", + "intermediate_der_base64": "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" }, "expected_signing": true }, @@ -3644,11 +3893,11 @@ "id": "signer-private-key-mismatch", "case_id": "valid-current", "credential": { - "version": 3, + "version": 1, "generation": "valid-current", - "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRQ3f5cvHncb+REReuGcuCaUxSA8B+0GlkORtt4+WFxGhRANCAAQqHf4sxKPaJI4D/Aa4qrEg/QVHpopwHZ9Z/CruP37NR2/+Gtq4yN9mjXi6gz0IViBQjEAvBqzX/mEtsIAsFF3R", - "certificate_der_base64": "MIIBwTCCAWegAwIBAgIUCPQTWHvS6zy79XrHtfWS/cG+Fq4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyGQSeBckQHyUBLr3K9VKURl64Ch6KlPRiCqG+89vksX4qs2ZeKxgsy3uSJz+ExukjgGTEINghhyYv9M+7rAPOjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBRsMtKsS+H4PEN1ztuWYwU/6c/AXjAfBgNVHSMEGDAWgBRE1EIhcS/DVaXpyKp236/w8N2UejATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEA0GzEYxYVBj8cViYz3gkfQ3RBZkkeH7Eoa8blHpS+J64CICpFUD6re1Z+06B51dH1qdrkhKFjEiykOMXpDaZlrrUB", - "intermediate_der_base64": "MIIB1TCCAXugAwIBAgIUcKpHSAktwNiswgzalQEO0HRyi/QwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkH6au69GEFEUW5wsRtDrSULasgCI3lOIJGTz8aNso22881MPN2hAa0NKWRY3tsOXOq/b55jmDvjU5j0+KKRi6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFETUQiFxL8NVpenIqnbfr/Dw3ZR6MB8GA1UdIwQYMBaAFBFfPeond2MpYKMRw/KVBchGX3nZMAoGCCqGSM49BAMCA0gAMEUCIB3vO5oAz7HTv4xrDJFWXF7vYDuBqEka9HGvn8sfvxQpAiEAyUq5c3zYuu4c3smhT3dyxxhuQWNgxsHruKxIfQ2JjJY=" + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgIq7QsEW3oCouCspfgP++htttxioVzmc/Vg+2FyIf7yOhRANCAAQVvEQJe29jJq+Y7toSaGoYzjvFg/BYOpJzomfHo5zhJ5zaA+uo3Qt73edHXrCZfY89vv/+LG5CWo3bWfntpC0e", + "certificate_der_base64": "MIIBwjCCAWegAwIBAgIUKw/B9HQAbo1nZOnaO8W4WoVAyL4wCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFoO2i1VKXA4Ls1AgB/ioPMjNJbxIyzLVSumbPbeALXcW9uFLRAvsTAh2XuQutD5d2fP2wf+zO8+0GIZFrs7JeCjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR7CCGoeUbMlCn2rP/SnBtO5IJPIjAfBgNVHSMEGDAWgBRn5UKvqeH62uVqiA3Y0BO1y255RDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNJADBGAiEAkK0KpDu+WOQKzTBKEOkZlOMsHX+yh5ln4mpHsf6FmxMCIQDTLFsk/ZZs/34rxkl0RpTfzjjaebPgU14nTXYCzxcS5g==", + "intermediate_der_base64": "MIIB1DCCAXugAwIBAgIUO/1Iri7DvrD+lmmsoxTRbxWLGSEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHGrqgrc1Zws9fw/SNHEnBgiLedEmrL62mTK8Q/6eOVxwOO7qhPE9evVpHP+Mqn/emgNt7yfWdM7hHjnvp4cty6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGflQq+p4fra5WqIDdjQE7XLbnlEMB8GA1UdIwQYMBaAFIK0DwksM2iEGrA4Vc2PJKmgK6b7MAoGCCqGSM49BAMCA0cAMEQCIEnBtRRCWHn3LHQTIFyzHO73LM6zuiZlGCZoOaMj8aleAiA/kBE3rmtnPVuMEhJVEcli8NT8EaNP+U6k20e0dsIf8w==" }, "expected_signing": false } diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/key-usage-supplement.json b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/key-usage-supplement.json similarity index 60% rename from features/dd-sdk-android-flags/src/test/resources/response-signing-v3/key-usage-supplement.json rename to features/dd-sdk-android-flags/src/test/resources/response-signing-v1/key-usage-supplement.json index 8368ed2eda..ba2dadc1f2 100644 --- a/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/key-usage-supplement.json +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/key-usage-supplement.json @@ -1,5 +1,5 @@ { - "anchor": "MIIB9jCCAZygAwIBAgIUXo55ltoHIzARserQVk/np+sLYQMwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MDkxMTAwMDAwMFoXDTM2MDkwODAzMTgwOFowRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXd6cKcwHOfW4B7A/rBSNBgIXm1O1U21UkozNddwNKD94hHLJJhokbzc2yihhcEGHbfYIlhtIil1py4CfOu2SHKNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLuNHAxC4pPU6Iey2aieGq5PrIfIMB8GA1UdIwQYMBaAFLuNHAxC4pPU6Iey2aieGq5PrIfIMAoGCCqGSM49BAMCA0gAMEUCIQDW+qTMhmH+XJKR6IKagg0OgBrYWBc7ksorNpuJYhkUogIgMUQrGANl33RwKUxdQTETdKmOYeHwBusdCarRWzF7Js0=", + "anchor": "MIIB9zCCAZygAwIBAgIUO0BMn3SvYhtlMXRN/nfB/2UV/BAwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MDkxMTAwMDAwMFoXDTM2MDkwODAzMTgwOFowRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmKvecQUF8MHNbcS+Bfrskc1cjXCnZWX7xcJHYlzYbkxt+7temV7kXerilkL0apZpXo0Rm1COWcMic65k51SnaaNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDZ09YKmljbSxtiXg4CVLe4WUW/ZMB8GA1UdIwQYMBaAFDZ09YKmljbSxtiXg4CVLe4WUW/ZMAoGCCqGSM49BAMCA0kAMEYCIQD+ffV3FZPVoCo0IYS0ulSyIPQ43ivB9vricZjB082VegIhAIyExEnYxEC1wW8um60afoKiWyqicAwlEfH2alSSletF", "cases": [ { "id": "canonical-leaf-ku", @@ -25,15 +25,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "8c1578bea3319bf3dac8243fd5593407" + "41ab1ea4a36b707aaaacc12729bf2204" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -51,19 +51,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWegAwIBAgIUUvaUkMqlT3T746kIxYRDP4j2LjEwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOkQnqH0bh8Y0sMEQjLLdbAgAh8yEPhqVmXT1r4cUssdWBbrAtVQqPQkQ34STytxBQ1Jn240Z8z3yJOPu9yiaZGjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBTHwbt/CbErPPhijnTdvbmh40IJwTAfBgNVHSMEGDAWgBQwwPo1Ak8bfXkjkGvD1UpmabcXETATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAdraVcTrY600NKl6hdiW+urWrL7rOEEhvb1bTB8XB8SwIhAIuvzB9KBXa2L6H3THjxyTMcAAUpd7obP9FW5z+TjtJL" + "MIIBwTCCAWegAwIBAgIUKcurz83jEzyKZfo2MWvw7EI/QwcwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIqNbMzzubdY7ii0rS2y+NpX4Px/BANo550mym73YYA/BzguT9UKQjyqXixigitbqqyOyuNnFlJCF0rc3fUhTgKjdTBzMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSjMjAlO+Azgp4C7nv4JRPnQzOuwjAfBgNVHSMEGDAWgBR7/18TVFR5tBti4G8U9EF+lUft8jATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEAlYwxR2NwYsuq5GwaO4bkI+SikWVbcjaox7Ks7xmLWdECIH61uraDf9lCIuTsDQjd+PJGuDXxqpqsJzDNQPZ+iYnc" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUbaU6t2nsPEqNriCT/EgPlSzd1fEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+ZN2E+8+boZSClOvBgsawV38IdYuXFWSGgJNuQMF0u4dN0RjXzZm7RXTAv7+0BinhMUsCVHVVxPWrJvHVSmMQKNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDDA+jUCTxt9eSOQa8PVSmZptxcRMB8GA1UdIwQYMBaAFLuNHAxC4pPU6Iey2aieGq5PrIfIMAoGCCqGSM49BAMCA0gAMEUCIQD2PaAO1Q38L4FA5ca3uFTaqR7JN9UdBHowekx+4dw1wAIgTs3Hqb+DBYTHGgLp5dQwtqSlcM+wnW8SgtcS4M6gVkE=" + "MIIB1TCCAXugAwIBAgIUPAuubZpzXgRmFKk1cALTpXSs/eswCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5NwYh2orehFzN4QpGsZrambCiUK1D4TB3YzNu1D9Vxl3AWMqwEkUBrXA35eoh3wLBzeUhvISsj1LY+/O0L2e+6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHv/XxNUVHm0G2LgbxT0QX6VR+3yMB8GA1UdIwQYMBaAFDZ09YKmljbSxtiXg4CVLe4WUW/ZMAoGCCqGSM49BAMCA0gAMEUCICiIqBu3/tEyW2hXCte62k+brc5GD4HHQ5gLIeZG1jTDAiEA+c2khRtdw8YZ6z7G0wOhB5KrpVK/mt316H0xQsNS7DY=" ], [ "x-datadog-feature-flags-certificate-id", - "e69bfa1704ed4fa03d90d75e1198a21d4f325e0b742d8bd59027bf61fbb8045c" + "d0d4a4a1f65dc930899a16cd22a16f6387bf90d5fa6366a0f16245655aaa594c" ], [ "x-datadog-feature-flags-issued-at", @@ -75,7 +75,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEUCIGlURIB1dZ/oEpcz9cea70l//ZZRooRNDRA0IXBHkXlQAiEA5eunZjLBrcER14FlQ0kIM8HVZRkAdCqpPYiT/JUtBEw=" + "MEYCIQDG+p4ael7v4T5bab/umZBcSqMAlnPGSHY5MRwusESrDwIhAKJqLWP4T+f+pmjh1y2e/qwGqexnbCe8J4Jwym063QAL" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -83,7 +83,7 @@ "now": 1793062800, "expected_accept": true, "rejection_reason": null, - "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYzAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEIwVeL6jMZvz2sgkP9VZNAe7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MwAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJ5pv6FwTtT6A9kNdeEZiiHU8yXgt0LYvVkCe/Yfu4BFzUhMjwcYj5TOdkrhYUYlHXRpA1bsa14S1snTuxEZoJzQ==" + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEEGrHqSja3B6qqzBJym/IgS7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJ0NSkofZdyTCJmhbNIqFvY4e/kNX6Y2ag8WJFZVqqWUzwLuPkHR9Bd4tslUnNd6QtmoQ1WLVen/LIo72eE/gAnQ==" }, { "id": "nonminimal-leaf-ku", @@ -109,15 +109,15 @@ ], [ "x-dd-feature-flags-capabilities", - "response-signing-v3" + "response-signing-v1" ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-request-nonce", - "077b98a07ecb8097a9cc3010b46aeda6" + "6aa219bb6b08d734c7a7c8a9c1c435f7" ] ], "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" @@ -135,19 +135,19 @@ ], [ "x-datadog-feature-flags-signature-version", - "3" + "1" ], [ "x-datadog-feature-flags-signing-certificate", - "MIIBwTCCAWigAwIBAgIUS4AgbMXxAcSoCEqzYuYZukUCM/UwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDuU52kYmVzcsZ/rpFJYS7JXZ9swcTPKiX5w3uyzXK8beqH9oYMexxEKj5YBCGwzmnnfjT5htGR9KJHUbYlQHnijdjB0MAwGA1UdEwEB/wQCMAAwDwYDVR0PAQH/BAUDAwCAADAdBgNVHQ4EFgQUaIyOchOJ9O0olKnVxwEOYFAP7dswHwYDVR0jBBgwFoAUMMD6NQJPG315I5Brw9VKZmm3FxEwEwYDVR0lBAwwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDRwAwRAIgEkx7UK6WSkcdwykDdY4EvC/grJbPOwxN3dcrrLsOS64CIHNntdPrtOKhJ1ETB3lgkqwPKzLtIAO8r9qE5bqNqdlZ" + "MIIBwjCCAWigAwIBAgIUGqfFX0LxhudMfxFiym9v5F3BnBwwCgYIKoZIzj0EAwIwJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MB4XDTI2MTAyNzAwMDAwMFoXDTI2MTAzMDAwMDAwMFowJDEiMCAGA1UEAwwZU3ludGhldGljIEFzc2lnbm1lbnQgTGVhZjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCJWXlhYMiXemglYH1VZyZmRctRadkUMhlTRpJQBHTCs5EtRySdOZRrrRu1oyC70s8KJvrSoo8KPBkGX8uiLvRWjdjB0MAwGA1UdEwEB/wQCMAAwDwYDVR0PAQH/BAUDAwCAADAdBgNVHQ4EFgQUv3yHZSOM0F1lJO/R1TciJV3sVBcwHwYDVR0jBBgwFoAUe/9fE1RUebQbYuBvFPRBfpVH7fIwEwYDVR0lBAwwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDSAAwRQIhAM8qiLBhO2AIrldSDyiKqMvI9pRE++DuDcEE/Db31OC9AiBZlIhqfvdYTvPheFxjrPCl7URebaXLtkYhC56G0Ez3Vw==" ], [ "x-datadog-feature-flags-signing-intermediate", - "MIIB1TCCAXugAwIBAgIUbaU6t2nsPEqNriCT/EgPlSzd1fEwCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjMgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+ZN2E+8+boZSClOvBgsawV38IdYuXFWSGgJNuQMF0u4dN0RjXzZm7RXTAv7+0BinhMUsCVHVVxPWrJvHVSmMQKNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDDA+jUCTxt9eSOQa8PVSmZptxcRMB8GA1UdIwQYMBaAFLuNHAxC4pPU6Iey2aieGq5PrIfIMAoGCCqGSM49BAMCA0gAMEUCIQD2PaAO1Q38L4FA5ca3uFTaqR7JN9UdBHowekx+4dw1wAIgTs3Hqb+DBYTHGgLp5dQwtqSlcM+wnW8SgtcS4M6gVkE=" + "MIIB1TCCAXugAwIBAgIUPAuubZpzXgRmFKk1cALTpXSs/eswCgYIKoZIzj0EAwIwRzFFMEMGA1UEAww8U1lOVEhFVElDIFJFU1BPTlNFIFNJR05JTkcgVjEgVEVTVCBST09UIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB4XDTI2MTAwMTAwMDAwMFoXDTI3MTAwMTAwMDAwMFowJjEkMCIGA1UEAwwbU3ludGhldGljIEludGVybWVkaWF0ZSAyMDI2MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5NwYh2orehFzN4QpGsZrambCiUK1D4TB3YzNu1D9Vxl3AWMqwEkUBrXA35eoh3wLBzeUhvISsj1LY+/O0L2e+6NmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHv/XxNUVHm0G2LgbxT0QX6VR+3yMB8GA1UdIwQYMBaAFDZ09YKmljbSxtiXg4CVLe4WUW/ZMAoGCCqGSM49BAMCA0gAMEUCICiIqBu3/tEyW2hXCte62k+brc5GD4HHQ5gLIeZG1jTDAiEA+c2khRtdw8YZ6z7G0wOhB5KrpVK/mt316H0xQsNS7DY=" ], [ "x-datadog-feature-flags-certificate-id", - "3ab0b5a3c0da69bd26838946c79796e54dca9848ebae11ce059ebcd7e3a024bf" + "687d1b90a8d49f0980bc5e24d769fa07cd915f2ced3f468e2cc955b0adcfd89b" ], [ "x-datadog-feature-flags-issued-at", @@ -159,7 +159,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCIApFE85ZvkAe+qFyMdkUi6pr71P6EBeRfroSCHd4eM5oAiBhwVmHINIBLKPQgNtRLk+2+Z+qDxYqef3VkgImh3FxZQ==" + "MEYCIQCYe+hxTEimVzx8QX2MwNc1TKMgFLpuT194ccAb0ixsFgIhAKedzNMWSmGuEo93w0wAVwMM/9QDiFYOppCFasKHJM89" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -169,6 +169,6 @@ "rejection_reason": "nonminimal-key-usage-named-bit-list" } ], - "profile_sha256": "15649074caeb9a51ce233eb0d29d5725be6b33ee1c2497493f33acf992adff81", + "profile_sha256": "a32c6919d1f730b076994f89317ef441fa4c4b4556c093edf0216632a882f783", "source": "Independent Python cryptography issuance, CA/leaf keys ephemeral; X.690 11.2.2 named-bit-list DER requires trailing zero bits removed." } diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/README.md b/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/README.md deleted file mode 100644 index 1869c00f39..0000000000 --- a/features/dd-sdk-android-flags/src/test/resources/response-signing-v3/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Frozen synthetic response signing v3 vectors - -`corpus.json` is an unchanged copy of the independently generated shared corpus, -SHA256 `cc444ec8a2890430fa8dd8aee6cbde5a92d388ee55938596aac67891cfc099b6`. -Profile SHA256 `15649074caeb9a51ce233eb0d29d5725be6b33ee1c2497493f33acf992adff81`. -The native verifier runs all 43 response cases (6 accept, 37 reject). The two -server private-key cases are outside the SDK verifier profile. Private leaf -credentials in this synthetic corpus are public test material, never production. - -`key-usage-supplement.json`, SHA256 -`e6e2bc29ab28b490a1e17bb7c46a9342cf9496d9962c04aa5ca0e3ce6b08d347`, independently -signs canonical and nonminimal named-bit-string KU encodings. Its expected results -follow X.690 11.2.2; it contains no private keys. Neither fixture is rewritten by tests. From 285a371fa80a7c1865ee700e13570adb861ce3c6 Mon Sep 17 00:00:00 2001 From: Leo Romanovsky Date: Tue, 3 Nov 2026 03:30:10 +0000 Subject: [PATCH 3/5] FFLSDK-267: Refresh response signing rejection fixtures Import the corrected shared corpus byte-for-byte and record its exact source revision and checksum. Preserve native expectations and runtime behavior. Ref: FFLSDK-267 --- .../src/test/resources/response-signing-v1/README.md | 9 +++++---- .../src/test/resources/response-signing-v1/corpus.json | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md index 0f02560d1e..6e1c8f1957 100644 --- a/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md @@ -1,7 +1,8 @@ # Frozen synthetic response signing public v1 vectors -`corpus.json` is an unchanged copy of the independently generated shared corpus, -SHA256 `f749069c3344eb72eac11a614bdb92215208e472feeb98467367d78ef42782c5`. +`corpus.json` is a byte-for-byte copy of the [shared corpus](https://github.com/DataDog/ffe-system-test-data/blob/7caa9706dcab035854a34ea41311f5eeb6ce6743/response-signing/v1/corpus.json) +at revision `7caa9706dcab035854a34ea41311f5eeb6ce6743`, +SHA256 `393490bfefe382b9b75cf2964c131a910faa679888689457f99c2da2dc57fbbd`. Profile SHA256 `a32c6919d1f730b076994f89317ef441fa4c4b4556c093edf0216632a882f783`. The native verifier runs all 46 response cases (6 accept, 40 reject). The two server private-key cases are outside the SDK verifier profile. Private leaf @@ -12,6 +13,6 @@ credentials in this synthetic corpus are public test material, never production. signs canonical and nonminimal named-bit-string KU encodings. Its expected results follow X.690 11.2.2; it contains no private keys. Neither fixture is rewritten by tests. -Applicability profile `response-signing-public-v1`, manifest SHA256 -`18193622653a5867ff5e8501fb4fabebcbe6b979233b07406e2d70d172005544`. +Applicability profile `response-signing-public-v1`; the corpus revision and hash +above identify the corrected fixture data used by this adapter. The FFE LEAN spreadsheet remains decision authority; this adaptation makes no Lean proof claim. diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/corpus.json b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/corpus.json index e9e15086e0..d9d1a95c59 100644 --- a/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/corpus.json +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/corpus.json @@ -3115,7 +3115,7 @@ ], [ "x-datadog-feature-flags-signature-version", - "3, 3" + "1, 1" ] ], "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" @@ -3431,7 +3431,7 @@ ], [ "x-datadog-feature-flags-certificate-id", - "45c22d216e51de0f4750dbd127f5cbeeadef2bc3b426cb95d682abcc88c9210b" + "6738a6d5b76925e3a967b90c0932d159bf8524ad2db2d14b7a7bc705719bffaa" ], [ "x-datadog-feature-flags-issued-at", @@ -3443,7 +3443,7 @@ ], [ "x-datadog-feature-flags-signature", - "MEQCICd4gJ6SS+b86toF0aHTSFmKhhl15NCZSYSzddUH8363AiANVhVk9z3UFZVeShs2xdX9wtT8yyL3Jbpdt7CpU7jD6g==" + "MEQCIAtONBn1e9+mX5CtPvimsYrBLuc6T3VZF3LlVdCzuXiUAiAtr/SytbKwdYTAEJqIqvtVqCbuQUJit8MsvIcdY45ZgA==" ], [ "x-datadog-feature-flags-signing-certificate", @@ -3454,7 +3454,8 @@ }, "now": 1793062800, "expected_accept": false, - "rejection_reason": "certificate-encoding" + "rejection_reason": "certificate-encoding", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEMdE6KAiC4TmNqM4Bt71Nlq7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAABq3/eQAAAAAGrf+LwAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJZzim1bdpJeOpZ7kMCTLRWb+FJK0tstFLenvHBXGb/6qK5IXeXBsvfM61fHg4wyYFpic/Ia2/EMmSIZ43j2NQqw==" }, { "id": "cryptographic-signature-tampering", From 8f1fd61a8879638be134503b58c45e5d1dd65413 Mon Sep 17 00:00:00 2001 From: Leo Romanovsky Date: Tue, 3 Nov 2026 17:47:54 -0500 Subject: [PATCH 4/5] FFLSDK-267: Pin merged signing fixtures and test certificate rules Ref: FFLSDK-267 --- .../signing/ResponseSigningVerifierTest.kt | 19 + .../resources/response-signing-v1/README.md | 11 +- .../isolated-certificate-rules.json | 369 ++++++++++++++++++ 3 files changed, 397 insertions(+), 2 deletions(-) create mode 100644 features/dd-sdk-android-flags/src/test/resources/response-signing-v1/isolated-certificate-rules.json diff --git a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt index 34b5dfb76c..90bd412001 100644 --- a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt +++ b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningVerifierTest.kt @@ -53,6 +53,25 @@ internal class ResponseSigningVerifierTest { } } + @TestFactory + fun `M match isolated certificate rules W verify()`(): List { + val corpus = resource("isolated-certificate-rules.json") + val cases = corpus.getAsJsonArray("cases") + check(cases.size() == 4) + check(cases.count { it.asJsonObject["expected_accept"].asBoolean } == 1) + return cases.map { entry -> + val vector = entry.asJsonObject + DynamicTest.dynamicTest(vector["id"].asString) { + // Given + val testedVerifier = ResponseSigningVerifier(listOf(corpus["anchor_der_base64"].asString)) + // When + val result = verify(testedVerifier, vector) + // Then + assertThat(result != null).isEqualTo(vector["expected_accept"].asBoolean) + } + } + } + private fun verify(verifier: ResponseSigningVerifier, vector: JsonObject): VerifiedResponse? { val input = vector.getAsJsonObject("request") val request = Request.Builder().url(input["url"].asString) diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md index 6e1c8f1957..6b26557c1c 100644 --- a/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/README.md @@ -1,7 +1,7 @@ # Frozen synthetic response signing public v1 vectors -`corpus.json` is a byte-for-byte copy of the [shared corpus](https://github.com/DataDog/ffe-system-test-data/blob/7caa9706dcab035854a34ea41311f5eeb6ce6743/response-signing/v1/corpus.json) -at revision `7caa9706dcab035854a34ea41311f5eeb6ce6743`, +`corpus.json` is a byte-for-byte copy of the [shared corpus](https://github.com/DataDog/ffe-system-test-data/blob/b57eac6711204a906f0b24e127124a03314e35a9/response-signing/v1/corpus.json) +at revision `b57eac6711204a906f0b24e127124a03314e35a9`, SHA256 `393490bfefe382b9b75cf2964c131a910faa679888689457f99c2da2dc57fbbd`. Profile SHA256 `a32c6919d1f730b076994f89317ef441fa4c4b4556c093edf0216632a882f783`. The native verifier runs all 46 response cases (6 accept, 40 reject). The two @@ -16,3 +16,10 @@ follow X.690 11.2.2; it contains no private keys. Neither fixture is rewritten b Applicability profile `response-signing-public-v1`; the corpus revision and hash above identify the corrected fixture data used by this adapter. The FFE LEAN spreadsheet remains decision authority; this adaptation makes no Lean proof claim. + +The isolated certificate-rule supplement is copied byte-for-byte from +[ffe-system-test-data](https://github.com/DataDog/ffe-system-test-data/blob/b57eac6711204a906f0b24e127124a03314e35a9/response-signing/v1/isolated-certificate-rules.json) +at revision `b57eac6711204a906f0b24e127124a03314e35a9`. +Its SHA-256 is `7304bb12f011688a39b53ebd5fb5d842febd0f5ae81e67126a7e24d1e79a225a`. +The adapter checks one accepted control and three correctly signed rejections: +an oversized certificate, a leaf marked as CA, and an intermediate without CA authority. diff --git a/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/isolated-certificate-rules.json b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/isolated-certificate-rules.json new file mode 100644 index 0000000000..98963af020 --- /dev/null +++ b/features/dd-sdk-android-flags/src/test/resources/response-signing-v1/isolated-certificate-rules.json @@ -0,0 +1,369 @@ +{ + "anchor_der_base64": "MIIBWTCB/6ADAgECAgEBMAoGCCqGSM49BAMCMCIxIDAeBgNVBAMMF1NZTlRIRVRJQyBJU09MQVRFRCBST09UMB4XDTI2MTAyNzA0MDAwMFoXDTI3MTAzMDA0MDAwMFowIjEgMB4GA1UEAwwXU1lOVEhFVElDIElTT0xBVEVEIFJPT1QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATeLAXHHFQbiYejhlxzTZoDwvfy51zkqc9Ab2gy7sduFxVFSNMthzwxP3szf3JPjp6ZLb1d90p4XvaHkSEGF9WAoyYwJDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNJADBGAiEAy46N6zvXan3usr+dhGafxAxSno0qnb52k+zxO0InUIgCIQDuQoji85jNaCcszm05yiCLOm2m+VWNuK83OYMfv5FBxA==", + "cases": [ + { + "id": "isolated-valid", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v1" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-request-nonce", + "c744e8a0220b84e636a33806def5365a" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBcDCCARagAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDDB9TWU5USEVUSUMgSVNPTEFURUQgSU5URVJNRURJQVRFMB4XDTI2MTAyOTA0MDAwMFoXDTI2MTEwMTA0MDAwMFowIjEgMB4GA1UEAwwXU1lOVEhFVElDIElTT0xBVEVEIExFQUYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0jozUwMzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEAmSckYuOGeGasUiCZnRsOYtm5tiy29OcROdP/9bQCsckCIACNtH8Cey8+ENf06dysNGEj4jvMEWpRgCXq3WnUYDSv" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIBYDCCAQegAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDDBdTWU5USEVUSUMgSVNPTEFURUQgUk9PVDAeFw0yNjEwMjgwNDAwMDBaFw0yNjExMjkwNDAwMDBaMCoxKDAmBgNVBAMMH1NZTlRIRVRJQyBJU09MQVRFRCBJTlRFUk1FRElBVEUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ1NpfU73us7ZNLO+I4HQCViQU7xCjkgM1D2aoEqC/3uWC90QL+zz7eLQ1oHarlO8BBEdEjT6TeJdJHHuMvEDu8oyYwJDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNHADBEAiBgtao1it9yjDs3NYQVf8lbCBOgkqLOpX0tOLRypYEoIgIgArUyUQo91H+/0YGOUBj07Sa7TNBADXzyjVUrbr6fxC0=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "77e06830326c4b60a76515cbadde8031ef709dcb7f07254a441d41832fad8461" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793332800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793333100" + ], + [ + "x-datadog-feature-flags-signature", + "MEQCIC9w1kckhbuLoSsPfuYkxegHWlusr5TvLucrSViRS1JMAiAtaS1AYqJirsPUFrBU5XI5zdASxtghiWenKaEJK2Ra0w==" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793332800, + "expected_accept": true, + "rejection_reason": null, + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEMdE6KAiC4TmNqM4Bt71Nlq7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAABq5BZAAAAAAGrkF2wAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJd+BoMDJsS2CnZRXLrd6AMe9wnct/ByVKRB1Bgy+thGGAaQx0HTC8QrPHZuWe/KEKrCdBhO2wdtG0U7Dr1Mec+Q==", + "credential": { + "version": 1, + "generation": "isolated-valid", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGXNr3zYyMeFSL8N5c/fGON/4pcAcGt3fTekkYlURkq2hRANCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0j", + "certificate_der_base64": "MIIBcDCCARagAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDDB9TWU5USEVUSUMgSVNPTEFURUQgSU5URVJNRURJQVRFMB4XDTI2MTAyOTA0MDAwMFoXDTI2MTEwMTA0MDAwMFowIjEgMB4GA1UEAwwXU1lOVEhFVElDIElTT0xBVEVEIExFQUYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0jozUwMzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiEAmSckYuOGeGasUiCZnRsOYtm5tiy29OcROdP/9bQCsckCIACNtH8Cey8+ENf06dysNGEj4jvMEWpRgCXq3WnUYDSv", + "intermediate_der_base64": "MIIBYDCCAQegAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDDBdTWU5USEVUSUMgSVNPTEFURUQgUk9PVDAeFw0yNjEwMjgwNDAwMDBaFw0yNjExMjkwNDAwMDBaMCoxKDAmBgNVBAMMH1NZTlRIRVRJQyBJU09MQVRFRCBJTlRFUk1FRElBVEUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ1NpfU73us7ZNLO+I4HQCViQU7xCjkgM1D2aoEqC/3uWC90QL+zz7eLQ1oHarlO8BBEdEjT6TeJdJHHuMvEDu8oyYwJDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNHADBEAiBgtao1it9yjDs3NYQVf8lbCBOgkqLOpX0tOLRypYEoIgIgArUyUQo91H+/0YGOUBj07Sa7TNBADXzyjVUrbr6fxC0=" + } + }, + { + "id": "isolated-oversized-certificate", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v1" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-request-nonce", + "c744e8a0220b84e636a33806def5365a" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIQhTCCECugAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDDB9TWU5USEVUSUMgSVNPTEFURUQgSU5URVJNRURJQVRFMB4XDTI2MTAyOTA0MDAwMFoXDTI2MTEwMTA0MDAwMFowIjEgMB4GA1UEAwwXU1lOVEhFVElDIElTT0xBVEVEIExFQUYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0jo4IPSDCCD0QwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwgg8NBgMqAwQEgg8EBIIPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKBggqhkjOPQQDAgNIADBFAiAYmdMl86nZV+gYGx5M4klPldnEgGVkDKY2T1JJ802mUQIhALjcxl7/wAmoVOgtEFkVDyPB3aj0Cpp1I7KGjZZgfQ9V" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIBYDCCAQegAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDDBdTWU5USEVUSUMgSVNPTEFURUQgUk9PVDAeFw0yNjEwMjgwNDAwMDBaFw0yNjExMjkwNDAwMDBaMCoxKDAmBgNVBAMMH1NZTlRIRVRJQyBJU09MQVRFRCBJTlRFUk1FRElBVEUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ1NpfU73us7ZNLO+I4HQCViQU7xCjkgM1D2aoEqC/3uWC90QL+zz7eLQ1oHarlO8BBEdEjT6TeJdJHHuMvEDu8oyYwJDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNHADBEAiBgtao1it9yjDs3NYQVf8lbCBOgkqLOpX0tOLRypYEoIgIgArUyUQo91H+/0YGOUBj07Sa7TNBADXzyjVUrbr6fxC0=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "f277398190efca3382ff0a9b86469a61932e890e5145971f574552ff0017dce1" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793332800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793333100" + ], + [ + "x-datadog-feature-flags-signature", + "MEYCIQCzVvFg+s7vRiFTPTyX32x4QvENfj3+e337Su+zUZpU3QIhAPzDujkdOpC1HAJo4QoZG6ESklBEdkQp+j4XjtlwEXZO" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793332800, + "expected_accept": false, + "rejection_reason": "oversized-certificate", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEMdE6KAiC4TmNqM4Bt71Nlq7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAABq5BZAAAAAAGrkF2wAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJ8nc5gZDvyjOC/wqbhkaaYZMuiQ5RRZcfV0VS/wAX3OGAaQx0HTC8QrPHZuWe/KEKrCdBhO2wdtG0U7Dr1Mec+Q==", + "credential": { + "version": 1, + "generation": "isolated-oversized-certificate", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGXNr3zYyMeFSL8N5c/fGON/4pcAcGt3fTekkYlURkq2hRANCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0j", + "certificate_der_base64": "MIIQhTCCECugAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDDB9TWU5USEVUSUMgSVNPTEFURUQgSU5URVJNRURJQVRFMB4XDTI2MTAyOTA0MDAwMFoXDTI2MTEwMTA0MDAwMFowIjEgMB4GA1UEAwwXU1lOVEhFVElDIElTT0xBVEVEIExFQUYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0jo4IPSDCCD0QwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwgg8NBgMqAwQEgg8EBIIPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKBggqhkjOPQQDAgNIADBFAiAYmdMl86nZV+gYGx5M4klPldnEgGVkDKY2T1JJ802mUQIhALjcxl7/wAmoVOgtEFkVDyPB3aj0Cpp1I7KGjZZgfQ9V", + "intermediate_der_base64": "MIIBYDCCAQegAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDDBdTWU5USEVUSUMgSVNPTEFURUQgUk9PVDAeFw0yNjEwMjgwNDAwMDBaFw0yNjExMjkwNDAwMDBaMCoxKDAmBgNVBAMMH1NZTlRIRVRJQyBJU09MQVRFRCBJTlRFUk1FRElBVEUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ1NpfU73us7ZNLO+I4HQCViQU7xCjkgM1D2aoEqC/3uWC90QL+zz7eLQ1oHarlO8BBEdEjT6TeJdJHHuMvEDu8oyYwJDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNHADBEAiBgtao1it9yjDs3NYQVf8lbCBOgkqLOpX0tOLRypYEoIgIgArUyUQo91H+/0YGOUBj07Sa7TNBADXzyjVUrbr6fxC0=" + } + }, + { + "id": "isolated-leaf-ca-true", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v1" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-request-nonce", + "c744e8a0220b84e636a33806def5365a" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBczCCARmgAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDDB9TWU5USEVUSUMgSVNPTEFURUQgSU5URVJNRURJQVRFMB4XDTI2MTAyOTA0MDAwMFoXDTI2MTEwMTA0MDAwMFowIjEgMB4GA1UEAwwXU1lOVEhFVElDIElTT0xBVEVEIExFQUYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0jozgwNjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAhEapT9XYsLE35E/9B4CBnCX7+LHetSUDCIVLqFPL/hgIhANytadI2qE6UuaFnEyR5YgL1st4ig2lQzZI/7qJumDdL" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIBYDCCAQegAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDDBdTWU5USEVUSUMgSVNPTEFURUQgUk9PVDAeFw0yNjEwMjgwNDAwMDBaFw0yNjExMjkwNDAwMDBaMCoxKDAmBgNVBAMMH1NZTlRIRVRJQyBJU09MQVRFRCBJTlRFUk1FRElBVEUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ1NpfU73us7ZNLO+I4HQCViQU7xCjkgM1D2aoEqC/3uWC90QL+zz7eLQ1oHarlO8BBEdEjT6TeJdJHHuMvEDu8oyYwJDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNHADBEAiBgtao1it9yjDs3NYQVf8lbCBOgkqLOpX0tOLRypYEoIgIgArUyUQo91H+/0YGOUBj07Sa7TNBADXzyjVUrbr6fxC0=" + ], + [ + "x-datadog-feature-flags-certificate-id", + "8e10c7e09f73dea4a80a3aa25d3e8de4ad15201e46e0b9a1c8da58b306d8cdf2" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793332800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793333100" + ], + [ + "x-datadog-feature-flags-signature", + "MEUCIHkUrnYB/y229gVUdSDu2RYNhhaC1MN4e4isNpUiRn7QAiEAisiX9gAVMA5+O3vkI0/TqbMYJ5TBvL3HMiEImAi7VCA=" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793332800, + "expected_accept": false, + "rejection_reason": "leaf-ca-true", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEMdE6KAiC4TmNqM4Bt71Nlq7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAABq5BZAAAAAAGrkF2wAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJjhDH4J9z3qSoCjqiXT6N5K0VIB5G4LmhyNpYswbYzfKAaQx0HTC8QrPHZuWe/KEKrCdBhO2wdtG0U7Dr1Mec+Q==", + "credential": { + "version": 1, + "generation": "isolated-leaf-ca-true", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGXNr3zYyMeFSL8N5c/fGON/4pcAcGt3fTekkYlURkq2hRANCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0j", + "certificate_der_base64": "MIIBczCCARmgAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDDB9TWU5USEVUSUMgSVNPTEFURUQgSU5URVJNRURJQVRFMB4XDTI2MTAyOTA0MDAwMFoXDTI2MTEwMTA0MDAwMFowIjEgMB4GA1UEAwwXU1lOVEhFVElDIElTT0xBVEVEIExFQUYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0jozgwNjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNIADBFAiAhEapT9XYsLE35E/9B4CBnCX7+LHetSUDCIVLqFPL/hgIhANytadI2qE6UuaFnEyR5YgL1st4ig2lQzZI/7qJumDdL", + "intermediate_der_base64": "MIIBYDCCAQegAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDDBdTWU5USEVUSUMgSVNPTEFURUQgUk9PVDAeFw0yNjEwMjgwNDAwMDBaFw0yNjExMjkwNDAwMDBaMCoxKDAmBgNVBAMMH1NZTlRIRVRJQyBJU09MQVRFRCBJTlRFUk1FRElBVEUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ1NpfU73us7ZNLO+I4HQCViQU7xCjkgM1D2aoEqC/3uWC90QL+zz7eLQ1oHarlO8BBEdEjT6TeJdJHHuMvEDu8oyYwJDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNHADBEAiBgtao1it9yjDs3NYQVf8lbCBOgkqLOpX0tOLRypYEoIgIgArUyUQo91H+/0YGOUBj07Sa7TNBADXzyjVUrbr6fxC0=" + } + }, + { + "id": "isolated-intermediate-ca-false", + "request": { + "url": "https://flags.example.test:443/precompute/assignments?dd_env=production&marker=a%2Fb", + "method": "POST", + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "dd-client-token", + "synthetic-client-token" + ], + [ + "dd-application-id", + "synthetic-app" + ], + [ + "x-use-cache", + "true" + ], + [ + "x-dd-feature-flags-capabilities", + "response-signing-v1" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-request-nonce", + "c744e8a0220b84e636a33806def5365a" + ] + ], + "body_base64": "eyJzdWJqZWN0Ijp7ImlkIjoic3ludGhldGljLXVzZXIiLCJjb3VudHJ5IjoiVVMifSwiZGRfZW52IjoicHJvZHVjdGlvbiJ9" + }, + "response": { + "status": 200, + "headers": [ + [ + "content-type", + "application/json" + ], + [ + "cache-control", + "no-store, no-transform" + ], + [ + "x-datadog-feature-flags-signature-version", + "1" + ], + [ + "x-datadog-feature-flags-signing-certificate", + "MIIBbzCCARagAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDDB9TWU5USEVUSUMgSVNPTEFURUQgSU5URVJNRURJQVRFMB4XDTI2MTAyOTA0MDAwMFoXDTI2MTEwMTA0MDAwMFowIjEgMB4GA1UEAwwXU1lOVEhFVElDIElTT0xBVEVEIExFQUYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0jozUwMzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNHADBEAiB8uW3r7fa9zYgwXrsINS849/OsCpwLOGvhkp1v6IZLPwIgIvLHNfb+pm9e6C/PIhDG2rlGi9GNgQgQ8MVI+g9ITvE=" + ], + [ + "x-datadog-feature-flags-signing-intermediate", + "MIIBXzCCAQSgAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDDBdTWU5USEVUSUMgSVNPTEFURUQgUk9PVDAeFw0yNjEwMjgwNDAwMDBaFw0yNjExMjkwNDAwMDBaMCoxKDAmBgNVBAMMH1NZTlRIRVRJQyBJU09MQVRFRCBJTlRFUk1FRElBVEUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ1NpfU73us7ZNLO+I4HQCViQU7xCjkgM1D2aoEqC/3uWC90QL+zz7eLQ1oHarlO8BBEdEjT6TeJdJHHuMvEDu8oyMwITAPBgNVHRMBAf8EBTADAgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNJADBGAiEA8olTz2BnczcyPySs3KzkWHvw6l/ROWfT83YWHR7eGoECIQCsqHqopa+feIyQL0LlPKZojXTTHEQgShogQw0U8hg24w==" + ], + [ + "x-datadog-feature-flags-certificate-id", + "7f42a5487ce39151af98eb52552fcf7e8cf200b378ad680544cd57cf857fc251" + ], + [ + "x-datadog-feature-flags-issued-at", + "1793332800" + ], + [ + "x-datadog-feature-flags-expires-at", + "1793333100" + ], + [ + "x-datadog-feature-flags-signature", + "MEYCIQDNT81s912g5F+hsOt3HGILUNoyg4A0fWLSQ4Tgtq6GwAIhAPVQu9sgpIQGjiVBXDB+MRzZkWz+EfDFJq4q0/SkF94I" + ] + ], + "body_base64": "eyJmbGFncyI6eyJjcml0aWNhbC1kZW1vIjp7InZhcmlhdGlvbiI6Im9mZiIsInZhbHVlIjpmYWxzZX19LCJydWxlc1JldmlzaW9uIjoic3ludGhldGljLXIxIiwibGFiZWwiOiJjYWbDqSJ9" + }, + "now": 1793332800, + "expected_accept": false, + "rejection_reason": "intermediate-ca-false", + "transcript_base64": "ZGF0YWRvZy5mZWF0dXJlLWZsYWdzLnByZWNvbXB1dGVkLWFzc2lnbm1lbnRzLnYxAAAAAARQT1NUAAAABWh0dHBzAAAAEmZsYWdzLmV4YW1wbGUudGVzdAAAABcvcHJlY29tcHV0ZS9hc3NpZ25tZW50cwAAAB8/ZGRfZW52PXByb2R1Y3Rpb24mbWFya2VyPWElMkZiAAAAEMdE6KAiC4TmNqM4Bt71Nlq7RTYkNmgw7InPBvfo1awKbp0Kv9q6SfxCHygN4pcnh/6Ng8TcBPzzrxF/TDOL/e9gFxG7FxwZhrfj79251AdPAQAAABBhcHBsaWNhdGlvbi9qc29uAQAAAA1zeW50aGV0aWMtYXBwAAEAAAAEdHJ1ZQEAAAATcmVzcG9uc2Utc2lnbmluZy12MQAAyAAAAABq5BZAAAAAAGrkF2wAAAAAAAAAbBjoo2BVrsFBvsb7/kndkWuEJugJckBE6x8yNdHqNEVJf0KlSHzjkVGvmOtSVS/PfozyALN4rWgFRM1Xz4V/wlFwSkVTZw2jOPDWACztFWnPx1zA2lvrqS74K6xmNPeIIQ==", + "credential": { + "version": 1, + "generation": "isolated-intermediate-ca-false", + "private_key_pkcs8_der_base64": "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGXNr3zYyMeFSL8N5c/fGON/4pcAcGt3fTekkYlURkq2hRANCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0j", + "certificate_der_base64": "MIIBbzCCARagAwIBAgIBAzAKBggqhkjOPQQDAjAqMSgwJgYDVQQDDB9TWU5USEVUSUMgSVNPTEFURUQgSU5URVJNRURJQVRFMB4XDTI2MTAyOTA0MDAwMFoXDTI2MTEwMTA0MDAwMFowIjEgMB4GA1UEAwwXU1lOVEhFVElDIElTT0xBVEVEIExFQUYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASWi1yvSVJWYfsZKAufM5+KCPLFkPTzt1CAb3xpy+AVEnlZLFLbcyggSZHecTg9jCWMpEts93rnM7mLGVIFFU0jozUwMzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAgNHADBEAiB8uW3r7fa9zYgwXrsINS849/OsCpwLOGvhkp1v6IZLPwIgIvLHNfb+pm9e6C/PIhDG2rlGi9GNgQgQ8MVI+g9ITvE=", + "intermediate_der_base64": "MIIBXzCCAQSgAwIBAgIBAjAKBggqhkjOPQQDAjAiMSAwHgYDVQQDDBdTWU5USEVUSUMgSVNPTEFURUQgUk9PVDAeFw0yNjEwMjgwNDAwMDBaFw0yNjExMjkwNDAwMDBaMCoxKDAmBgNVBAMMH1NZTlRIRVRJQyBJU09MQVRFRCBJTlRFUk1FRElBVEUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ1NpfU73us7ZNLO+I4HQCViQU7xCjkgM1D2aoEqC/3uWC90QL+zz7eLQ1oHarlO8BBEdEjT6TeJdJHHuMvEDu8oyMwITAPBgNVHRMBAf8EBTADAgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNJADBGAiEA8olTz2BnczcyPySs3KzkWHvw6l/ROWfT83YWHR7eGoECIQCsqHqopa+feIyQL0LlPKZojXTTHEQgShogQw0U8hg24w==" + } + } + ] +} From 1b8b0321f34279e00158320981f9ac263f1566bb Mon Sep 17 00:00:00 2001 From: Leo Romanovsky Date: Tue, 3 Nov 2026 19:30:43 -0500 Subject: [PATCH 5/5] FFLSDK-267: Request buffered responses when signing is enabled --- features/dd-sdk-android-flags/README.md | 3 +++ .../android/flags/internal/signing/ResponseSigningState.kt | 2 ++ .../flags/internal/signing/ResponseSigningClientTest.kt | 2 ++ 3 files changed, 7 insertions(+) diff --git a/features/dd-sdk-android-flags/README.md b/features/dd-sdk-android-flags/README.md index 08e2a58d9c..4aa1a8f3e0 100644 --- a/features/dd-sdk-android-flags/README.md +++ b/features/dd-sdk-android-flags/README.md @@ -62,6 +62,9 @@ The `FlagsConfiguration.Builder` supports the following options: #### Response signing (experimental draft) +Signing-enabled requests set `X-stream: false` because whole-body proofs require buffered delivery. +Both observe and required modes apply this override. Signing-off requests keep their ordinary transport selection. + The first public response-signing protocol is v1. The SDK advertises `response-signing-v1`, sends signature version `1`, and verifies the `datadog.feature-flags.precomputed-assignments.v1` transcript. Earlier POC v1/v2 diff --git a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt index 75d0f18eac..506f187407 100644 --- a/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt +++ b/features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningState.kt @@ -72,7 +72,9 @@ internal class ResponseSigningState( val capabilities = original.header("x-dd-feature-flags-capabilities") ?.split(',')?.map { it.trim() }?.toMutableSet() ?: mutableSetOf() capabilities.add(ResponseSigningVerifier.CAPABILITY) + // Whole-body proofs require buffered delivery, regardless of the server rollout. val request = original.newBuilder() + .header("X-stream", "false") .header("x-dd-feature-flags-capabilities", capabilities.sorted().joinToString(",")) .header(ResponseSigningVerifier.PREFIX + "signature-version", "1") .header(ResponseSigningVerifier.PREFIX + "request-nonce", nonce.signingBytes().hex()) diff --git a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt index 846f126075..c351a1f866 100644 --- a/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt +++ b/features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/signing/ResponseSigningClientTest.kt @@ -120,6 +120,8 @@ internal class ResponseSigningClientTest { assertThat(requests).hasSize(1) assertThat(requests.single().header(ResponseSigningVerifier.PREFIX + "signature-version")) .isEqualTo(if (mode == ResponseSigningMode.OFF) null else "1") + assertThat(requests.single().header("X-stream")) + .isEqualTo(if (mode == ResponseSigningMode.OFF) null else "false") if (mode == ResponseSigningMode.REQUIRED) verifyNoInteractions(mockStore) }