github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl@v0.2.0/AwsCryptographyMaterialProvidersOperations/AwsCryptographyMaterialProvidersOperations.go (about)

     1  // Package AwsCryptographyMaterialProvidersOperations
     2  // Dafny module AwsCryptographyMaterialProvidersOperations compiled into Go
     3  
     4  package AwsCryptographyMaterialProvidersOperations
     5  
     6  import (
     7  	os "os"
     8  
     9  	m_ComAmazonawsDynamodbTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/dynamodb/ComAmazonawsDynamodbTypes"
    10  	m_Com_Amazonaws_Dynamodb "github.com/aws/aws-cryptographic-material-providers-library/releases/go/dynamodb/Com_Amazonaws_Dynamodb"
    11  	m_ComAmazonawsKmsTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/kms/ComAmazonawsKmsTypes"
    12  	m_Com_Amazonaws_Kms "github.com/aws/aws-cryptographic-material-providers-library/releases/go/kms/Com_Amazonaws_Kms"
    13  	m_AlgorithmSuites "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AlgorithmSuites"
    14  	m_AwsArnParsing "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsArnParsing"
    15  	m_AwsCryptographyKeyStoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsCryptographyKeyStoreOperations"
    16  	m_AwsCryptographyKeyStoreTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsCryptographyKeyStoreTypes"
    17  	m_AwsCryptographyMaterialProvidersTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsCryptographyMaterialProvidersTypes"
    18  	m_AwsKmsDiscoveryKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsDiscoveryKeyring"
    19  	m_AwsKmsEcdhKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsEcdhKeyring"
    20  	m_AwsKmsHierarchicalKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsHierarchicalKeyring"
    21  	m_AwsKmsKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsKeyring"
    22  	m_AwsKmsMrkAreUnique "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkAreUnique"
    23  	m_AwsKmsMrkDiscoveryKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkDiscoveryKeyring"
    24  	m_AwsKmsMrkKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkKeyring"
    25  	m_AwsKmsMrkMatchForDecrypt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkMatchForDecrypt"
    26  	m_AwsKmsRsaKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsRsaKeyring"
    27  	m_AwsKmsUtils "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsUtils"
    28  	m_CMM "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CMM"
    29  	m_CacheConstants "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CacheConstants"
    30  	m_CanonicalEncryptionContext "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CanonicalEncryptionContext"
    31  	m_Commitment "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Commitment"
    32  	m_Constants "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Constants"
    33  	m_CreateKeyStoreTable "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeyStoreTable"
    34  	m_CreateKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeys"
    35  	m_DDBKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DDBKeystoreOperations"
    36  	m_DefaultCMM "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DefaultCMM"
    37  	m_DefaultClientSupplier "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DefaultClientSupplier"
    38  	m_Defaults "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Defaults"
    39  	m_DiscoveryMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DiscoveryMultiKeyring"
    40  	m_EcdhEdkWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/EcdhEdkWrapping"
    41  	m_EdkWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/EdkWrapping"
    42  	m_ErrorMessages "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/ErrorMessages"
    43  	m_GetKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/GetKeys"
    44  	m_IntermediateKeyWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/IntermediateKeyWrapping"
    45  	m_KMSKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KMSKeystoreOperations"
    46  	m_KeyStore "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KeyStore"
    47  	m_KeyStoreErrorMessages "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KeyStoreErrorMessages"
    48  	m_Keyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Keyring"
    49  	m_KmsArn "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KmsArn"
    50  	m_LocalCMC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/LocalCMC"
    51  	m_MaterialWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MaterialWrapping"
    52  	m_Materials "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Materials"
    53  	m_MrkAwareDiscoveryMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MrkAwareDiscoveryMultiKeyring"
    54  	m_MrkAwareStrictMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MrkAwareStrictMultiKeyring"
    55  	m_MultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MultiKeyring"
    56  	m_RawAESKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/RawAESKeyring"
    57  	m_RawECDHKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/RawECDHKeyring"
    58  	m_RawRSAKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/RawRSAKeyring"
    59  	m_RequiredEncryptionContextCMM "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/RequiredEncryptionContextCMM"
    60  	m_StormTracker "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/StormTracker"
    61  	m_StormTrackingCMC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/StormTrackingCMC"
    62  	m_StrictMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/StrictMultiKeyring"
    63  	m_Structure "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Structure"
    64  	m_SynchronizedLocalCMC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/SynchronizedLocalCMC"
    65  	m_Utils "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Utils"
    66  	m_AtomicPrimitives "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AtomicPrimitives"
    67  	m_AwsCryptographyPrimitivesOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesOperations"
    68  	m_AwsCryptographyPrimitivesTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesTypes"
    69  	m_Digest "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Digest"
    70  	m_HKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/HKDF"
    71  	m_KdfCtr "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/KdfCtr"
    72  	m_Random "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Random"
    73  	m_WrappedHKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHKDF"
    74  	m_WrappedHMAC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHMAC"
    75  	m_Actions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Actions"
    76  	m_Base64 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64"
    77  	m_Base64Lemmas "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64Lemmas"
    78  	m_BoundedInts "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/BoundedInts"
    79  	m_DivInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternals"
    80  	m_DivInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternalsNonlinear"
    81  	m_DivMod "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivMod"
    82  	m_FileIO "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FileIO"
    83  	m_FloatCompare "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FloatCompare"
    84  	m_Functions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Functions"
    85  	m_GeneralInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GeneralInternals"
    86  	m_GetOpt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GetOpt"
    87  	m_HexStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/HexStrings"
    88  	m_Logarithm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Logarithm"
    89  	m__Math "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Math_"
    90  	m_ModInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternals"
    91  	m_ModInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternalsNonlinear"
    92  	m_Mul "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Mul"
    93  	m_MulInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternals"
    94  	m_MulInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternalsNonlinear"
    95  	m_Power "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Power"
    96  	m_Relations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Relations"
    97  	m_Seq "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq"
    98  	m_Seq_MergeSort "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq_MergeSort"
    99  	m_Sorting "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Sorting"
   100  	m_StandardLibrary "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary"
   101  	m_StandardLibraryInterop "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibraryInterop"
   102  	m_StandardLibrary_Sequence "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_Sequence"
   103  	m_StandardLibrary_String "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_String"
   104  	m_StandardLibrary_UInt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_UInt"
   105  	m_Streams "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Streams"
   106  	m_UTF8 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UTF8"
   107  	m_UUID "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UUID"
   108  	m_UnicodeStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UnicodeStrings"
   109  	m__Unicode "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Unicode_"
   110  	m_Utf16EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf16EncodingForm"
   111  	m_Utf8EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf8EncodingForm"
   112  	m_Wrappers "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Wrappers"
   113  	m__System "github.com/dafny-lang/DafnyRuntimeGo/v4/System_"
   114  	_dafny "github.com/dafny-lang/DafnyRuntimeGo/v4/dafny"
   115  )
   116  
   117  var _ = os.Args
   118  var _ _dafny.Dummy__
   119  var _ m__System.Dummy__
   120  var _ m_Wrappers.Dummy__
   121  var _ m_BoundedInts.Dummy__
   122  var _ m_StandardLibrary_UInt.Dummy__
   123  var _ m_StandardLibrary_Sequence.Dummy__
   124  var _ m_StandardLibrary_String.Dummy__
   125  var _ m_StandardLibrary.Dummy__
   126  var _ m_AwsCryptographyPrimitivesTypes.Dummy__
   127  var _ m_Random.Dummy__
   128  var _ m_Digest.Dummy__
   129  var _ m_WrappedHMAC.Dummy__
   130  var _ m_HKDF.Dummy__
   131  var _ m_WrappedHKDF.Dummy__
   132  var _ m_KdfCtr.Dummy__
   133  var _ m_AwsCryptographyPrimitivesOperations.Dummy__
   134  var _ m_AtomicPrimitives.Dummy__
   135  var _ m_ComAmazonawsDynamodbTypes.Dummy__
   136  var _ m_ComAmazonawsKmsTypes.Dummy__
   137  var _ m_Relations.Dummy__
   138  var _ m_Seq_MergeSort.Dummy__
   139  var _ m__Math.Dummy__
   140  var _ m_Seq.Dummy__
   141  var _ m__Unicode.Dummy__
   142  var _ m_Functions.Dummy__
   143  var _ m_Utf8EncodingForm.Dummy__
   144  var _ m_Utf16EncodingForm.Dummy__
   145  var _ m_UnicodeStrings.Dummy__
   146  var _ m_FileIO.Dummy__
   147  var _ m_GeneralInternals.Dummy__
   148  var _ m_MulInternalsNonlinear.Dummy__
   149  var _ m_MulInternals.Dummy__
   150  var _ m_Mul.Dummy__
   151  var _ m_ModInternalsNonlinear.Dummy__
   152  var _ m_DivInternalsNonlinear.Dummy__
   153  var _ m_ModInternals.Dummy__
   154  var _ m_DivInternals.Dummy__
   155  var _ m_DivMod.Dummy__
   156  var _ m_Power.Dummy__
   157  var _ m_Logarithm.Dummy__
   158  var _ m_StandardLibraryInterop.Dummy__
   159  var _ m_Streams.Dummy__
   160  var _ m_Sorting.Dummy__
   161  var _ m_HexStrings.Dummy__
   162  var _ m_GetOpt.Dummy__
   163  var _ m_FloatCompare.Dummy__
   164  var _ m_Base64.Dummy__
   165  var _ m_Base64Lemmas.Dummy__
   166  var _ m_Actions.Dummy__
   167  var _ m_AwsCryptographyKeyStoreTypes.Dummy__
   168  var _ m_AwsCryptographyMaterialProvidersTypes.Dummy__
   169  var _ m_AwsArnParsing.Dummy__
   170  var _ m_AwsKmsMrkMatchForDecrypt.Dummy__
   171  var _ m_AwsKmsUtils.Dummy__
   172  var _ m_KeyStoreErrorMessages.Dummy__
   173  var _ m_KmsArn.Dummy__
   174  var _ m_Structure.Dummy__
   175  var _ m_KMSKeystoreOperations.Dummy__
   176  var _ m_DDBKeystoreOperations.Dummy__
   177  var _ m_CreateKeys.Dummy__
   178  var _ m_CreateKeyStoreTable.Dummy__
   179  var _ m_GetKeys.Dummy__
   180  var _ m_AwsCryptographyKeyStoreOperations.Dummy__
   181  var _ m_Com_Amazonaws_Kms.Dummy__
   182  var _ m_Com_Amazonaws_Dynamodb.Dummy__
   183  var _ m_KeyStore.Dummy__
   184  var _ m_AlgorithmSuites.Dummy__
   185  var _ m_Materials.Dummy__
   186  var _ m_Keyring.Dummy__
   187  var _ m_MultiKeyring.Dummy__
   188  var _ m_AwsKmsMrkAreUnique.Dummy__
   189  var _ m_Constants.Dummy__
   190  var _ m_MaterialWrapping.Dummy__
   191  var _ m_CanonicalEncryptionContext.Dummy__
   192  var _ m_IntermediateKeyWrapping.Dummy__
   193  var _ m_EdkWrapping.Dummy__
   194  var _ m_ErrorMessages.Dummy__
   195  var _ m_AwsKmsKeyring.Dummy__
   196  var _ m_StrictMultiKeyring.Dummy__
   197  var _ m_AwsKmsDiscoveryKeyring.Dummy__
   198  var _ m_DiscoveryMultiKeyring.Dummy__
   199  var _ m_AwsKmsMrkDiscoveryKeyring.Dummy__
   200  var _ m_MrkAwareDiscoveryMultiKeyring.Dummy__
   201  var _ m_AwsKmsMrkKeyring.Dummy__
   202  var _ m_MrkAwareStrictMultiKeyring.Dummy__
   203  var _ m_LocalCMC.Dummy__
   204  var _ m_SynchronizedLocalCMC.Dummy__
   205  var _ m_StormTracker.Dummy__
   206  var _ m_StormTrackingCMC.Dummy__
   207  var _ m_CacheConstants.Dummy__
   208  var _ m_AwsKmsHierarchicalKeyring.Dummy__
   209  var _ m_AwsKmsRsaKeyring.Dummy__
   210  var _ m_EcdhEdkWrapping.Dummy__
   211  var _ m_RawECDHKeyring.Dummy__
   212  var _ m_AwsKmsEcdhKeyring.Dummy__
   213  var _ m_RawAESKeyring.Dummy__
   214  var _ m_RawRSAKeyring.Dummy__
   215  var _ m_CMM.Dummy__
   216  var _ m_Defaults.Dummy__
   217  var _ m_Commitment.Dummy__
   218  var _ m_DefaultCMM.Dummy__
   219  var _ m_DefaultClientSupplier.Dummy__
   220  var _ m_Utils.Dummy__
   221  var _ m_RequiredEncryptionContextCMM.Dummy__
   222  
   223  type Dummy__ struct{}
   224  
   225  // Definition of class Default__
   226  type Default__ struct {
   227  	dummy byte
   228  }
   229  
   230  func New_Default___() *Default__ {
   231  	_this := Default__{}
   232  
   233  	return &_this
   234  }
   235  
   236  type CompanionStruct_Default___ struct {
   237  }
   238  
   239  var Companion_Default___ = CompanionStruct_Default___{}
   240  
   241  func (_this *Default__) Equals(other *Default__) bool {
   242  	return _this == other
   243  }
   244  
   245  func (_this *Default__) EqualsGeneric(x interface{}) bool {
   246  	other, ok := x.(*Default__)
   247  	return ok && _this.Equals(other)
   248  }
   249  
   250  func (*Default__) String() string {
   251  	return "AwsCryptographyMaterialProvidersOperations.Default__"
   252  }
   253  func (_this *Default__) ParentTraits_() []*_dafny.TraitID {
   254  	return [](*_dafny.TraitID){}
   255  }
   256  
   257  var _ _dafny.TraitOffspring = &Default__{}
   258  
   259  func (_static *CompanionStruct_Default___) CreateAwsKmsKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsKeyringInput) m_Wrappers.Result {
   260  	var output m_Wrappers.Result = m_Wrappers.Result{}
   261  	_ = output
   262  	var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf())
   263  	_ = _0_valueOrError0
   264  	_0_valueOrError0 = m_AwsKmsUtils.Companion_Default___.ValidateKmsKeyId((input).Dtor_kmsKeyId())
   265  	if (_0_valueOrError0).IsFailure() {
   266  		output = (_0_valueOrError0).PropagateFailure()
   267  		return output
   268  	}
   269  	var _1___v0 _dafny.Tuple
   270  	_ = _1___v0
   271  	_1___v0 = (_0_valueOrError0).Extract().(_dafny.Tuple)
   272  	var _2_valueOrError1 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   273  	_ = _2_valueOrError1
   274  	_2_valueOrError1 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
   275  	if (_2_valueOrError1).IsFailure() {
   276  		output = (_2_valueOrError1).PropagateFailure()
   277  		return output
   278  	}
   279  	var _3_grantTokens _dafny.Sequence
   280  	_ = _3_grantTokens
   281  	_3_grantTokens = (_2_valueOrError1).Extract().(_dafny.Sequence)
   282  	var _4_keyring *m_AwsKmsKeyring.AwsKmsKeyring
   283  	_ = _4_keyring
   284  	var _nw0 *m_AwsKmsKeyring.AwsKmsKeyring = m_AwsKmsKeyring.New_AwsKmsKeyring_()
   285  	_ = _nw0
   286  	_nw0.Ctor__((input).Dtor_kmsClient(), (input).Dtor_kmsKeyId(), _3_grantTokens)
   287  	_4_keyring = _nw0
   288  	output = m_Wrappers.Companion_Result_.Create_Success_(_4_keyring)
   289  	return output
   290  	return output
   291  }
   292  func (_static *CompanionStruct_Default___) CreateAwsKmsDiscoveryKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsDiscoveryKeyringInput) m_Wrappers.Result {
   293  	var output m_Wrappers.Result = m_Wrappers.Result{}
   294  	_ = output
   295  	if ((input).Dtor_discoveryFilter()).Is_Some() {
   296  		var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf())
   297  		_ = _0_valueOrError0
   298  		_0_valueOrError0 = m_AwsKmsUtils.Companion_Default___.ValidateDiscoveryFilter(((input).Dtor_discoveryFilter()).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.DiscoveryFilter))
   299  		if (_0_valueOrError0).IsFailure() {
   300  			output = (_0_valueOrError0).PropagateFailure()
   301  			return output
   302  		}
   303  		var _1___v1 _dafny.Tuple
   304  		_ = _1___v1
   305  		_1___v1 = (_0_valueOrError0).Extract().(_dafny.Tuple)
   306  	}
   307  	var _2_valueOrError1 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   308  	_ = _2_valueOrError1
   309  	_2_valueOrError1 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
   310  	if (_2_valueOrError1).IsFailure() {
   311  		output = (_2_valueOrError1).PropagateFailure()
   312  		return output
   313  	}
   314  	var _3_grantTokens _dafny.Sequence
   315  	_ = _3_grantTokens
   316  	_3_grantTokens = (_2_valueOrError1).Extract().(_dafny.Sequence)
   317  	var _4_keyring *m_AwsKmsDiscoveryKeyring.AwsKmsDiscoveryKeyring
   318  	_ = _4_keyring
   319  	var _nw0 *m_AwsKmsDiscoveryKeyring.AwsKmsDiscoveryKeyring = m_AwsKmsDiscoveryKeyring.New_AwsKmsDiscoveryKeyring_()
   320  	_ = _nw0
   321  	_nw0.Ctor__((input).Dtor_kmsClient(), (input).Dtor_discoveryFilter(), _3_grantTokens)
   322  	_4_keyring = _nw0
   323  	output = m_Wrappers.Companion_Result_.Create_Success_(_4_keyring)
   324  	return output
   325  	return output
   326  }
   327  func (_static *CompanionStruct_Default___) CreateAwsKmsMultiKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsMultiKeyringInput) m_Wrappers.Result {
   328  	var output m_Wrappers.Result = m_Wrappers.Result{}
   329  	_ = output
   330  	var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   331  	_ = _0_valueOrError0
   332  	_0_valueOrError0 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
   333  	if (_0_valueOrError0).IsFailure() {
   334  		output = (_0_valueOrError0).PropagateFailure()
   335  		return output
   336  	}
   337  	var _1_grantTokens _dafny.Sequence
   338  	_ = _1_grantTokens
   339  	_1_grantTokens = (_0_valueOrError0).Extract().(_dafny.Sequence)
   340  	if ((input).Dtor_clientSupplier()).Is_Some() {
   341  		var _out0 m_Wrappers.Result
   342  		_ = _out0
   343  		_out0 = m_StrictMultiKeyring.Companion_Default___.StrictMultiKeyring((input).Dtor_generator(), (input).Dtor_kmsKeyIds(), m_AwsCryptographyMaterialProvidersTypes.Companion_IClientSupplier_.CastTo_(((input).Dtor_clientSupplier()).Dtor_value()), m_Wrappers.Companion_Option_.Create_Some_(_1_grantTokens))
   344  		output = _out0
   345  	} else {
   346  		var _2_valueOrError1 m_Wrappers.Result = m_Wrappers.Result{}
   347  		_ = _2_valueOrError1
   348  		var _out1 m_Wrappers.Result
   349  		_ = _out1
   350  		_out1 = Companion_Default___.CreateDefaultClientSupplier(config, m_AwsCryptographyMaterialProvidersTypes.Companion_CreateDefaultClientSupplierInput_.Create_CreateDefaultClientSupplierInput_())
   351  		_2_valueOrError1 = _out1
   352  		if (_2_valueOrError1).IsFailure() {
   353  			output = (_2_valueOrError1).PropagateFailure()
   354  			return output
   355  		}
   356  		var _3_clientSupplier m_AwsCryptographyMaterialProvidersTypes.IClientSupplier
   357  		_ = _3_clientSupplier
   358  		_3_clientSupplier = m_AwsCryptographyMaterialProvidersTypes.Companion_IClientSupplier_.CastTo_((_2_valueOrError1).Extract())
   359  		var _out2 m_Wrappers.Result
   360  		_ = _out2
   361  		_out2 = m_StrictMultiKeyring.Companion_Default___.StrictMultiKeyring((input).Dtor_generator(), (input).Dtor_kmsKeyIds(), _3_clientSupplier, m_Wrappers.Companion_Option_.Create_Some_(_1_grantTokens))
   362  		output = _out2
   363  	}
   364  	return output
   365  }
   366  func (_static *CompanionStruct_Default___) CreateAwsKmsDiscoveryMultiKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsDiscoveryMultiKeyringInput) m_Wrappers.Result {
   367  	var output m_Wrappers.Result = m_Wrappers.Result{}
   368  	_ = output
   369  	var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   370  	_ = _0_valueOrError0
   371  	_0_valueOrError0 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
   372  	if (_0_valueOrError0).IsFailure() {
   373  		output = (_0_valueOrError0).PropagateFailure()
   374  		return output
   375  	}
   376  	var _1_grantTokens _dafny.Sequence
   377  	_ = _1_grantTokens
   378  	_1_grantTokens = (_0_valueOrError0).Extract().(_dafny.Sequence)
   379  	var _2_clientSupplier m_AwsCryptographyMaterialProvidersTypes.IClientSupplier = (m_AwsCryptographyMaterialProvidersTypes.IClientSupplier)(nil)
   380  	_ = _2_clientSupplier
   381  	if ((input).Dtor_clientSupplier()).Is_None() {
   382  		var _3_valueOrError1 m_Wrappers.Result = m_Wrappers.Result{}
   383  		_ = _3_valueOrError1
   384  		var _out0 m_Wrappers.Result
   385  		_ = _out0
   386  		_out0 = Companion_Default___.CreateDefaultClientSupplier(config, m_AwsCryptographyMaterialProvidersTypes.Companion_CreateDefaultClientSupplierInput_.Create_CreateDefaultClientSupplierInput_())
   387  		_3_valueOrError1 = _out0
   388  		if (_3_valueOrError1).IsFailure() {
   389  			output = (_3_valueOrError1).PropagateFailure()
   390  			return output
   391  		}
   392  		_2_clientSupplier = m_AwsCryptographyMaterialProvidersTypes.Companion_IClientSupplier_.CastTo_((_3_valueOrError1).Extract())
   393  	} else {
   394  		_2_clientSupplier = m_AwsCryptographyMaterialProvidersTypes.Companion_IClientSupplier_.CastTo_(((input).Dtor_clientSupplier()).Dtor_value())
   395  	}
   396  	var _out1 m_Wrappers.Result
   397  	_ = _out1
   398  	_out1 = m_DiscoveryMultiKeyring.Companion_Default___.DiscoveryMultiKeyring((input).Dtor_regions(), (input).Dtor_discoveryFilter(), _2_clientSupplier, m_Wrappers.Companion_Option_.Create_Some_(_1_grantTokens))
   399  	output = _out1
   400  	return output
   401  }
   402  func (_static *CompanionStruct_Default___) CreateAwsKmsMrkKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsMrkKeyringInput) m_Wrappers.Result {
   403  	var output m_Wrappers.Result = m_Wrappers.Result{}
   404  	_ = output
   405  	var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf())
   406  	_ = _0_valueOrError0
   407  	_0_valueOrError0 = m_AwsKmsUtils.Companion_Default___.ValidateKmsKeyId((input).Dtor_kmsKeyId())
   408  	if (_0_valueOrError0).IsFailure() {
   409  		output = (_0_valueOrError0).PropagateFailure()
   410  		return output
   411  	}
   412  	var _1___v2 _dafny.Tuple
   413  	_ = _1___v2
   414  	_1___v2 = (_0_valueOrError0).Extract().(_dafny.Tuple)
   415  	var _2_valueOrError1 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   416  	_ = _2_valueOrError1
   417  	_2_valueOrError1 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
   418  	if (_2_valueOrError1).IsFailure() {
   419  		output = (_2_valueOrError1).PropagateFailure()
   420  		return output
   421  	}
   422  	var _3_grantTokens _dafny.Sequence
   423  	_ = _3_grantTokens
   424  	_3_grantTokens = (_2_valueOrError1).Extract().(_dafny.Sequence)
   425  	var _4_keyring *m_AwsKmsMrkKeyring.AwsKmsMrkKeyring
   426  	_ = _4_keyring
   427  	var _nw0 *m_AwsKmsMrkKeyring.AwsKmsMrkKeyring = m_AwsKmsMrkKeyring.New_AwsKmsMrkKeyring_()
   428  	_ = _nw0
   429  	_nw0.Ctor__((input).Dtor_kmsClient(), (input).Dtor_kmsKeyId(), _3_grantTokens)
   430  	_4_keyring = _nw0
   431  	output = m_Wrappers.Companion_Result_.Create_Success_(_4_keyring)
   432  	return output
   433  	return output
   434  }
   435  func (_static *CompanionStruct_Default___) CreateAwsKmsMrkMultiKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsMrkMultiKeyringInput) m_Wrappers.Result {
   436  	var output m_Wrappers.Result = m_Wrappers.Result{}
   437  	_ = output
   438  	var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   439  	_ = _0_valueOrError0
   440  	_0_valueOrError0 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
   441  	if (_0_valueOrError0).IsFailure() {
   442  		output = (_0_valueOrError0).PropagateFailure()
   443  		return output
   444  	}
   445  	var _1_grantTokens _dafny.Sequence
   446  	_ = _1_grantTokens
   447  	_1_grantTokens = (_0_valueOrError0).Extract().(_dafny.Sequence)
   448  	var _2_clientSupplier m_AwsCryptographyMaterialProvidersTypes.IClientSupplier = (m_AwsCryptographyMaterialProvidersTypes.IClientSupplier)(nil)
   449  	_ = _2_clientSupplier
   450  	if ((input).Dtor_clientSupplier()).Is_None() {
   451  		var _3_valueOrError1 m_Wrappers.Result = m_Wrappers.Result{}
   452  		_ = _3_valueOrError1
   453  		var _out0 m_Wrappers.Result
   454  		_ = _out0
   455  		_out0 = Companion_Default___.CreateDefaultClientSupplier(config, m_AwsCryptographyMaterialProvidersTypes.Companion_CreateDefaultClientSupplierInput_.Create_CreateDefaultClientSupplierInput_())
   456  		_3_valueOrError1 = _out0
   457  		if (_3_valueOrError1).IsFailure() {
   458  			output = (_3_valueOrError1).PropagateFailure()
   459  			return output
   460  		}
   461  		_2_clientSupplier = m_AwsCryptographyMaterialProvidersTypes.Companion_IClientSupplier_.CastTo_((_3_valueOrError1).Extract())
   462  	} else {
   463  		_2_clientSupplier = m_AwsCryptographyMaterialProvidersTypes.Companion_IClientSupplier_.CastTo_(((input).Dtor_clientSupplier()).Dtor_value())
   464  	}
   465  	var _out1 m_Wrappers.Result
   466  	_ = _out1
   467  	_out1 = m_MrkAwareStrictMultiKeyring.Companion_Default___.MrkAwareStrictMultiKeyring((input).Dtor_generator(), (input).Dtor_kmsKeyIds(), _2_clientSupplier, m_Wrappers.Companion_Option_.Create_Some_(_1_grantTokens))
   468  	output = _out1
   469  	return output
   470  }
   471  func (_static *CompanionStruct_Default___) CreateAwsKmsMrkDiscoveryKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsMrkDiscoveryKeyringInput) m_Wrappers.Result {
   472  	var output m_Wrappers.Result = m_Wrappers.Result{}
   473  	_ = output
   474  	if ((input).Dtor_discoveryFilter()).Is_Some() {
   475  		var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf())
   476  		_ = _0_valueOrError0
   477  		_0_valueOrError0 = m_AwsKmsUtils.Companion_Default___.ValidateDiscoveryFilter(((input).Dtor_discoveryFilter()).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.DiscoveryFilter))
   478  		if (_0_valueOrError0).IsFailure() {
   479  			output = (_0_valueOrError0).PropagateFailure()
   480  			return output
   481  		}
   482  		var _1___v3 _dafny.Tuple
   483  		_ = _1___v3
   484  		_1___v3 = (_0_valueOrError0).Extract().(_dafny.Tuple)
   485  	}
   486  	var _2_regionMatch m_Wrappers.Option
   487  	_ = _2_regionMatch
   488  	_2_regionMatch = m_Com_Amazonaws_Kms.Companion_Default___.RegionMatch((input).Dtor_kmsClient(), (input).Dtor_region())
   489  	var _3_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   490  	_ = _3_valueOrError1
   491  	_3_valueOrError1 = m_Wrappers.Companion_Default___.Need(!(_2_regionMatch).Equals(m_Wrappers.Companion_Option_.Create_Some_(false)), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Provided client and region do not match")))
   492  	if (_3_valueOrError1).IsFailure() {
   493  		output = (_3_valueOrError1).PropagateFailure()
   494  		return output
   495  	}
   496  	var _4_valueOrError2 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   497  	_ = _4_valueOrError2
   498  	_4_valueOrError2 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
   499  	if (_4_valueOrError2).IsFailure() {
   500  		output = (_4_valueOrError2).PropagateFailure()
   501  		return output
   502  	}
   503  	var _5_grantTokens _dafny.Sequence
   504  	_ = _5_grantTokens
   505  	_5_grantTokens = (_4_valueOrError2).Extract().(_dafny.Sequence)
   506  	var _6_keyring *m_AwsKmsMrkDiscoveryKeyring.AwsKmsMrkDiscoveryKeyring
   507  	_ = _6_keyring
   508  	var _nw0 *m_AwsKmsMrkDiscoveryKeyring.AwsKmsMrkDiscoveryKeyring = m_AwsKmsMrkDiscoveryKeyring.New_AwsKmsMrkDiscoveryKeyring_()
   509  	_ = _nw0
   510  	_nw0.Ctor__((input).Dtor_kmsClient(), (input).Dtor_region(), (input).Dtor_discoveryFilter(), _5_grantTokens)
   511  	_6_keyring = _nw0
   512  	output = m_Wrappers.Companion_Result_.Create_Success_(_6_keyring)
   513  	return output
   514  	return output
   515  }
   516  func (_static *CompanionStruct_Default___) CreateAwsKmsMrkDiscoveryMultiKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsMrkDiscoveryMultiKeyringInput) m_Wrappers.Result {
   517  	var output m_Wrappers.Result = m_Wrappers.Result{}
   518  	_ = output
   519  	var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   520  	_ = _0_valueOrError0
   521  	_0_valueOrError0 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
   522  	if (_0_valueOrError0).IsFailure() {
   523  		output = (_0_valueOrError0).PropagateFailure()
   524  		return output
   525  	}
   526  	var _1_grantTokens _dafny.Sequence
   527  	_ = _1_grantTokens
   528  	_1_grantTokens = (_0_valueOrError0).Extract().(_dafny.Sequence)
   529  	var _2_clientSupplier m_AwsCryptographyMaterialProvidersTypes.IClientSupplier = (m_AwsCryptographyMaterialProvidersTypes.IClientSupplier)(nil)
   530  	_ = _2_clientSupplier
   531  	if ((input).Dtor_clientSupplier()).Is_None() {
   532  		var _3_valueOrError1 m_Wrappers.Result = m_Wrappers.Result{}
   533  		_ = _3_valueOrError1
   534  		var _out0 m_Wrappers.Result
   535  		_ = _out0
   536  		_out0 = Companion_Default___.CreateDefaultClientSupplier(config, m_AwsCryptographyMaterialProvidersTypes.Companion_CreateDefaultClientSupplierInput_.Create_CreateDefaultClientSupplierInput_())
   537  		_3_valueOrError1 = _out0
   538  		if (_3_valueOrError1).IsFailure() {
   539  			output = (_3_valueOrError1).PropagateFailure()
   540  			return output
   541  		}
   542  		_2_clientSupplier = m_AwsCryptographyMaterialProvidersTypes.Companion_IClientSupplier_.CastTo_((_3_valueOrError1).Extract())
   543  	} else {
   544  		_2_clientSupplier = m_AwsCryptographyMaterialProvidersTypes.Companion_IClientSupplier_.CastTo_(((input).Dtor_clientSupplier()).Dtor_value())
   545  	}
   546  	var _out1 m_Wrappers.Result
   547  	_ = _out1
   548  	_out1 = m_MrkAwareDiscoveryMultiKeyring.Companion_Default___.MrkAwareDiscoveryMultiKeyring((input).Dtor_regions(), (input).Dtor_discoveryFilter(), _2_clientSupplier, m_Wrappers.Companion_Option_.Create_Some_(_1_grantTokens))
   549  	output = _out1
   550  	return output
   551  }
   552  func (_static *CompanionStruct_Default___) N(n int64) _dafny.Sequence {
   553  	return m_StandardLibrary_String.Companion_Default___.Base10Int2String(_dafny.IntOfInt64(n))
   554  }
   555  func (_static *CompanionStruct_Default___) CheckCache(cache m_AwsCryptographyMaterialProvidersTypes.CacheType, ttlSeconds int64) m_Wrappers.Outcome {
   556  	var output m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   557  	_ = output
   558  	if (cache).Is_StormTracking() {
   559  		var _0_gracePeriod int64
   560  		_ = _0_gracePeriod
   561  		if ((((cache).Dtor_StormTracking()).Dtor_timeUnits()).UnwrapOr(m_AwsCryptographyMaterialProvidersTypes.Companion_TimeUnits_.Create_Seconds_()).(m_AwsCryptographyMaterialProvidersTypes.TimeUnits)).Is_Seconds() {
   562  			_0_gracePeriod = int64(((cache).Dtor_StormTracking()).Dtor_gracePeriod())
   563  		} else {
   564  			_0_gracePeriod = _dafny.DivInt64(int64(((cache).Dtor_StormTracking()).Dtor_gracePeriod()), int64(1000))
   565  		}
   566  		var _1_storm m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache
   567  		_ = _1_storm
   568  		_1_storm = (cache).Dtor_StormTracking()
   569  		if (ttlSeconds) <= (_0_gracePeriod) {
   570  			var _2_msg _dafny.Sequence
   571  			_ = _2_msg
   572  			_2_msg = _dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.SeqOfString("When creating an AwsKmsHierarchicalKeyring with a StormCache, "), _dafny.SeqOfString("the ttlSeconds of the KeyRing must be greater than the gracePeriod of the StormCache ")), _dafny.SeqOfString("yet the ttlSeconds is ")), Companion_Default___.N(ttlSeconds)), _dafny.SeqOfString(" and the gracePeriod is ")), Companion_Default___.N(_0_gracePeriod)), _dafny.SeqOfString("."))
   573  			output = m_Wrappers.Companion_Outcome_.Create_Fail_(m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_2_msg))
   574  			return output
   575  		}
   576  		output = m_Wrappers.Companion_Outcome_.Create_Pass_()
   577  		return output
   578  	} else {
   579  		output = m_Wrappers.Companion_Outcome_.Create_Pass_()
   580  		return output
   581  	}
   582  	return output
   583  }
   584  func (_static *CompanionStruct_Default___) CreateAwsKmsHierarchicalKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsHierarchicalKeyringInput) m_Wrappers.Result {
   585  	var output m_Wrappers.Result = m_Wrappers.Result{}
   586  	_ = output
   587  	var _0_cmc m_AwsCryptographyMaterialProvidersTypes.ICryptographicMaterialsCache = (m_AwsCryptographyMaterialProvidersTypes.ICryptographicMaterialsCache)(nil)
   588  	_ = _0_cmc
   589  	if ((input).Dtor_cache()).Is_Some() {
   590  		var _1_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   591  		_ = _1_valueOrError0
   592  		var _out0 m_Wrappers.Outcome
   593  		_ = _out0
   594  		_out0 = Companion_Default___.CheckCache(((input).Dtor_cache()).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.CacheType), (input).Dtor_ttlSeconds())
   595  		_1_valueOrError0 = _out0
   596  		if (_1_valueOrError0).IsFailure() {
   597  			output = (_1_valueOrError0).PropagateFailure()
   598  			return output
   599  		}
   600  		var _source0 m_AwsCryptographyMaterialProvidersTypes.CacheType = ((input).Dtor_cache()).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.CacheType)
   601  		_ = _source0
   602  		{
   603  			{
   604  				if _source0.Is_Shared() {
   605  					var _2_c m_AwsCryptographyMaterialProvidersTypes.ICryptographicMaterialsCache = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.CacheType_Shared).Shared
   606  					_ = _2_c
   607  					_0_cmc = _2_c
   608  					goto Lmatch0
   609  				}
   610  			}
   611  			{
   612  				var _3_valueOrError1 m_Wrappers.Result = m_Wrappers.Result{}
   613  				_ = _3_valueOrError1
   614  				var _out1 m_Wrappers.Result
   615  				_ = _out1
   616  				_out1 = Companion_Default___.CreateCryptographicMaterialsCache(config, m_AwsCryptographyMaterialProvidersTypes.Companion_CreateCryptographicMaterialsCacheInput_.Create_CreateCryptographicMaterialsCacheInput_(((input).Dtor_cache()).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.CacheType)))
   617  				_3_valueOrError1 = _out1
   618  				if (_3_valueOrError1).IsFailure() {
   619  					output = (_3_valueOrError1).PropagateFailure()
   620  					return output
   621  				}
   622  				_0_cmc = m_AwsCryptographyMaterialProvidersTypes.Companion_ICryptographicMaterialsCache_.CastTo_((_3_valueOrError1).Extract())
   623  			}
   624  			goto Lmatch0
   625  		}
   626  	Lmatch0:
   627  	} else {
   628  		var _4_valueOrError2 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   629  		_ = _4_valueOrError2
   630  		var _out2 m_Wrappers.Outcome
   631  		_ = _out2
   632  		_out2 = Companion_Default___.CheckCache(m_AwsCryptographyMaterialProvidersTypes.Companion_CacheType_.Create_StormTracking_(m_StormTracker.Companion_Default___.DefaultStorm()), (input).Dtor_ttlSeconds())
   633  		_4_valueOrError2 = _out2
   634  		if (_4_valueOrError2).IsFailure() {
   635  			output = (_4_valueOrError2).PropagateFailure()
   636  			return output
   637  		}
   638  		var _5_valueOrError3 m_Wrappers.Result = m_Wrappers.Result{}
   639  		_ = _5_valueOrError3
   640  		var _out3 m_Wrappers.Result
   641  		_ = _out3
   642  		_out3 = Companion_Default___.CreateCryptographicMaterialsCache(config, m_AwsCryptographyMaterialProvidersTypes.Companion_CreateCryptographicMaterialsCacheInput_.Create_CreateCryptographicMaterialsCacheInput_(m_AwsCryptographyMaterialProvidersTypes.Companion_CacheType_.Create_Default_(m_AwsCryptographyMaterialProvidersTypes.Companion_DefaultCache_.Create_DefaultCache_(int32(1000)))))
   643  		_5_valueOrError3 = _out3
   644  		if (_5_valueOrError3).IsFailure() {
   645  			output = (_5_valueOrError3).PropagateFailure()
   646  			return output
   647  		}
   648  		_0_cmc = m_AwsCryptographyMaterialProvidersTypes.Companion_ICryptographicMaterialsCache_.CastTo_((_5_valueOrError3).Extract())
   649  	}
   650  	var _6_partitionIdBytes _dafny.Sequence = _dafny.EmptySeq
   651  	_ = _6_partitionIdBytes
   652  	if ((input).Dtor_partitionId()).Is_Some() {
   653  		var _7_valueOrError4 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_UTF8.Companion_ValidUTF8Bytes_.Witness())
   654  		_ = _7_valueOrError4
   655  		_7_valueOrError4 = (m_UTF8.Encode(((input).Dtor_partitionId()).Dtor_value().(_dafny.Sequence))).MapFailure(func(coer132 func(_dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
   656  			return func(arg133 interface{}) interface{} {
   657  				return coer132(arg133.(_dafny.Sequence))
   658  			}
   659  		}(func(_8_e _dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error {
   660  			return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.Companion_Sequence_.Concatenate(_dafny.SeqOfString("Could not UTF-8 Encode Partition ID: "), _8_e))
   661  		}))
   662  		if (_7_valueOrError4).IsFailure() {
   663  			output = (_7_valueOrError4).PropagateFailure()
   664  			return output
   665  		}
   666  		_6_partitionIdBytes = (_7_valueOrError4).Extract().(_dafny.Sequence)
   667  	} else {
   668  		var _9_uuid_q m_Wrappers.Result
   669  		_ = _9_uuid_q
   670  		var _out4 m_Wrappers.Result
   671  		_ = _out4
   672  		_out4 = m_UUID.GenerateUUID()
   673  		_9_uuid_q = _out4
   674  		var _10_valueOrError5 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq.SetString())
   675  		_ = _10_valueOrError5
   676  		_10_valueOrError5 = (_9_uuid_q).MapFailure(func(coer133 func(_dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
   677  			return func(arg134 interface{}) interface{} {
   678  				return coer133(arg134.(_dafny.Sequence))
   679  			}
   680  		}(func(_11_e _dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error {
   681  			return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_11_e)
   682  		}))
   683  		if (_10_valueOrError5).IsFailure() {
   684  			output = (_10_valueOrError5).PropagateFailure()
   685  			return output
   686  		}
   687  		var _12_uuid _dafny.Sequence
   688  		_ = _12_uuid
   689  		_12_uuid = (_10_valueOrError5).Extract().(_dafny.Sequence)
   690  		var _13_valueOrError6 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   691  		_ = _13_valueOrError6
   692  		_13_valueOrError6 = (m_UUID.ToByteArray(_12_uuid)).MapFailure(func(coer134 func(_dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
   693  			return func(arg135 interface{}) interface{} {
   694  				return coer134(arg135.(_dafny.Sequence))
   695  			}
   696  		}(func(_14_e _dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error {
   697  			return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_14_e)
   698  		}))
   699  		if (_13_valueOrError6).IsFailure() {
   700  			output = (_13_valueOrError6).PropagateFailure()
   701  			return output
   702  		}
   703  		_6_partitionIdBytes = (_13_valueOrError6).Extract().(_dafny.Sequence)
   704  	}
   705  	var _15_getKeyStoreInfoOutput_q m_Wrappers.Result
   706  	_ = _15_getKeyStoreInfoOutput_q
   707  	var _out5 m_Wrappers.Result
   708  	_ = _out5
   709  	_out5 = ((input).Dtor_keyStore()).GetKeyStoreInfo()
   710  	_15_getKeyStoreInfoOutput_q = _out5
   711  	var _16_valueOrError7 m_Wrappers.Result = m_Wrappers.Result{}
   712  	_ = _16_valueOrError7
   713  	_16_valueOrError7 = (_15_getKeyStoreInfoOutput_q).MapFailure(func(coer135 func(m_AwsCryptographyKeyStoreTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
   714  		return func(arg136 interface{}) interface{} {
   715  			return coer135(arg136.(m_AwsCryptographyKeyStoreTypes.Error))
   716  		}
   717  	}(func(_17_e m_AwsCryptographyKeyStoreTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error {
   718  		return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographyKeyStore_(_17_e)
   719  	}))
   720  	if (_16_valueOrError7).IsFailure() {
   721  		output = (_16_valueOrError7).PropagateFailure()
   722  		return output
   723  	}
   724  	var _18_getKeyStoreInfoOutput m_AwsCryptographyKeyStoreTypes.GetKeyStoreInfoOutput
   725  	_ = _18_getKeyStoreInfoOutput
   726  	_18_getKeyStoreInfoOutput = (_16_valueOrError7).Extract().(m_AwsCryptographyKeyStoreTypes.GetKeyStoreInfoOutput)
   727  	var _19_logicalKeyStoreName _dafny.Sequence
   728  	_ = _19_logicalKeyStoreName
   729  	_19_logicalKeyStoreName = (_18_getKeyStoreInfoOutput).Dtor_logicalKeyStoreName()
   730  	var _20_valueOrError8 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_UTF8.Companion_ValidUTF8Bytes_.Witness())
   731  	_ = _20_valueOrError8
   732  	_20_valueOrError8 = (m_UTF8.Encode(_19_logicalKeyStoreName)).MapFailure(func(coer136 func(_dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
   733  		return func(arg137 interface{}) interface{} {
   734  			return coer136(arg137.(_dafny.Sequence))
   735  		}
   736  	}(func(_21_e _dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error {
   737  		return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.Companion_Sequence_.Concatenate(_dafny.SeqOfString("Could not UTF-8 Encode Logical Key Store Name: "), _21_e))
   738  	}))
   739  	if (_20_valueOrError8).IsFailure() {
   740  		output = (_20_valueOrError8).PropagateFailure()
   741  		return output
   742  	}
   743  	var _22_logicalKeyStoreNameBytes _dafny.Sequence
   744  	_ = _22_logicalKeyStoreNameBytes
   745  	_22_logicalKeyStoreNameBytes = (_20_valueOrError8).Extract().(_dafny.Sequence)
   746  	var _23_valueOrError9 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   747  	_ = _23_valueOrError9
   748  	_23_valueOrError9 = m_Wrappers.Companion_Default___.Need((((input).Dtor_branchKeyId()).Is_None()) || (((input).Dtor_branchKeyIdSupplier()).Is_None()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Cannot initialize keyring with both a branchKeyId and BranchKeyIdSupplier.")))
   749  	if (_23_valueOrError9).IsFailure() {
   750  		output = (_23_valueOrError9).PropagateFailure()
   751  		return output
   752  	}
   753  	var _24_valueOrError10 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   754  	_ = _24_valueOrError10
   755  	_24_valueOrError10 = m_Wrappers.Companion_Default___.Need((((input).Dtor_branchKeyId()).Is_Some()) || (((input).Dtor_branchKeyIdSupplier()).Is_Some()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Must initialize keyring with either branchKeyId or BranchKeyIdSupplier.")))
   756  	if (_24_valueOrError10).IsFailure() {
   757  		output = (_24_valueOrError10).PropagateFailure()
   758  		return output
   759  	}
   760  	var _25_keyring *m_AwsKmsHierarchicalKeyring.AwsKmsHierarchicalKeyring
   761  	_ = _25_keyring
   762  	var _nw0 *m_AwsKmsHierarchicalKeyring.AwsKmsHierarchicalKeyring = m_AwsKmsHierarchicalKeyring.New_AwsKmsHierarchicalKeyring_()
   763  	_ = _nw0
   764  	_nw0.Ctor__((input).Dtor_keyStore(), (input).Dtor_branchKeyId(), (input).Dtor_branchKeyIdSupplier(), (input).Dtor_ttlSeconds(), _0_cmc, _6_partitionIdBytes, _22_logicalKeyStoreNameBytes, (config).Dtor_crypto())
   765  	_25_keyring = _nw0
   766  	output = m_Wrappers.Companion_Result_.Create_Success_(_25_keyring)
   767  	return output
   768  	return output
   769  }
   770  func (_static *CompanionStruct_Default___) CreateAwsKmsEcdhKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsEcdhKeyringInput) m_Wrappers.Result {
   771  	var output m_Wrappers.Result = m_Wrappers.Result{}
   772  	_ = output
   773  	var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   774  	_ = _0_valueOrError0
   775  	_0_valueOrError0 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
   776  	if (_0_valueOrError0).IsFailure() {
   777  		output = (_0_valueOrError0).PropagateFailure()
   778  		return output
   779  	}
   780  	var _1_grantTokens _dafny.Sequence
   781  	_ = _1_grantTokens
   782  	_1_grantTokens = (_0_valueOrError0).Extract().(_dafny.Sequence)
   783  	var _2_recipientPublicKey _dafny.Sequence = _dafny.EmptySeq
   784  	_ = _2_recipientPublicKey
   785  	var _3_senderPublicKey m_Wrappers.Option = m_Wrappers.Companion_Option_.Default()
   786  	_ = _3_senderPublicKey
   787  	var _4_compressedSenderPublicKey m_Wrappers.Option = m_Wrappers.Companion_Option_.Default()
   788  	_ = _4_compressedSenderPublicKey
   789  	var _source0 m_AwsCryptographyMaterialProvidersTypes.KmsEcdhStaticConfigurations = (input).Dtor_KeyAgreementScheme()
   790  	_ = _source0
   791  	{
   792  		{
   793  			if _source0.Is_KmsPublicKeyDiscovery() {
   794  				var _5_kmsPublicKeyDiscovery m_AwsCryptographyMaterialProvidersTypes.KmsPublicKeyDiscoveryInput = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.KmsEcdhStaticConfigurations_KmsPublicKeyDiscovery).KmsPublicKeyDiscovery
   795  				_ = _5_kmsPublicKeyDiscovery
   796  				{
   797  					var _6_valueOrError1 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf())
   798  					_ = _6_valueOrError1
   799  					_6_valueOrError1 = m_AwsKmsUtils.Companion_Default___.ValidateKmsKeyId((_5_kmsPublicKeyDiscovery).Dtor_recipientKmsIdentifier())
   800  					if (_6_valueOrError1).IsFailure() {
   801  						output = (_6_valueOrError1).PropagateFailure()
   802  						return output
   803  					}
   804  					var _7___v5 _dafny.Tuple
   805  					_ = _7___v5
   806  					_7___v5 = (_6_valueOrError1).Extract().(_dafny.Tuple)
   807  					var _8_valueOrError2 m_Wrappers.Result = m_Wrappers.Result{}
   808  					_ = _8_valueOrError2
   809  					var _out0 m_Wrappers.Result
   810  					_ = _out0
   811  					_out0 = m_AwsKmsUtils.Companion_Default___.GetEcdhPublicKey((input).Dtor_kmsClient(), (_5_kmsPublicKeyDiscovery).Dtor_recipientKmsIdentifier())
   812  					_8_valueOrError2 = _out0
   813  					if (_8_valueOrError2).IsFailure() {
   814  						output = (_8_valueOrError2).PropagateFailure()
   815  						return output
   816  					}
   817  					_2_recipientPublicKey = (_8_valueOrError2).Extract().(_dafny.Sequence)
   818  					_3_senderPublicKey = m_Wrappers.Companion_Option_.Create_None_()
   819  					_4_compressedSenderPublicKey = m_Wrappers.Companion_Option_.Create_None_()
   820  				}
   821  				goto Lmatch0
   822  			}
   823  		}
   824  		{
   825  			var _9_kmsPrivateKeyToStaticPublicKey m_AwsCryptographyMaterialProvidersTypes.KmsPrivateKeyToStaticPublicKeyInput = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.KmsEcdhStaticConfigurations_KmsPrivateKeyToStaticPublicKey).KmsPrivateKeyToStaticPublicKey
   826  			_ = _9_kmsPrivateKeyToStaticPublicKey
   827  			{
   828  				if ((_9_kmsPrivateKeyToStaticPublicKey).Dtor_senderPublicKey()).Is_Some() {
   829  					var _10_valueOrError3 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   830  					_ = _10_valueOrError3
   831  					_10_valueOrError3 = m_Wrappers.Companion_Default___.Need(m_ComAmazonawsKmsTypes.Companion_Default___.IsValid__PublicKeyType(((_9_kmsPrivateKeyToStaticPublicKey).Dtor_senderPublicKey()).Dtor_value().(_dafny.Sequence)), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Invalid SenderPublicKey length.")))
   832  					if (_10_valueOrError3).IsFailure() {
   833  						output = (_10_valueOrError3).PropagateFailure()
   834  						return output
   835  					}
   836  					_3_senderPublicKey = m_Wrappers.Companion_Option_.Create_Some_(((_9_kmsPrivateKeyToStaticPublicKey).Dtor_senderPublicKey()).Dtor_value().(_dafny.Sequence))
   837  					var _11_valueOrError4 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   838  					_ = _11_valueOrError4
   839  					var _out1 m_Wrappers.Result
   840  					_ = _out1
   841  					_out1 = m_RawECDHKeyring.Companion_Default___.CompressPublicKey(m_AwsCryptographyPrimitivesTypes.Companion_ECCPublicKey_.Create_ECCPublicKey_((_3_senderPublicKey).Dtor_value().(_dafny.Sequence)), (input).Dtor_curveSpec(), (config).Dtor_crypto())
   842  					_11_valueOrError4 = _out1
   843  					if (_11_valueOrError4).IsFailure() {
   844  						output = (_11_valueOrError4).PropagateFailure()
   845  						return output
   846  					}
   847  					var _12_compressedPKU _dafny.Sequence
   848  					_ = _12_compressedPKU
   849  					_12_compressedPKU = (_11_valueOrError4).Extract().(_dafny.Sequence)
   850  					_4_compressedSenderPublicKey = m_Wrappers.Companion_Option_.Create_Some_(_12_compressedPKU)
   851  				} else {
   852  					var _13_valueOrError5 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf())
   853  					_ = _13_valueOrError5
   854  					_13_valueOrError5 = m_AwsKmsUtils.Companion_Default___.ValidateKmsKeyId((_9_kmsPrivateKeyToStaticPublicKey).Dtor_senderKmsIdentifier())
   855  					if (_13_valueOrError5).IsFailure() {
   856  						output = (_13_valueOrError5).PropagateFailure()
   857  						return output
   858  					}
   859  					var _14___v6 _dafny.Tuple
   860  					_ = _14___v6
   861  					_14___v6 = (_13_valueOrError5).Extract().(_dafny.Tuple)
   862  					var _15_valueOrError6 m_Wrappers.Result = m_Wrappers.Result{}
   863  					_ = _15_valueOrError6
   864  					var _out2 m_Wrappers.Result
   865  					_ = _out2
   866  					_out2 = m_AwsKmsUtils.Companion_Default___.GetEcdhPublicKey((input).Dtor_kmsClient(), (_9_kmsPrivateKeyToStaticPublicKey).Dtor_senderKmsIdentifier())
   867  					_15_valueOrError6 = _out2
   868  					if (_15_valueOrError6).IsFailure() {
   869  						output = (_15_valueOrError6).PropagateFailure()
   870  						return output
   871  					}
   872  					var _16_senderPublicKeyResponse _dafny.Sequence
   873  					_ = _16_senderPublicKeyResponse
   874  					_16_senderPublicKeyResponse = (_15_valueOrError6).Extract().(_dafny.Sequence)
   875  					var _17_valueOrError7 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   876  					_ = _17_valueOrError7
   877  					var _out3 m_Wrappers.Result
   878  					_ = _out3
   879  					_out3 = m_RawECDHKeyring.Companion_Default___.CompressPublicKey(m_AwsCryptographyPrimitivesTypes.Companion_ECCPublicKey_.Create_ECCPublicKey_(_16_senderPublicKeyResponse), (input).Dtor_curveSpec(), (config).Dtor_crypto())
   880  					_17_valueOrError7 = _out3
   881  					if (_17_valueOrError7).IsFailure() {
   882  						output = (_17_valueOrError7).PropagateFailure()
   883  						return output
   884  					}
   885  					var _18_compressedPKU _dafny.Sequence
   886  					_ = _18_compressedPKU
   887  					_18_compressedPKU = (_17_valueOrError7).Extract().(_dafny.Sequence)
   888  					_3_senderPublicKey = m_Wrappers.Companion_Option_.Create_Some_(_16_senderPublicKeyResponse)
   889  					_4_compressedSenderPublicKey = m_Wrappers.Companion_Option_.Create_Some_(_18_compressedPKU)
   890  				}
   891  				var _19_valueOrError8 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   892  				_ = _19_valueOrError8
   893  				_19_valueOrError8 = m_Wrappers.Companion_Default___.Need(m_ComAmazonawsKmsTypes.Companion_Default___.IsValid__PublicKeyType((_9_kmsPrivateKeyToStaticPublicKey).Dtor_recipientPublicKey()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Invalid RecipientPublicKey length.")))
   894  				if (_19_valueOrError8).IsFailure() {
   895  					output = (_19_valueOrError8).PropagateFailure()
   896  					return output
   897  				}
   898  				_2_recipientPublicKey = (_9_kmsPrivateKeyToStaticPublicKey).Dtor_recipientPublicKey()
   899  			}
   900  		}
   901  		goto Lmatch0
   902  	}
   903  Lmatch0:
   904  	var _20_valueOrError9 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(false)
   905  	_ = _20_valueOrError9
   906  	var _out4 m_Wrappers.Result
   907  	_ = _out4
   908  	_out4 = m_RawECDHKeyring.Companion_Default___.ValidatePublicKey((config).Dtor_crypto(), (input).Dtor_curveSpec(), _2_recipientPublicKey)
   909  	_20_valueOrError9 = _out4
   910  	if (_20_valueOrError9).IsFailure() {
   911  		output = (_20_valueOrError9).PropagateFailure()
   912  		return output
   913  	}
   914  	var _21___v7 bool
   915  	_ = _21___v7
   916  	_21___v7 = (_20_valueOrError9).Extract().(bool)
   917  	var _22_valueOrError10 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   918  	_ = _22_valueOrError10
   919  	var _out5 m_Wrappers.Result
   920  	_ = _out5
   921  	_out5 = m_RawECDHKeyring.Companion_Default___.CompressPublicKey(m_AwsCryptographyPrimitivesTypes.Companion_ECCPublicKey_.Create_ECCPublicKey_(_2_recipientPublicKey), (input).Dtor_curveSpec(), (config).Dtor_crypto())
   922  	_22_valueOrError10 = _out5
   923  	if (_22_valueOrError10).IsFailure() {
   924  		output = (_22_valueOrError10).PropagateFailure()
   925  		return output
   926  	}
   927  	var _23_compressedRecipientPublicKey _dafny.Sequence
   928  	_ = _23_compressedRecipientPublicKey
   929  	_23_compressedRecipientPublicKey = (_22_valueOrError10).Extract().(_dafny.Sequence)
   930  	var _24_senderKmsKeyId m_Wrappers.Option
   931  	_ = _24_senderKmsKeyId
   932  	if ((input).Dtor_KeyAgreementScheme()).Is_KmsPublicKeyDiscovery() {
   933  		_24_senderKmsKeyId = m_Wrappers.Companion_Option_.Create_None_()
   934  	} else {
   935  		_24_senderKmsKeyId = m_Wrappers.Companion_Option_.Create_Some_((((input).Dtor_KeyAgreementScheme()).Dtor_KmsPrivateKeyToStaticPublicKey()).Dtor_senderKmsIdentifier())
   936  	}
   937  	if (_24_senderKmsKeyId).Is_Some() {
   938  		var _25_valueOrError11 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf())
   939  		_ = _25_valueOrError11
   940  		_25_valueOrError11 = m_AwsKmsUtils.Companion_Default___.ValidateKmsKeyId((_24_senderKmsKeyId).Dtor_value().(_dafny.Sequence))
   941  		if (_25_valueOrError11).IsFailure() {
   942  			output = (_25_valueOrError11).PropagateFailure()
   943  			return output
   944  		}
   945  		var _26___v8 _dafny.Tuple
   946  		_ = _26___v8
   947  		_26___v8 = (_25_valueOrError11).Extract().(_dafny.Tuple)
   948  	}
   949  	if (_3_senderPublicKey).Is_Some() {
   950  		var _27_valueOrError12 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(false)
   951  		_ = _27_valueOrError12
   952  		var _out6 m_Wrappers.Result
   953  		_ = _out6
   954  		_out6 = m_RawECDHKeyring.Companion_Default___.ValidatePublicKey((config).Dtor_crypto(), (input).Dtor_curveSpec(), (_3_senderPublicKey).Dtor_value().(_dafny.Sequence))
   955  		_27_valueOrError12 = _out6
   956  		if (_27_valueOrError12).IsFailure() {
   957  			output = (_27_valueOrError12).PropagateFailure()
   958  			return output
   959  		}
   960  		var _28___v9 bool
   961  		_ = _28___v9
   962  		_28___v9 = (_27_valueOrError12).Extract().(bool)
   963  	}
   964  	var _29_keyring *m_AwsKmsEcdhKeyring.AwsKmsEcdhKeyring
   965  	_ = _29_keyring
   966  	var _nw0 *m_AwsKmsEcdhKeyring.AwsKmsEcdhKeyring = m_AwsKmsEcdhKeyring.New_AwsKmsEcdhKeyring_()
   967  	_ = _nw0
   968  	_nw0.Ctor__((input).Dtor_KeyAgreementScheme(), (input).Dtor_curveSpec(), (input).Dtor_kmsClient(), _1_grantTokens, _24_senderKmsKeyId, _3_senderPublicKey, _2_recipientPublicKey, _4_compressedSenderPublicKey, _23_compressedRecipientPublicKey, (config).Dtor_crypto())
   969  	_29_keyring = _nw0
   970  	output = m_Wrappers.Companion_Result_.Create_Success_(_29_keyring)
   971  	return output
   972  	return output
   973  }
   974  func (_static *CompanionStruct_Default___) CreateMultiKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateMultiKeyringInput) m_Wrappers.Result {
   975  	var output m_Wrappers.Result = m_Wrappers.Result{}
   976  	_ = output
   977  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   978  	_ = _0_valueOrError0
   979  	_0_valueOrError0 = m_Wrappers.Companion_Default___.Need((((input).Dtor_generator()).Is_Some()) || ((_dafny.IntOfUint32(((input).Dtor_childKeyrings()).Cardinality())).Sign() == 1), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Must include a generator keyring and/or at least one child keyring")))
   980  	if (_0_valueOrError0).IsFailure() {
   981  		output = (_0_valueOrError0).PropagateFailure()
   982  		return output
   983  	}
   984  	var _1_keyring *m_MultiKeyring.MultiKeyring
   985  	_ = _1_keyring
   986  	var _nw0 *m_MultiKeyring.MultiKeyring = m_MultiKeyring.New_MultiKeyring_()
   987  	_ = _nw0
   988  	_nw0.Ctor__((input).Dtor_generator(), (input).Dtor_childKeyrings())
   989  	_1_keyring = _nw0
   990  	output = m_Wrappers.Companion_Result_.Create_Success_(_1_keyring)
   991  	return output
   992  	return output
   993  }
   994  func (_static *CompanionStruct_Default___) CreateRawAesKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateRawAesKeyringInput) m_Wrappers.Result {
   995  	var output m_Wrappers.Result = m_Wrappers.Result{}
   996  	_ = output
   997  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   998  	_ = _0_valueOrError0
   999  	_0_valueOrError0 = m_Wrappers.Companion_Default___.Need(!_dafny.Companion_Sequence_.Equal((input).Dtor_keyNamespace(), _dafny.SeqOfString("aws-kms")), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("keyNamespace must not be `aws-kms`")))
  1000  	if (_0_valueOrError0).IsFailure() {
  1001  		output = (_0_valueOrError0).PropagateFailure()
  1002  		return output
  1003  	}
  1004  	var _1_wrappingAlg m_AwsCryptographyPrimitivesTypes.AES__GCM
  1005  	_ = _1_wrappingAlg
  1006  	var _source0 m_AwsCryptographyMaterialProvidersTypes.AesWrappingAlg = (input).Dtor_wrappingAlg()
  1007  	_ = _source0
  1008  	{
  1009  		{
  1010  			if _source0.Is_ALG__AES128__GCM__IV12__TAG16() {
  1011  				_1_wrappingAlg = m_AwsCryptographyPrimitivesTypes.Companion_AES__GCM_.Create_AES__GCM_(int32(16), int32(16), int32(12))
  1012  				goto Lmatch0
  1013  			}
  1014  		}
  1015  		{
  1016  			if _source0.Is_ALG__AES192__GCM__IV12__TAG16() {
  1017  				_1_wrappingAlg = m_AwsCryptographyPrimitivesTypes.Companion_AES__GCM_.Create_AES__GCM_(int32(24), int32(16), int32(12))
  1018  				goto Lmatch0
  1019  			}
  1020  		}
  1021  		{
  1022  			_1_wrappingAlg = m_AwsCryptographyPrimitivesTypes.Companion_AES__GCM_.Create_AES__GCM_(int32(32), int32(16), int32(12))
  1023  		}
  1024  		goto Lmatch0
  1025  	}
  1026  Lmatch0:
  1027  	var _2_valueOrError1 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf(m_UTF8.Companion_ValidUTF8Bytes_.Witness(), m_UTF8.Companion_ValidUTF8Bytes_.Witness()))
  1028  	_ = _2_valueOrError1
  1029  	_2_valueOrError1 = m_AwsKmsUtils.Companion_Default___.ParseKeyNamespaceAndName((input).Dtor_keyNamespace(), (input).Dtor_keyName())
  1030  	if (_2_valueOrError1).IsFailure() {
  1031  		output = (_2_valueOrError1).PropagateFailure()
  1032  		return output
  1033  	}
  1034  	var _3_namespaceAndName _dafny.Tuple
  1035  	_ = _3_namespaceAndName
  1036  	_3_namespaceAndName = (_2_valueOrError1).Extract().(_dafny.Tuple)
  1037  	var _let_tmp_rhs0 _dafny.Tuple = _3_namespaceAndName
  1038  	_ = _let_tmp_rhs0
  1039  	var _4_namespace _dafny.Sequence = (*(_let_tmp_rhs0).IndexInt(0)).(_dafny.Sequence)
  1040  	_ = _4_namespace
  1041  	var _5_name _dafny.Sequence = (*(_let_tmp_rhs0).IndexInt(1)).(_dafny.Sequence)
  1042  	_ = _5_name
  1043  	var _6_valueOrError2 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1044  	_ = _6_valueOrError2
  1045  	_6_valueOrError2 = m_Wrappers.Companion_Default___.Need((((_dafny.IntOfUint32(((input).Dtor_wrappingKey()).Cardinality())).Cmp(_dafny.IntOfInt64(16)) == 0) || ((_dafny.IntOfUint32(((input).Dtor_wrappingKey()).Cardinality())).Cmp(_dafny.IntOfInt64(24)) == 0)) || ((_dafny.IntOfUint32(((input).Dtor_wrappingKey()).Cardinality())).Cmp(_dafny.IntOfInt64(32)) == 0), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Invalid wrapping key length")))
  1046  	if (_6_valueOrError2).IsFailure() {
  1047  		output = (_6_valueOrError2).PropagateFailure()
  1048  		return output
  1049  	}
  1050  	var _7_valueOrError3 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1051  	_ = _7_valueOrError3
  1052  	_7_valueOrError3 = m_Wrappers.Companion_Default___.Need((_dafny.IntOfUint32(((input).Dtor_wrappingKey()).Cardinality())).Cmp(_dafny.IntOfInt32((_1_wrappingAlg).Dtor_keyLength())) == 0, m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Wrapping key length does not match specified wrapping algorithm")))
  1053  	if (_7_valueOrError3).IsFailure() {
  1054  		output = (_7_valueOrError3).PropagateFailure()
  1055  		return output
  1056  	}
  1057  	var _8_keyring *m_RawAESKeyring.RawAESKeyring
  1058  	_ = _8_keyring
  1059  	var _nw0 *m_RawAESKeyring.RawAESKeyring = m_RawAESKeyring.New_RawAESKeyring_()
  1060  	_ = _nw0
  1061  	_nw0.Ctor__(_4_namespace, _5_name, (input).Dtor_wrappingKey(), _1_wrappingAlg, (config).Dtor_crypto())
  1062  	_8_keyring = _nw0
  1063  	output = m_Wrappers.Companion_Result_.Create_Success_(_8_keyring)
  1064  	return output
  1065  	return output
  1066  }
  1067  func (_static *CompanionStruct_Default___) CreateRawRsaKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateRawRsaKeyringInput) m_Wrappers.Result {
  1068  	var output m_Wrappers.Result = m_Wrappers.Result{}
  1069  	_ = output
  1070  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1071  	_ = _0_valueOrError0
  1072  	_0_valueOrError0 = m_Wrappers.Companion_Default___.Need(!_dafny.Companion_Sequence_.Equal((input).Dtor_keyNamespace(), _dafny.SeqOfString("aws-kms")), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("keyNamespace must not be `aws-kms`")))
  1073  	if (_0_valueOrError0).IsFailure() {
  1074  		output = (_0_valueOrError0).PropagateFailure()
  1075  		return output
  1076  	}
  1077  	var _1_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1078  	_ = _1_valueOrError1
  1079  	_1_valueOrError1 = m_Wrappers.Companion_Default___.Need((((input).Dtor_publicKey()).Is_Some()) || (((input).Dtor_privateKey()).Is_Some()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("A publicKey or a privateKey is required")))
  1080  	if (_1_valueOrError1).IsFailure() {
  1081  		output = (_1_valueOrError1).PropagateFailure()
  1082  		return output
  1083  	}
  1084  	var _2_padding m_AwsCryptographyPrimitivesTypes.RSAPaddingMode
  1085  	_ = _2_padding
  1086  	var _source0 m_AwsCryptographyMaterialProvidersTypes.PaddingScheme = (input).Dtor_paddingScheme()
  1087  	_ = _source0
  1088  	{
  1089  		{
  1090  			if _source0.Is_PKCS1() {
  1091  				_2_padding = m_AwsCryptographyPrimitivesTypes.Companion_RSAPaddingMode_.Create_PKCS1_()
  1092  				goto Lmatch0
  1093  			}
  1094  		}
  1095  		{
  1096  			if _source0.Is_OAEP__SHA1__MGF1() {
  1097  				_2_padding = m_AwsCryptographyPrimitivesTypes.Companion_RSAPaddingMode_.Create_OAEP__SHA1_()
  1098  				goto Lmatch0
  1099  			}
  1100  		}
  1101  		{
  1102  			if _source0.Is_OAEP__SHA256__MGF1() {
  1103  				_2_padding = m_AwsCryptographyPrimitivesTypes.Companion_RSAPaddingMode_.Create_OAEP__SHA256_()
  1104  				goto Lmatch0
  1105  			}
  1106  		}
  1107  		{
  1108  			if _source0.Is_OAEP__SHA384__MGF1() {
  1109  				_2_padding = m_AwsCryptographyPrimitivesTypes.Companion_RSAPaddingMode_.Create_OAEP__SHA384_()
  1110  				goto Lmatch0
  1111  			}
  1112  		}
  1113  		{
  1114  			_2_padding = m_AwsCryptographyPrimitivesTypes.Companion_RSAPaddingMode_.Create_OAEP__SHA512_()
  1115  		}
  1116  		goto Lmatch0
  1117  	}
  1118  Lmatch0:
  1119  	var _3_valueOrError2 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf(m_UTF8.Companion_ValidUTF8Bytes_.Witness(), m_UTF8.Companion_ValidUTF8Bytes_.Witness()))
  1120  	_ = _3_valueOrError2
  1121  	_3_valueOrError2 = m_AwsKmsUtils.Companion_Default___.ParseKeyNamespaceAndName((input).Dtor_keyNamespace(), (input).Dtor_keyName())
  1122  	if (_3_valueOrError2).IsFailure() {
  1123  		output = (_3_valueOrError2).PropagateFailure()
  1124  		return output
  1125  	}
  1126  	var _4_namespaceAndName _dafny.Tuple
  1127  	_ = _4_namespaceAndName
  1128  	_4_namespaceAndName = (_3_valueOrError2).Extract().(_dafny.Tuple)
  1129  	var _let_tmp_rhs0 _dafny.Tuple = _4_namespaceAndName
  1130  	_ = _let_tmp_rhs0
  1131  	var _5_namespace _dafny.Sequence = (*(_let_tmp_rhs0).IndexInt(0)).(_dafny.Sequence)
  1132  	_ = _5_namespace
  1133  	var _6_name _dafny.Sequence = (*(_let_tmp_rhs0).IndexInt(1)).(_dafny.Sequence)
  1134  	_ = _6_name
  1135  	var _7_keyring *m_RawRSAKeyring.RawRSAKeyring
  1136  	_ = _7_keyring
  1137  	var _nw0 *m_RawRSAKeyring.RawRSAKeyring = m_RawRSAKeyring.New_RawRSAKeyring_()
  1138  	_ = _nw0
  1139  	_nw0.Ctor__(_5_namespace, _6_name, (input).Dtor_publicKey(), (input).Dtor_privateKey(), _2_padding, (config).Dtor_crypto())
  1140  	_7_keyring = _nw0
  1141  	output = m_Wrappers.Companion_Result_.Create_Success_(_7_keyring)
  1142  	return output
  1143  	return output
  1144  }
  1145  func (_static *CompanionStruct_Default___) CreateRawEcdhKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateRawEcdhKeyringInput) m_Wrappers.Result {
  1146  	var output m_Wrappers.Result = m_Wrappers.Result{}
  1147  	_ = output
  1148  	var _0_recipientPublicKey _dafny.Sequence = _dafny.EmptySeq
  1149  	_ = _0_recipientPublicKey
  1150  	var _1_senderPrivateKey m_Wrappers.Option = m_Wrappers.Companion_Option_.Default()
  1151  	_ = _1_senderPrivateKey
  1152  	var _2_senderPublicKey m_Wrappers.Option = m_Wrappers.Companion_Option_.Default()
  1153  	_ = _2_senderPublicKey
  1154  	var _3_compressedSenderPublicKey m_Wrappers.Option = m_Wrappers.Companion_Option_.Default()
  1155  	_ = _3_compressedSenderPublicKey
  1156  	var _source0 m_AwsCryptographyMaterialProvidersTypes.RawEcdhStaticConfigurations = (input).Dtor_KeyAgreementScheme()
  1157  	_ = _source0
  1158  	{
  1159  		{
  1160  			if _source0.Is_RawPrivateKeyToStaticPublicKey() {
  1161  				var _4_rawPrivateKeyToStaticPublicKey m_AwsCryptographyMaterialProvidersTypes.RawPrivateKeyToStaticPublicKeyInput = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.RawEcdhStaticConfigurations_RawPrivateKeyToStaticPublicKey).RawPrivateKeyToStaticPublicKey
  1162  				_ = _4_rawPrivateKeyToStaticPublicKey
  1163  				{
  1164  					_0_recipientPublicKey = (_4_rawPrivateKeyToStaticPublicKey).Dtor_recipientPublicKey()
  1165  					_1_senderPrivateKey = m_Wrappers.Companion_Option_.Create_Some_((_4_rawPrivateKeyToStaticPublicKey).Dtor_senderStaticPrivateKey())
  1166  					var _5_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
  1167  					_ = _5_valueOrError0
  1168  					var _out0 m_Wrappers.Result
  1169  					_ = _out0
  1170  					_out0 = m_Utils.Companion_Default___.GetPublicKey((input).Dtor_curveSpec(), m_AwsCryptographyPrimitivesTypes.Companion_ECCPrivateKey_.Create_ECCPrivateKey_((_1_senderPrivateKey).Dtor_value().(_dafny.Sequence)), (config).Dtor_crypto())
  1171  					_5_valueOrError0 = _out0
  1172  					if (_5_valueOrError0).IsFailure() {
  1173  						output = (_5_valueOrError0).PropagateFailure()
  1174  						return output
  1175  					}
  1176  					var _6_reproducedPublicKey _dafny.Sequence
  1177  					_ = _6_reproducedPublicKey
  1178  					_6_reproducedPublicKey = (_5_valueOrError0).Extract().(_dafny.Sequence)
  1179  					var _7_valueOrError1 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(false)
  1180  					_ = _7_valueOrError1
  1181  					var _out1 m_Wrappers.Result
  1182  					_ = _out1
  1183  					_out1 = m_RawECDHKeyring.Companion_Default___.ValidatePublicKey((config).Dtor_crypto(), (input).Dtor_curveSpec(), _6_reproducedPublicKey)
  1184  					_7_valueOrError1 = _out1
  1185  					if (_7_valueOrError1).IsFailure() {
  1186  						output = (_7_valueOrError1).PropagateFailure()
  1187  						return output
  1188  					}
  1189  					var _8___v10 bool
  1190  					_ = _8___v10
  1191  					_8___v10 = (_7_valueOrError1).Extract().(bool)
  1192  					_2_senderPublicKey = m_Wrappers.Companion_Option_.Create_Some_(_6_reproducedPublicKey)
  1193  					var _9_valueOrError2 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
  1194  					_ = _9_valueOrError2
  1195  					var _out2 m_Wrappers.Result
  1196  					_ = _out2
  1197  					_out2 = m_RawECDHKeyring.Companion_Default___.CompressPublicKey(m_AwsCryptographyPrimitivesTypes.Companion_ECCPublicKey_.Create_ECCPublicKey_(_6_reproducedPublicKey), (input).Dtor_curveSpec(), (config).Dtor_crypto())
  1198  					_9_valueOrError2 = _out2
  1199  					if (_9_valueOrError2).IsFailure() {
  1200  						output = (_9_valueOrError2).PropagateFailure()
  1201  						return output
  1202  					}
  1203  					var _10_compressedSenderPublicKey_q _dafny.Sequence
  1204  					_ = _10_compressedSenderPublicKey_q
  1205  					_10_compressedSenderPublicKey_q = (_9_valueOrError2).Extract().(_dafny.Sequence)
  1206  					_3_compressedSenderPublicKey = m_Wrappers.Companion_Option_.Create_Some_(_10_compressedSenderPublicKey_q)
  1207  				}
  1208  				goto Lmatch0
  1209  			}
  1210  		}
  1211  		{
  1212  			if _source0.Is_EphemeralPrivateKeyToStaticPublicKey() {
  1213  				var _11_ephemeralPrivateKeyToStaticPublicKey m_AwsCryptographyMaterialProvidersTypes.EphemeralPrivateKeyToStaticPublicKeyInput = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.RawEcdhStaticConfigurations_EphemeralPrivateKeyToStaticPublicKey).EphemeralPrivateKeyToStaticPublicKey
  1214  				_ = _11_ephemeralPrivateKeyToStaticPublicKey
  1215  				{
  1216  					_0_recipientPublicKey = (_11_ephemeralPrivateKeyToStaticPublicKey).Dtor_recipientPublicKey()
  1217  					_1_senderPrivateKey = m_Wrappers.Companion_Option_.Create_None_()
  1218  					_2_senderPublicKey = m_Wrappers.Companion_Option_.Create_None_()
  1219  					_3_compressedSenderPublicKey = m_Wrappers.Companion_Option_.Create_None_()
  1220  				}
  1221  				goto Lmatch0
  1222  			}
  1223  		}
  1224  		{
  1225  			var _12_publicKeyDiscovery m_AwsCryptographyMaterialProvidersTypes.PublicKeyDiscoveryInput = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.RawEcdhStaticConfigurations_PublicKeyDiscovery).PublicKeyDiscovery
  1226  			_ = _12_publicKeyDiscovery
  1227  			{
  1228  				var _13_valueOrError3 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
  1229  				_ = _13_valueOrError3
  1230  				var _out3 m_Wrappers.Result
  1231  				_ = _out3
  1232  				_out3 = m_Utils.Companion_Default___.GetPublicKey((input).Dtor_curveSpec(), m_AwsCryptographyPrimitivesTypes.Companion_ECCPrivateKey_.Create_ECCPrivateKey_((_12_publicKeyDiscovery).Dtor_recipientStaticPrivateKey()), (config).Dtor_crypto())
  1233  				_13_valueOrError3 = _out3
  1234  				if (_13_valueOrError3).IsFailure() {
  1235  					output = (_13_valueOrError3).PropagateFailure()
  1236  					return output
  1237  				}
  1238  				var _14_reproducedPublicKey _dafny.Sequence
  1239  				_ = _14_reproducedPublicKey
  1240  				_14_reproducedPublicKey = (_13_valueOrError3).Extract().(_dafny.Sequence)
  1241  				_0_recipientPublicKey = _14_reproducedPublicKey
  1242  				_1_senderPrivateKey = m_Wrappers.Companion_Option_.Create_None_()
  1243  				_2_senderPublicKey = m_Wrappers.Companion_Option_.Create_None_()
  1244  				_3_compressedSenderPublicKey = m_Wrappers.Companion_Option_.Create_None_()
  1245  			}
  1246  		}
  1247  		goto Lmatch0
  1248  	}
  1249  Lmatch0:
  1250  	var _15_valueOrError4 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
  1251  	_ = _15_valueOrError4
  1252  	var _out4 m_Wrappers.Result
  1253  	_ = _out4
  1254  	_out4 = m_RawECDHKeyring.Companion_Default___.CompressPublicKey(m_AwsCryptographyPrimitivesTypes.Companion_ECCPublicKey_.Create_ECCPublicKey_(_0_recipientPublicKey), (input).Dtor_curveSpec(), (config).Dtor_crypto())
  1255  	_15_valueOrError4 = _out4
  1256  	if (_15_valueOrError4).IsFailure() {
  1257  		output = (_15_valueOrError4).PropagateFailure()
  1258  		return output
  1259  	}
  1260  	var _16_compressedRecipientPublicKey _dafny.Sequence
  1261  	_ = _16_compressedRecipientPublicKey
  1262  	_16_compressedRecipientPublicKey = (_15_valueOrError4).Extract().(_dafny.Sequence)
  1263  	var _17_valueOrError5 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(false)
  1264  	_ = _17_valueOrError5
  1265  	var _out5 m_Wrappers.Result
  1266  	_ = _out5
  1267  	_out5 = m_RawECDHKeyring.Companion_Default___.ValidatePublicKey((config).Dtor_crypto(), (input).Dtor_curveSpec(), _0_recipientPublicKey)
  1268  	_17_valueOrError5 = _out5
  1269  	if (_17_valueOrError5).IsFailure() {
  1270  		output = (_17_valueOrError5).PropagateFailure()
  1271  		return output
  1272  	}
  1273  	var _18___v11 bool
  1274  	_ = _18___v11
  1275  	_18___v11 = (_17_valueOrError5).Extract().(bool)
  1276  	if (_2_senderPublicKey).Is_Some() {
  1277  		var _19_valueOrError6 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(false)
  1278  		_ = _19_valueOrError6
  1279  		var _out6 m_Wrappers.Result
  1280  		_ = _out6
  1281  		_out6 = m_RawECDHKeyring.Companion_Default___.ValidatePublicKey((config).Dtor_crypto(), (input).Dtor_curveSpec(), (_2_senderPublicKey).Dtor_value().(_dafny.Sequence))
  1282  		_19_valueOrError6 = _out6
  1283  		if (_19_valueOrError6).IsFailure() {
  1284  			output = (_19_valueOrError6).PropagateFailure()
  1285  			return output
  1286  		}
  1287  		var _20___v12 bool
  1288  		_ = _20___v12
  1289  		_20___v12 = (_19_valueOrError6).Extract().(bool)
  1290  		var _21_valueOrError7 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1291  		_ = _21_valueOrError7
  1292  		_21_valueOrError7 = m_Wrappers.Companion_Default___.Need(m_RawECDHKeyring.Companion_Default___.ValidPublicKeyLength((_2_senderPublicKey).Dtor_value().(_dafny.Sequence)), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Invalid sender public key length")))
  1293  		if (_21_valueOrError7).IsFailure() {
  1294  			output = (_21_valueOrError7).PropagateFailure()
  1295  			return output
  1296  		}
  1297  	}
  1298  	var _22_valueOrError8 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1299  	_ = _22_valueOrError8
  1300  	_22_valueOrError8 = m_Wrappers.Companion_Default___.Need(m_RawECDHKeyring.Companion_Default___.ValidPublicKeyLength(_0_recipientPublicKey), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Invalid recipient public key length")))
  1301  	if (_22_valueOrError8).IsFailure() {
  1302  		output = (_22_valueOrError8).PropagateFailure()
  1303  		return output
  1304  	}
  1305  	var _23_keyring *m_RawECDHKeyring.RawEcdhKeyring
  1306  	_ = _23_keyring
  1307  	var _nw0 *m_RawECDHKeyring.RawEcdhKeyring = m_RawECDHKeyring.New_RawEcdhKeyring_()
  1308  	_ = _nw0
  1309  	_nw0.Ctor__((input).Dtor_KeyAgreementScheme(), (input).Dtor_curveSpec(), _1_senderPrivateKey, _2_senderPublicKey, _0_recipientPublicKey, _3_compressedSenderPublicKey, _16_compressedRecipientPublicKey, (config).Dtor_crypto())
  1310  	_23_keyring = _nw0
  1311  	output = m_Wrappers.Companion_Result_.Create_Success_(_23_keyring)
  1312  	return output
  1313  	return output
  1314  }
  1315  func (_static *CompanionStruct_Default___) CreateAwsKmsRsaKeyring(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateAwsKmsRsaKeyringInput) m_Wrappers.Result {
  1316  	var output m_Wrappers.Result = m_Wrappers.Result{}
  1317  	_ = output
  1318  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1319  	_ = _0_valueOrError0
  1320  	_0_valueOrError0 = m_Wrappers.Companion_Default___.Need((((input).Dtor_publicKey()).Is_Some()) || (((input).Dtor_kmsClient()).Is_Some()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("A publicKey or a kmsClient is required")))
  1321  	if (_0_valueOrError0).IsFailure() {
  1322  		output = (_0_valueOrError0).PropagateFailure()
  1323  		return output
  1324  	}
  1325  	var _1_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1326  	_ = _1_valueOrError1
  1327  	_1_valueOrError1 = m_Wrappers.Companion_Default___.Need((((input).Dtor_encryptionAlgorithm()).Is_RSAES__OAEP__SHA__1()) || (((input).Dtor_encryptionAlgorithm()).Is_RSAES__OAEP__SHA__256()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Unsupported EncryptionAlgorithmSpec")))
  1328  	if (_1_valueOrError1).IsFailure() {
  1329  		output = (_1_valueOrError1).PropagateFailure()
  1330  		return output
  1331  	}
  1332  	var _2_valueOrError2 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1333  	_ = _2_valueOrError2
  1334  	_2_valueOrError2 = m_Wrappers.Companion_Default___.Need((m_ComAmazonawsKmsTypes.Companion_Default___.IsValid__KeyIdType((input).Dtor_kmsKeyId())) && ((m_AwsArnParsing.Companion_Default___.ParseAwsKmsArn((input).Dtor_kmsKeyId())).Is_Success()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Kms Key ID must be a KMS Key ARN")))
  1335  	if (_2_valueOrError2).IsFailure() {
  1336  		output = (_2_valueOrError2).PropagateFailure()
  1337  		return output
  1338  	}
  1339  	if ((input).Dtor_publicKey()).Is_Some() {
  1340  		var _3_lengthOutputRes m_Wrappers.Result
  1341  		_ = _3_lengthOutputRes
  1342  		_3_lengthOutputRes = ((config).Dtor_crypto()).GetRSAKeyModulusLength(m_AwsCryptographyPrimitivesTypes.Companion_GetRSAKeyModulusLengthInput_.Create_GetRSAKeyModulusLengthInput_(((input).Dtor_publicKey()).Dtor_value().(_dafny.Sequence)))
  1343  		var _4_valueOrError3 m_Wrappers.Result = m_Wrappers.Result{}
  1344  		_ = _4_valueOrError3
  1345  		_4_valueOrError3 = (_3_lengthOutputRes).MapFailure(func(coer137 func(m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
  1346  			return func(arg138 interface{}) interface{} {
  1347  				return coer137(arg138.(m_AwsCryptographyPrimitivesTypes.Error))
  1348  			}
  1349  		}(func(_5_e m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error {
  1350  			return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographyPrimitives_(_5_e)
  1351  		}))
  1352  		if (_4_valueOrError3).IsFailure() {
  1353  			output = (_4_valueOrError3).PropagateFailure()
  1354  			return output
  1355  		}
  1356  		var _6_lengthOutput m_AwsCryptographyPrimitivesTypes.GetRSAKeyModulusLengthOutput
  1357  		_ = _6_lengthOutput
  1358  		_6_lengthOutput = (_4_valueOrError3).Extract().(m_AwsCryptographyPrimitivesTypes.GetRSAKeyModulusLengthOutput)
  1359  		var _7_valueOrError4 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1360  		_ = _7_valueOrError4
  1361  		_7_valueOrError4 = m_Wrappers.Companion_Default___.Need(((_6_lengthOutput).Dtor_length()) >= (m_AwsKmsRsaKeyring.Companion_Default___.MIN__KMS__RSA__KEY__LEN()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Invalid public key length")))
  1362  		if (_7_valueOrError4).IsFailure() {
  1363  			output = (_7_valueOrError4).PropagateFailure()
  1364  			return output
  1365  		}
  1366  	}
  1367  	var _8_valueOrError5 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf())
  1368  	_ = _8_valueOrError5
  1369  	_8_valueOrError5 = m_AwsKmsUtils.Companion_Default___.ValidateKmsKeyId((input).Dtor_kmsKeyId())
  1370  	if (_8_valueOrError5).IsFailure() {
  1371  		output = (_8_valueOrError5).PropagateFailure()
  1372  		return output
  1373  	}
  1374  	var _9___v13 _dafny.Tuple
  1375  	_ = _9___v13
  1376  	_9___v13 = (_8_valueOrError5).Extract().(_dafny.Tuple)
  1377  	var _10_valueOrError6 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
  1378  	_ = _10_valueOrError6
  1379  	_10_valueOrError6 = m_AwsKmsUtils.Companion_Default___.GetValidGrantTokens((input).Dtor_grantTokens())
  1380  	if (_10_valueOrError6).IsFailure() {
  1381  		output = (_10_valueOrError6).PropagateFailure()
  1382  		return output
  1383  	}
  1384  	var _11_grantTokens _dafny.Sequence
  1385  	_ = _11_grantTokens
  1386  	_11_grantTokens = (_10_valueOrError6).Extract().(_dafny.Sequence)
  1387  	var _12_keyring *m_AwsKmsRsaKeyring.AwsKmsRsaKeyring
  1388  	_ = _12_keyring
  1389  	var _nw0 *m_AwsKmsRsaKeyring.AwsKmsRsaKeyring = m_AwsKmsRsaKeyring.New_AwsKmsRsaKeyring_()
  1390  	_ = _nw0
  1391  	_nw0.Ctor__((input).Dtor_publicKey(), (input).Dtor_kmsKeyId(), (input).Dtor_encryptionAlgorithm(), (input).Dtor_kmsClient(), (config).Dtor_crypto(), _11_grantTokens)
  1392  	_12_keyring = _nw0
  1393  	output = m_Wrappers.Companion_Result_.Create_Success_(_12_keyring)
  1394  	return output
  1395  	return output
  1396  }
  1397  func (_static *CompanionStruct_Default___) CreateDefaultCryptographicMaterialsManager(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateDefaultCryptographicMaterialsManagerInput) m_Wrappers.Result {
  1398  	var output m_Wrappers.Result = m_Wrappers.Result{}
  1399  	_ = output
  1400  	var _0_cmm *m_DefaultCMM.DefaultCMM
  1401  	_ = _0_cmm
  1402  	var _nw0 *m_DefaultCMM.DefaultCMM = m_DefaultCMM.New_DefaultCMM_()
  1403  	_ = _nw0
  1404  	_nw0.OfKeyring((input).Dtor_keyring(), (config).Dtor_crypto())
  1405  	_0_cmm = _nw0
  1406  	output = m_Wrappers.Companion_Result_.Create_Success_(_0_cmm)
  1407  	return output
  1408  	return output
  1409  }
  1410  func (_static *CompanionStruct_Default___) CmpError(s _dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error {
  1411  	return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(s)
  1412  }
  1413  func (_static *CompanionStruct_Default___) CreateRequiredEncryptionContextCMM(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateRequiredEncryptionContextCMMInput) m_Wrappers.Result {
  1414  	var output m_Wrappers.Result = m_Wrappers.Result{}
  1415  	_ = output
  1416  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1417  	_ = _0_valueOrError0
  1418  	_0_valueOrError0 = m_Wrappers.Companion_Default___.Need((((input).Dtor_underlyingCMM()).Is_Some()) && (((input).Dtor_keyring()).Is_None()), Companion_Default___.CmpError(_dafny.SeqOfString("CreateRequiredEncryptionContextCMM currently only supports cmm.")))
  1419  	if (_0_valueOrError0).IsFailure() {
  1420  		output = (_0_valueOrError0).PropagateFailure()
  1421  		return output
  1422  	}
  1423  	var _1_keySet _dafny.Set
  1424  	_ = _1_keySet
  1425  	_1_keySet = func() _dafny.Set {
  1426  		var _coll0 = _dafny.NewBuilder()
  1427  		_ = _coll0
  1428  		for _iter10 := _dafny.Iterate(((input).Dtor_requiredEncryptionContextKeys()).Elements()); ; {
  1429  			_compr_0, _ok10 := _iter10()
  1430  			if !_ok10 {
  1431  				break
  1432  			}
  1433  			var _2_k _dafny.Sequence
  1434  			_2_k = interface{}(_compr_0).(_dafny.Sequence)
  1435  			if m_UTF8.Companion_ValidUTF8Bytes_.Is_(_2_k) {
  1436  				if _dafny.Companion_Sequence_.Contains((input).Dtor_requiredEncryptionContextKeys(), _2_k) {
  1437  					_coll0.Add(_2_k)
  1438  				}
  1439  			}
  1440  		}
  1441  		return _coll0.ToSet()
  1442  	}()
  1443  	var _3_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1444  	_ = _3_valueOrError1
  1445  	_3_valueOrError1 = m_Wrappers.Companion_Default___.Need(((_1_keySet).Cardinality()).Sign() == 1, Companion_Default___.CmpError(_dafny.SeqOfString("RequiredEncryptionContextCMM needs at least one requiredEncryptionContextKey.")))
  1446  	if (_3_valueOrError1).IsFailure() {
  1447  		output = (_3_valueOrError1).PropagateFailure()
  1448  		return output
  1449  	}
  1450  	var _4_cmm *m_RequiredEncryptionContextCMM.RequiredEncryptionContextCMM
  1451  	_ = _4_cmm
  1452  	var _nw0 *m_RequiredEncryptionContextCMM.RequiredEncryptionContextCMM = m_RequiredEncryptionContextCMM.New_RequiredEncryptionContextCMM_()
  1453  	_ = _nw0
  1454  	_nw0.Ctor__(m_AwsCryptographyMaterialProvidersTypes.Companion_ICryptographicMaterialsManager_.CastTo_(((input).Dtor_underlyingCMM()).Dtor_value()), _1_keySet)
  1455  	_4_cmm = _nw0
  1456  	output = m_Wrappers.Companion_Result_.Create_Success_(_4_cmm)
  1457  	return output
  1458  	return output
  1459  }
  1460  func (_static *CompanionStruct_Default___) CreateCryptographicMaterialsCache(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateCryptographicMaterialsCacheInput) m_Wrappers.Result {
  1461  	var output m_Wrappers.Result = m_Wrappers.Result{}
  1462  	_ = output
  1463  	var _source0 m_AwsCryptographyMaterialProvidersTypes.CacheType = (input).Dtor_cache()
  1464  	_ = _source0
  1465  	{
  1466  		{
  1467  			if _source0.Is_Default() {
  1468  				var _0_c m_AwsCryptographyMaterialProvidersTypes.DefaultCache = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.CacheType_Default).Default
  1469  				_ = _0_c
  1470  				var _1_cache m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache
  1471  				_ = _1_cache
  1472  				var _2_dt__update__tmp_h0 m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache = m_StormTracker.Companion_Default___.DefaultStorm()
  1473  				_ = _2_dt__update__tmp_h0
  1474  				var _3_dt__update_hentryCapacity_h0 int32 = (_0_c).Dtor_entryCapacity()
  1475  				_ = _3_dt__update_hentryCapacity_h0
  1476  				_1_cache = m_AwsCryptographyMaterialProvidersTypes.Companion_StormTrackingCache_.Create_StormTrackingCache_(_3_dt__update_hentryCapacity_h0, (_2_dt__update__tmp_h0).Dtor_entryPruningTailSize(), (_2_dt__update__tmp_h0).Dtor_gracePeriod(), (_2_dt__update__tmp_h0).Dtor_graceInterval(), (_2_dt__update__tmp_h0).Dtor_fanOut(), (_2_dt__update__tmp_h0).Dtor_inFlightTTL(), (_2_dt__update__tmp_h0).Dtor_sleepMilli(), (_2_dt__update__tmp_h0).Dtor_timeUnits())
  1477  				var _4_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1478  				_ = _4_valueOrError0
  1479  				_4_valueOrError0 = m_StormTracker.Companion_Default___.CheckSettings(_1_cache)
  1480  				if (_4_valueOrError0).IsFailure() {
  1481  					output = (_4_valueOrError0).PropagateFailure()
  1482  					return output
  1483  				}
  1484  				var _5_cmc *m_StormTracker.StormTracker
  1485  				_ = _5_cmc
  1486  				var _nw0 *m_StormTracker.StormTracker = m_StormTracker.New_StormTracker_()
  1487  				_ = _nw0
  1488  				_nw0.Ctor__(_1_cache)
  1489  				_5_cmc = _nw0
  1490  				var _6_synCmc *m_StormTrackingCMC.StormTrackingCMC
  1491  				_ = _6_synCmc
  1492  				var _nw1 *m_StormTrackingCMC.StormTrackingCMC = m_StormTrackingCMC.New_StormTrackingCMC_(_5_cmc)
  1493  				_ = _nw1
  1494  				_6_synCmc = _nw1
  1495  				output = m_Wrappers.Companion_Result_.Create_Success_(_6_synCmc)
  1496  				return output
  1497  				goto Lmatch0
  1498  			}
  1499  		}
  1500  		{
  1501  			if _source0.Is_No() {
  1502  				var _7_cmc *m_LocalCMC.LocalCMC
  1503  				_ = _7_cmc
  1504  				var _nw2 *m_LocalCMC.LocalCMC = m_LocalCMC.New_LocalCMC_()
  1505  				_ = _nw2
  1506  				_nw2.Ctor__(_dafny.Zero, _dafny.One)
  1507  				_7_cmc = _nw2
  1508  				output = m_Wrappers.Companion_Result_.Create_Success_(_7_cmc)
  1509  				return output
  1510  				goto Lmatch0
  1511  			}
  1512  		}
  1513  		{
  1514  			if _source0.Is_SingleThreaded() {
  1515  				var _8_c m_AwsCryptographyMaterialProvidersTypes.SingleThreadedCache = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.CacheType_SingleThreaded).SingleThreaded
  1516  				_ = _8_c
  1517  				var _9_cmc *m_LocalCMC.LocalCMC
  1518  				_ = _9_cmc
  1519  				var _nw3 *m_LocalCMC.LocalCMC = m_LocalCMC.New_LocalCMC_()
  1520  				_ = _nw3
  1521  				_nw3.Ctor__(_dafny.IntOfInt32((_8_c).Dtor_entryCapacity()), _dafny.IntOfInt32((Companion_Default___.OptionalCountingNumber((_8_c).Dtor_entryPruningTailSize())).UnwrapOr(int32(1)).(int32)))
  1522  				_9_cmc = _nw3
  1523  				output = m_Wrappers.Companion_Result_.Create_Success_(_9_cmc)
  1524  				return output
  1525  				goto Lmatch0
  1526  			}
  1527  		}
  1528  		{
  1529  			if _source0.Is_MultiThreaded() {
  1530  				var _10_c m_AwsCryptographyMaterialProvidersTypes.MultiThreadedCache = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.CacheType_MultiThreaded).MultiThreaded
  1531  				_ = _10_c
  1532  				var _11_cmc *m_LocalCMC.LocalCMC
  1533  				_ = _11_cmc
  1534  				var _nw4 *m_LocalCMC.LocalCMC = m_LocalCMC.New_LocalCMC_()
  1535  				_ = _nw4
  1536  				_nw4.Ctor__(_dafny.IntOfInt32((_10_c).Dtor_entryCapacity()), _dafny.IntOfInt32((Companion_Default___.OptionalCountingNumber((_10_c).Dtor_entryPruningTailSize())).UnwrapOr(int32(1)).(int32)))
  1537  				_11_cmc = _nw4
  1538  				var _12_synCmc *m_SynchronizedLocalCMC.SynchronizedLocalCMC
  1539  				_ = _12_synCmc
  1540  				var _nw5 *m_SynchronizedLocalCMC.SynchronizedLocalCMC = m_SynchronizedLocalCMC.New_SynchronizedLocalCMC_(_11_cmc)
  1541  				_ = _nw5
  1542  				_12_synCmc = _nw5
  1543  				output = m_Wrappers.Companion_Result_.Create_Success_(_12_synCmc)
  1544  				return output
  1545  				goto Lmatch0
  1546  			}
  1547  		}
  1548  		{
  1549  			if _source0.Is_StormTracking() {
  1550  				var _13_c m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.CacheType_StormTracking).StormTracking
  1551  				_ = _13_c
  1552  				var _14_cache m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache
  1553  				_ = _14_cache
  1554  				var _15_dt__update__tmp_h1 m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache = _13_c
  1555  				_ = _15_dt__update__tmp_h1
  1556  				var _16_dt__update_hentryPruningTailSize_h0 m_Wrappers.Option = Companion_Default___.OptionalCountingNumber((_13_c).Dtor_entryPruningTailSize())
  1557  				_ = _16_dt__update_hentryPruningTailSize_h0
  1558  				_14_cache = m_AwsCryptographyMaterialProvidersTypes.Companion_StormTrackingCache_.Create_StormTrackingCache_((_15_dt__update__tmp_h1).Dtor_entryCapacity(), _16_dt__update_hentryPruningTailSize_h0, (_15_dt__update__tmp_h1).Dtor_gracePeriod(), (_15_dt__update__tmp_h1).Dtor_graceInterval(), (_15_dt__update__tmp_h1).Dtor_fanOut(), (_15_dt__update__tmp_h1).Dtor_inFlightTTL(), (_15_dt__update__tmp_h1).Dtor_sleepMilli(), (_15_dt__update__tmp_h1).Dtor_timeUnits())
  1559  				var _17_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
  1560  				_ = _17_valueOrError1
  1561  				_17_valueOrError1 = m_StormTracker.Companion_Default___.CheckSettings(_14_cache)
  1562  				if (_17_valueOrError1).IsFailure() {
  1563  					output = (_17_valueOrError1).PropagateFailure()
  1564  					return output
  1565  				}
  1566  				var _18_cmc *m_StormTracker.StormTracker
  1567  				_ = _18_cmc
  1568  				var _nw6 *m_StormTracker.StormTracker = m_StormTracker.New_StormTracker_()
  1569  				_ = _nw6
  1570  				_nw6.Ctor__(_14_cache)
  1571  				_18_cmc = _nw6
  1572  				var _19_synCmc *m_StormTrackingCMC.StormTrackingCMC
  1573  				_ = _19_synCmc
  1574  				var _nw7 *m_StormTrackingCMC.StormTrackingCMC = m_StormTrackingCMC.New_StormTrackingCMC_(_18_cmc)
  1575  				_ = _nw7
  1576  				_19_synCmc = _nw7
  1577  				output = m_Wrappers.Companion_Result_.Create_Success_(_19_synCmc)
  1578  				return output
  1579  				goto Lmatch0
  1580  			}
  1581  		}
  1582  		{
  1583  			var _20_c m_AwsCryptographyMaterialProvidersTypes.ICryptographicMaterialsCache = _source0.Get_().(m_AwsCryptographyMaterialProvidersTypes.CacheType_Shared).Shared
  1584  			_ = _20_c
  1585  			var _21_exception m_AwsCryptographyMaterialProvidersTypes.Error
  1586  			_ = _21_exception
  1587  			_21_exception = m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("CreateCryptographicMaterialsCache should never be called with Shared CacheType."))
  1588  			output = m_Wrappers.Companion_Result_.Create_Failure_(_21_exception)
  1589  			return output
  1590  		}
  1591  		goto Lmatch0
  1592  	}
  1593  Lmatch0:
  1594  	return output
  1595  }
  1596  func (_static *CompanionStruct_Default___) OptionalCountingNumber(c m_Wrappers.Option) m_Wrappers.Option {
  1597  	if ((c).Is_Some()) && (((c).Dtor_value().(int32)) <= (int32(0))) {
  1598  		return m_Wrappers.Companion_Option_.Create_None_()
  1599  	} else {
  1600  		return c
  1601  	}
  1602  }
  1603  func (_static *CompanionStruct_Default___) CreateDefaultClientSupplier(config Config, input m_AwsCryptographyMaterialProvidersTypes.CreateDefaultClientSupplierInput) m_Wrappers.Result {
  1604  	var output m_Wrappers.Result = m_Wrappers.Result{}
  1605  	_ = output
  1606  	var _0_clientSupplier *m_DefaultClientSupplier.DefaultClientSupplier
  1607  	_ = _0_clientSupplier
  1608  	var _nw0 *m_DefaultClientSupplier.DefaultClientSupplier = m_DefaultClientSupplier.New_DefaultClientSupplier_()
  1609  	_ = _nw0
  1610  	_nw0.Ctor__()
  1611  	_0_clientSupplier = _nw0
  1612  	output = m_Wrappers.Companion_Result_.Create_Success_(_0_clientSupplier)
  1613  	return output
  1614  	return output
  1615  }
  1616  func (_static *CompanionStruct_Default___) InitializeEncryptionMaterials(config Config, input m_AwsCryptographyMaterialProvidersTypes.InitializeEncryptionMaterialsInput) m_Wrappers.Result {
  1617  	return m_Materials.Companion_Default___.InitializeEncryptionMaterials(input)
  1618  }
  1619  func (_static *CompanionStruct_Default___) InitializeDecryptionMaterials(config Config, input m_AwsCryptographyMaterialProvidersTypes.InitializeDecryptionMaterialsInput) m_Wrappers.Result {
  1620  	return m_Materials.Companion_Default___.InitializeDecryptionMaterials(input)
  1621  }
  1622  func (_static *CompanionStruct_Default___) ValidEncryptionMaterialsTransition(config Config, input m_AwsCryptographyMaterialProvidersTypes.ValidEncryptionMaterialsTransitionInput) m_Wrappers.Result {
  1623  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Default___.Need(m_Materials.Companion_Default___.ValidEncryptionMaterialsTransition((input).Dtor_start(), (input).Dtor_stop()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_InvalidEncryptionMaterialsTransition_(_dafny.SeqOfString("Invalid Encryption Materials Transition")))
  1624  	_ = _0_valueOrError0
  1625  	if (_0_valueOrError0).IsFailure() {
  1626  		return (_0_valueOrError0).PropagateFailure()
  1627  	} else {
  1628  		return m_Wrappers.Companion_Result_.Create_Success_(_dafny.TupleOf())
  1629  	}
  1630  }
  1631  func (_static *CompanionStruct_Default___) ValidDecryptionMaterialsTransition(config Config, input m_AwsCryptographyMaterialProvidersTypes.ValidDecryptionMaterialsTransitionInput) m_Wrappers.Result {
  1632  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Default___.Need(m_Materials.Companion_Default___.DecryptionMaterialsTransitionIsValid((input).Dtor_start(), (input).Dtor_stop()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_InvalidDecryptionMaterialsTransition_(_dafny.SeqOfString("Invalid Decryption Materials Transition")))
  1633  	_ = _0_valueOrError0
  1634  	if (_0_valueOrError0).IsFailure() {
  1635  		return (_0_valueOrError0).PropagateFailure()
  1636  	} else {
  1637  		return m_Wrappers.Companion_Result_.Create_Success_(_dafny.TupleOf())
  1638  	}
  1639  }
  1640  func (_static *CompanionStruct_Default___) EncryptionMaterialsHasPlaintextDataKey(config Config, input m_AwsCryptographyMaterialProvidersTypes.EncryptionMaterials) m_Wrappers.Result {
  1641  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Default___.Need(m_Materials.Companion_Default___.EncryptionMaterialsHasPlaintextDataKey(input), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_InvalidDecryptionMaterials_(_dafny.SeqOfString("Invalid Encryption Materials")))
  1642  	_ = _0_valueOrError0
  1643  	if (_0_valueOrError0).IsFailure() {
  1644  		return (_0_valueOrError0).PropagateFailure()
  1645  	} else {
  1646  		return m_Wrappers.Companion_Result_.Create_Success_(_dafny.TupleOf())
  1647  	}
  1648  }
  1649  func (_static *CompanionStruct_Default___) DecryptionMaterialsWithPlaintextDataKey(config Config, input m_AwsCryptographyMaterialProvidersTypes.DecryptionMaterials) m_Wrappers.Result {
  1650  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Default___.Need(m_Materials.Companion_Default___.DecryptionMaterialsWithPlaintextDataKey(input), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_InvalidDecryptionMaterials_(_dafny.SeqOfString("Invalid Decryption Materials")))
  1651  	_ = _0_valueOrError0
  1652  	if (_0_valueOrError0).IsFailure() {
  1653  		return (_0_valueOrError0).PropagateFailure()
  1654  	} else {
  1655  		return m_Wrappers.Companion_Result_.Create_Success_(_dafny.TupleOf())
  1656  	}
  1657  }
  1658  func (_static *CompanionStruct_Default___) GetAlgorithmSuiteInfo(config Config, input _dafny.Sequence) m_Wrappers.Result {
  1659  	return m_AlgorithmSuites.Companion_Default___.GetAlgorithmSuiteInfo(input)
  1660  }
  1661  func (_static *CompanionStruct_Default___) ValidAlgorithmSuiteInfo(config Config, input m_AwsCryptographyMaterialProvidersTypes.AlgorithmSuiteInfo) m_Wrappers.Result {
  1662  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Default___.Need(m_AlgorithmSuites.Companion_Default___.AlgorithmSuite_q(input), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_InvalidAlgorithmSuiteInfo_(_dafny.SeqOfString("Invalid AlgorithmSuiteInfo")))
  1663  	_ = _0_valueOrError0
  1664  	if (_0_valueOrError0).IsFailure() {
  1665  		return (_0_valueOrError0).PropagateFailure()
  1666  	} else {
  1667  		return m_Wrappers.Companion_Result_.Create_Success_(_dafny.TupleOf())
  1668  	}
  1669  }
  1670  func (_static *CompanionStruct_Default___) ValidateCommitmentPolicyOnEncrypt(config Config, input m_AwsCryptographyMaterialProvidersTypes.ValidateCommitmentPolicyOnEncryptInput) m_Wrappers.Result {
  1671  	var _0_valueOrError0 m_Wrappers.Outcome = m_Commitment.Companion_Default___.ValidateCommitmentPolicyOnEncrypt((input).Dtor_algorithm(), (input).Dtor_commitmentPolicy())
  1672  	_ = _0_valueOrError0
  1673  	if (_0_valueOrError0).IsFailure() {
  1674  		return (_0_valueOrError0).PropagateFailure()
  1675  	} else {
  1676  		return m_Wrappers.Companion_Result_.Create_Success_(_dafny.TupleOf())
  1677  	}
  1678  }
  1679  func (_static *CompanionStruct_Default___) ValidateCommitmentPolicyOnDecrypt(config Config, input m_AwsCryptographyMaterialProvidersTypes.ValidateCommitmentPolicyOnDecryptInput) m_Wrappers.Result {
  1680  	var _0_valueOrError0 m_Wrappers.Outcome = m_Commitment.Companion_Default___.ValidateCommitmentPolicyOnDecrypt((input).Dtor_algorithm(), (input).Dtor_commitmentPolicy())
  1681  	_ = _0_valueOrError0
  1682  	if (_0_valueOrError0).IsFailure() {
  1683  		return (_0_valueOrError0).PropagateFailure()
  1684  	} else {
  1685  		return m_Wrappers.Companion_Result_.Create_Success_(_dafny.TupleOf())
  1686  	}
  1687  }
  1688  
  1689  // End of class Default__
  1690  
  1691  // Definition of datatype Config
  1692  type Config struct {
  1693  	Data_Config_
  1694  }
  1695  
  1696  func (_this Config) Get_() Data_Config_ {
  1697  	return _this.Data_Config_
  1698  }
  1699  
  1700  type Data_Config_ interface {
  1701  	isConfig()
  1702  }
  1703  
  1704  type CompanionStruct_Config_ struct {
  1705  }
  1706  
  1707  var Companion_Config_ = CompanionStruct_Config_{}
  1708  
  1709  type Config_Config struct {
  1710  	Crypto *m_AtomicPrimitives.AtomicPrimitivesClient
  1711  }
  1712  
  1713  func (Config_Config) isConfig() {}
  1714  
  1715  func (CompanionStruct_Config_) Create_Config_(Crypto *m_AtomicPrimitives.AtomicPrimitivesClient) Config {
  1716  	return Config{Config_Config{Crypto}}
  1717  }
  1718  
  1719  func (_this Config) Is_Config() bool {
  1720  	_, ok := _this.Get_().(Config_Config)
  1721  	return ok
  1722  }
  1723  
  1724  func (CompanionStruct_Config_) Default() Config {
  1725  	return Companion_Config_.Create_Config_((*m_AtomicPrimitives.AtomicPrimitivesClient)(nil))
  1726  }
  1727  
  1728  func (_this Config) Dtor_crypto() *m_AtomicPrimitives.AtomicPrimitivesClient {
  1729  	return _this.Get_().(Config_Config).Crypto
  1730  }
  1731  
  1732  func (_this Config) String() string {
  1733  	switch data := _this.Get_().(type) {
  1734  	case nil:
  1735  		return "null"
  1736  	case Config_Config:
  1737  		{
  1738  			return "AwsCryptographyMaterialProvidersOperations.Config.Config" + "(" + _dafny.String(data.Crypto) + ")"
  1739  		}
  1740  	default:
  1741  		{
  1742  			return "<unexpected>"
  1743  		}
  1744  	}
  1745  }
  1746  
  1747  func (_this Config) Equals(other Config) bool {
  1748  	switch data1 := _this.Get_().(type) {
  1749  	case Config_Config:
  1750  		{
  1751  			data2, ok := other.Get_().(Config_Config)
  1752  			return ok && data1.Crypto == data2.Crypto
  1753  		}
  1754  	default:
  1755  		{
  1756  			return false // unexpected
  1757  		}
  1758  	}
  1759  }
  1760  
  1761  func (_this Config) EqualsGeneric(other interface{}) bool {
  1762  	typed, ok := other.(Config)
  1763  	return ok && _this.Equals(typed)
  1764  }
  1765  
  1766  func Type_Config_() _dafny.TypeDescriptor {
  1767  	return type_Config_{}
  1768  }
  1769  
  1770  type type_Config_ struct {
  1771  }
  1772  
  1773  func (_this type_Config_) Default() interface{} {
  1774  	return Companion_Config_.Default()
  1775  }
  1776  
  1777  func (_this type_Config_) String() string {
  1778  	return "AwsCryptographyMaterialProvidersOperations.Config"
  1779  }
  1780  func (_this Config) ParentTraits_() []*_dafny.TraitID {
  1781  	return [](*_dafny.TraitID){}
  1782  }
  1783  
  1784  var _ _dafny.TraitOffspring = Config{}
  1785  
  1786  // End of datatype Config