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

     1  // Package AwsCryptographyKeyStoreOperations
     2  // Dafny module AwsCryptographyKeyStoreOperations compiled into Go
     3  
     4  package AwsCryptographyKeyStoreOperations
     5  
     6  import (
     7  	os "os"
     8  
     9  	m_ComAmazonawsDynamodbTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/dynamodb/ComAmazonawsDynamodbTypes"
    10  	m_ComAmazonawsKmsTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/kms/ComAmazonawsKmsTypes"
    11  	m_AwsArnParsing "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsArnParsing"
    12  	m_AwsCryptographyKeyStoreTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsCryptographyKeyStoreTypes"
    13  	m_AwsCryptographyMaterialProvidersTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsCryptographyMaterialProvidersTypes"
    14  	m_AwsKmsMrkMatchForDecrypt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkMatchForDecrypt"
    15  	m_AwsKmsUtils "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsUtils"
    16  	m_CreateKeyStoreTable "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeyStoreTable"
    17  	m_CreateKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeys"
    18  	m_DDBKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DDBKeystoreOperations"
    19  	m_GetKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/GetKeys"
    20  	m_KMSKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KMSKeystoreOperations"
    21  	m_KeyStoreErrorMessages "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KeyStoreErrorMessages"
    22  	m_KmsArn "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KmsArn"
    23  	m_Structure "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Structure"
    24  	m_AtomicPrimitives "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AtomicPrimitives"
    25  	m_AwsCryptographyPrimitivesOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesOperations"
    26  	m_AwsCryptographyPrimitivesTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesTypes"
    27  	m_Digest "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Digest"
    28  	m_HKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/HKDF"
    29  	m_KdfCtr "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/KdfCtr"
    30  	m_Random "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Random"
    31  	m_WrappedHKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHKDF"
    32  	m_WrappedHMAC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHMAC"
    33  	m_Actions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Actions"
    34  	m_Base64 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64"
    35  	m_Base64Lemmas "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64Lemmas"
    36  	m_BoundedInts "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/BoundedInts"
    37  	m_DivInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternals"
    38  	m_DivInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternalsNonlinear"
    39  	m_DivMod "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivMod"
    40  	m_FileIO "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FileIO"
    41  	m_FloatCompare "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FloatCompare"
    42  	m_Functions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Functions"
    43  	m_GeneralInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GeneralInternals"
    44  	m_GetOpt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GetOpt"
    45  	m_HexStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/HexStrings"
    46  	m_Logarithm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Logarithm"
    47  	m__Math "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Math_"
    48  	m_ModInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternals"
    49  	m_ModInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternalsNonlinear"
    50  	m_Mul "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Mul"
    51  	m_MulInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternals"
    52  	m_MulInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternalsNonlinear"
    53  	m_Power "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Power"
    54  	m_Relations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Relations"
    55  	m_Seq "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq"
    56  	m_Seq_MergeSort "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq_MergeSort"
    57  	m_Sorting "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Sorting"
    58  	m_StandardLibrary "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary"
    59  	m_StandardLibraryInterop "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibraryInterop"
    60  	m_StandardLibrary_Sequence "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_Sequence"
    61  	m_StandardLibrary_String "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_String"
    62  	m_StandardLibrary_UInt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_UInt"
    63  	m_Streams "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Streams"
    64  	m__Time "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Time_"
    65  	m_UTF8 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UTF8"
    66  	m_UUID "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UUID"
    67  	m_UnicodeStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UnicodeStrings"
    68  	m__Unicode "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Unicode_"
    69  	m_Utf16EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf16EncodingForm"
    70  	m_Utf8EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf8EncodingForm"
    71  	m_Wrappers "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Wrappers"
    72  	m__System "github.com/dafny-lang/DafnyRuntimeGo/v4/System_"
    73  	_dafny "github.com/dafny-lang/DafnyRuntimeGo/v4/dafny"
    74  )
    75  
    76  var _ = os.Args
    77  var _ _dafny.Dummy__
    78  var _ m__System.Dummy__
    79  var _ m_Wrappers.Dummy__
    80  var _ m_BoundedInts.Dummy__
    81  var _ m_StandardLibrary_UInt.Dummy__
    82  var _ m_StandardLibrary_Sequence.Dummy__
    83  var _ m_StandardLibrary_String.Dummy__
    84  var _ m_StandardLibrary.Dummy__
    85  var _ m_AwsCryptographyPrimitivesTypes.Dummy__
    86  var _ m_Random.Dummy__
    87  var _ m_Digest.Dummy__
    88  var _ m_WrappedHMAC.Dummy__
    89  var _ m_HKDF.Dummy__
    90  var _ m_WrappedHKDF.Dummy__
    91  var _ m_KdfCtr.Dummy__
    92  var _ m_AwsCryptographyPrimitivesOperations.Dummy__
    93  var _ m_AtomicPrimitives.Dummy__
    94  var _ m_ComAmazonawsDynamodbTypes.Dummy__
    95  var _ m_ComAmazonawsKmsTypes.Dummy__
    96  var _ m_Relations.Dummy__
    97  var _ m_Seq_MergeSort.Dummy__
    98  var _ m__Math.Dummy__
    99  var _ m_Seq.Dummy__
   100  var _ m__Unicode.Dummy__
   101  var _ m_Functions.Dummy__
   102  var _ m_Utf8EncodingForm.Dummy__
   103  var _ m_Utf16EncodingForm.Dummy__
   104  var _ m_UnicodeStrings.Dummy__
   105  var _ m_FileIO.Dummy__
   106  var _ m_GeneralInternals.Dummy__
   107  var _ m_MulInternalsNonlinear.Dummy__
   108  var _ m_MulInternals.Dummy__
   109  var _ m_Mul.Dummy__
   110  var _ m_ModInternalsNonlinear.Dummy__
   111  var _ m_DivInternalsNonlinear.Dummy__
   112  var _ m_ModInternals.Dummy__
   113  var _ m_DivInternals.Dummy__
   114  var _ m_DivMod.Dummy__
   115  var _ m_Power.Dummy__
   116  var _ m_Logarithm.Dummy__
   117  var _ m_StandardLibraryInterop.Dummy__
   118  var _ m_Streams.Dummy__
   119  var _ m_Sorting.Dummy__
   120  var _ m_HexStrings.Dummy__
   121  var _ m_GetOpt.Dummy__
   122  var _ m_FloatCompare.Dummy__
   123  var _ m_Base64.Dummy__
   124  var _ m_Base64Lemmas.Dummy__
   125  var _ m_Actions.Dummy__
   126  var _ m_AwsCryptographyKeyStoreTypes.Dummy__
   127  var _ m_AwsCryptographyMaterialProvidersTypes.Dummy__
   128  var _ m_AwsArnParsing.Dummy__
   129  var _ m_AwsKmsMrkMatchForDecrypt.Dummy__
   130  var _ m_AwsKmsUtils.Dummy__
   131  var _ m_KeyStoreErrorMessages.Dummy__
   132  var _ m_KmsArn.Dummy__
   133  var _ m_Structure.Dummy__
   134  var _ m_KMSKeystoreOperations.Dummy__
   135  var _ m_DDBKeystoreOperations.Dummy__
   136  var _ m_CreateKeys.Dummy__
   137  var _ m_CreateKeyStoreTable.Dummy__
   138  var _ m_GetKeys.Dummy__
   139  
   140  type Dummy__ struct{}
   141  
   142  // Definition of class Default__
   143  type Default__ struct {
   144  	dummy byte
   145  }
   146  
   147  func New_Default___() *Default__ {
   148  	_this := Default__{}
   149  
   150  	return &_this
   151  }
   152  
   153  type CompanionStruct_Default___ struct {
   154  }
   155  
   156  var Companion_Default___ = CompanionStruct_Default___{}
   157  
   158  func (_this *Default__) Equals(other *Default__) bool {
   159  	return _this == other
   160  }
   161  
   162  func (_this *Default__) EqualsGeneric(x interface{}) bool {
   163  	other, ok := x.(*Default__)
   164  	return ok && _this.Equals(other)
   165  }
   166  
   167  func (*Default__) String() string {
   168  	return "AwsCryptographyKeyStoreOperations.Default__"
   169  }
   170  func (_this *Default__) ParentTraits_() []*_dafny.TraitID {
   171  	return [](*_dafny.TraitID){}
   172  }
   173  
   174  var _ _dafny.TraitOffspring = &Default__{}
   175  
   176  func (_static *CompanionStruct_Default___) GetKeyStoreInfo(config Config) m_Wrappers.Result {
   177  	var output m_Wrappers.Result = m_Wrappers.Result{}
   178  	_ = output
   179  	output = m_Wrappers.Companion_Result_.Create_Success_(m_AwsCryptographyKeyStoreTypes.Companion_GetKeyStoreInfoOutput_.Create_GetKeyStoreInfoOutput_((config).Dtor_id(), (config).Dtor_ddbTableName(), (config).Dtor_logicalKeyStoreName(), (config).Dtor_grantTokens(), (config).Dtor_kmsConfiguration()))
   180  	return output
   181  }
   182  func (_static *CompanionStruct_Default___) CreateKeyStore(config Config, input m_AwsCryptographyKeyStoreTypes.CreateKeyStoreInput) m_Wrappers.Result {
   183  	var output m_Wrappers.Result = m_Wrappers.Result{}
   184  	_ = output
   185  	var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq.SetString())
   186  	_ = _0_valueOrError0
   187  	var _out0 m_Wrappers.Result
   188  	_ = _out0
   189  	_out0 = m_CreateKeyStoreTable.Companion_Default___.CreateKeyStoreTable((config).Dtor_ddbTableName(), (config).Dtor_ddbClient())
   190  	_0_valueOrError0 = _out0
   191  	if (_0_valueOrError0).IsFailure() {
   192  		output = (_0_valueOrError0).PropagateFailure()
   193  		return output
   194  	}
   195  	var _1_ddbTableArn _dafny.Sequence
   196  	_ = _1_ddbTableArn
   197  	_1_ddbTableArn = (_0_valueOrError0).Extract().(_dafny.Sequence)
   198  	var _2_tableName m_Wrappers.Result
   199  	_ = _2_tableName
   200  	_2_tableName = m_AwsArnParsing.Companion_Default___.ParseAmazonDynamodbTableName(_1_ddbTableArn)
   201  	var _3_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   202  	_ = _3_valueOrError1
   203  	_3_valueOrError1 = m_Wrappers.Companion_Default___.Need(((_2_tableName).Is_Success()) && (_dafny.Companion_Sequence_.Equal((_2_tableName).Dtor_value().(_dafny.Sequence), (config).Dtor_ddbTableName())), m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(_dafny.SeqOfString("Configured DDB Table Name does not match parsed Table Name from DDB Table Arn.")))
   204  	if (_3_valueOrError1).IsFailure() {
   205  		output = (_3_valueOrError1).PropagateFailure()
   206  		return output
   207  	}
   208  	output = m_Wrappers.Companion_Result_.Create_Success_(m_AwsCryptographyKeyStoreTypes.Companion_CreateKeyStoreOutput_.Create_CreateKeyStoreOutput_(_1_ddbTableArn))
   209  	return output
   210  }
   211  func (_static *CompanionStruct_Default___) CreateKey(config Config, input m_AwsCryptographyKeyStoreTypes.CreateKeyInput) m_Wrappers.Result {
   212  	var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_AwsCryptographyKeyStoreTypes.Companion_CreateKeyOutput_.Default())
   213  	_ = output
   214  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   215  	_ = _0_valueOrError0
   216  	_0_valueOrError0 = m_Wrappers.Companion_Default___.Need(!(((input).Dtor_branchKeyIdentifier()).Is_Some()) || ((((input).Dtor_encryptionContext()).Is_Some()) && (((((input).Dtor_encryptionContext()).Dtor_value().(_dafny.Map)).Cardinality()).Sign() == 1)), m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(m_KeyStoreErrorMessages.Companion_Default___.CUSTOM__BRANCH__KEY__ID__NEED__EC()))
   217  	if (_0_valueOrError0).IsFailure() {
   218  		output = (_0_valueOrError0).PropagateFailure()
   219  		return output
   220  	}
   221  	var _1_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   222  	_ = _1_valueOrError1
   223  	_1_valueOrError1 = m_Wrappers.Companion_Default___.Need(m_KMSKeystoreOperations.Companion_Default___.HasKeyId((config).Dtor_kmsConfiguration()), m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(m_KeyStoreErrorMessages.Companion_Default___.DISCOVERY__CREATE__KEY__NOT__SUPPORTED()))
   224  	if (_1_valueOrError1).IsFailure() {
   225  		output = (_1_valueOrError1).PropagateFailure()
   226  		return output
   227  	}
   228  	var _2_branchKeyIdentifier _dafny.Sequence = _dafny.EmptySeq.SetString()
   229  	_ = _2_branchKeyIdentifier
   230  	if ((input).Dtor_branchKeyIdentifier()).Is_None() {
   231  		var _3_maybeBranchKeyId m_Wrappers.Result
   232  		_ = _3_maybeBranchKeyId
   233  		var _out0 m_Wrappers.Result
   234  		_ = _out0
   235  		_out0 = m_UUID.GenerateUUID()
   236  		_3_maybeBranchKeyId = _out0
   237  		var _4_valueOrError2 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq.SetString())
   238  		_ = _4_valueOrError2
   239  		_4_valueOrError2 = (_3_maybeBranchKeyId).MapFailure(func(coer19 func(_dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error) func(interface{}) interface{} {
   240  			return func(arg19 interface{}) interface{} {
   241  				return coer19(arg19.(_dafny.Sequence))
   242  			}
   243  		}(func(_5_e _dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error {
   244  			return m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(_5_e)
   245  		}))
   246  		if (_4_valueOrError2).IsFailure() {
   247  			output = (_4_valueOrError2).PropagateFailure()
   248  			return output
   249  		}
   250  		_2_branchKeyIdentifier = (_4_valueOrError2).Extract().(_dafny.Sequence)
   251  	} else {
   252  		var _6_valueOrError3 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   253  		_ = _6_valueOrError3
   254  		_6_valueOrError3 = m_Wrappers.Companion_Default___.Need((_dafny.IntOfUint32((((input).Dtor_branchKeyIdentifier()).Dtor_value().(_dafny.Sequence)).Cardinality())).Sign() == 1, m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(_dafny.SeqOfString("Custom branch key id can not be an empty string.")))
   255  		if (_6_valueOrError3).IsFailure() {
   256  			output = (_6_valueOrError3).PropagateFailure()
   257  			return output
   258  		}
   259  		_2_branchKeyIdentifier = ((input).Dtor_branchKeyIdentifier()).Dtor_value().(_dafny.Sequence)
   260  	}
   261  	var _7_timestamp_q m_Wrappers.Result
   262  	_ = _7_timestamp_q
   263  	var _out1 m_Wrappers.Result
   264  	_ = _out1
   265  	_out1 = m__Time.GetCurrentTimeStamp()
   266  	_7_timestamp_q = _out1
   267  	var _8_valueOrError4 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq.SetString())
   268  	_ = _8_valueOrError4
   269  	_8_valueOrError4 = (_7_timestamp_q).MapFailure(func(coer20 func(_dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error) func(interface{}) interface{} {
   270  		return func(arg20 interface{}) interface{} {
   271  			return coer20(arg20.(_dafny.Sequence))
   272  		}
   273  	}(func(_9_e _dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error {
   274  		return m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(_9_e)
   275  	}))
   276  	if (_8_valueOrError4).IsFailure() {
   277  		output = (_8_valueOrError4).PropagateFailure()
   278  		return output
   279  	}
   280  	var _10_timestamp _dafny.Sequence
   281  	_ = _10_timestamp
   282  	_10_timestamp = (_8_valueOrError4).Extract().(_dafny.Sequence)
   283  	var _11_maybeBranchKeyVersion m_Wrappers.Result
   284  	_ = _11_maybeBranchKeyVersion
   285  	var _out2 m_Wrappers.Result
   286  	_ = _out2
   287  	_out2 = m_UUID.GenerateUUID()
   288  	_11_maybeBranchKeyVersion = _out2
   289  	var _12_valueOrError5 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq.SetString())
   290  	_ = _12_valueOrError5
   291  	_12_valueOrError5 = (_11_maybeBranchKeyVersion).MapFailure(func(coer21 func(_dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error) func(interface{}) interface{} {
   292  		return func(arg21 interface{}) interface{} {
   293  			return coer21(arg21.(_dafny.Sequence))
   294  		}
   295  	}(func(_13_e _dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error {
   296  		return m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(_13_e)
   297  	}))
   298  	if (_12_valueOrError5).IsFailure() {
   299  		output = (_12_valueOrError5).PropagateFailure()
   300  		return output
   301  	}
   302  	var _14_branchKeyVersion _dafny.Sequence
   303  	_ = _14_branchKeyVersion
   304  	_14_branchKeyVersion = (_12_valueOrError5).Extract().(_dafny.Sequence)
   305  	var _15_unwrapEncryptionContext _dafny.Map
   306  	_ = _15_unwrapEncryptionContext
   307  	_15_unwrapEncryptionContext = ((input).Dtor_encryptionContext()).UnwrapOr(_dafny.NewMapBuilder().ToMap()).(_dafny.Map)
   308  	var _16_encodedEncryptionContext _dafny.Set
   309  	_ = _16_encodedEncryptionContext
   310  	_16_encodedEncryptionContext = func() _dafny.Set {
   311  		var _coll0 = _dafny.NewBuilder()
   312  		_ = _coll0
   313  		for _iter7 := _dafny.Iterate((_15_unwrapEncryptionContext).Keys().Elements()); ; {
   314  			_compr_0, _ok7 := _iter7()
   315  			if !_ok7 {
   316  				break
   317  			}
   318  			var _17_k _dafny.Sequence
   319  			_17_k = interface{}(_compr_0).(_dafny.Sequence)
   320  			if m_UTF8.Companion_ValidUTF8Bytes_.Is_(_17_k) {
   321  				if (_15_unwrapEncryptionContext).Contains(_17_k) {
   322  					_coll0.Add(_dafny.TupleOf(m_UTF8.Decode(_17_k), m_UTF8.Decode((_15_unwrapEncryptionContext).Get(_17_k).(_dafny.Sequence)), _17_k))
   323  				}
   324  			}
   325  		}
   326  		return _coll0.ToSet()
   327  	}()
   328  	var _18_valueOrError6 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   329  	_ = _18_valueOrError6
   330  	_18_valueOrError6 = m_Wrappers.Companion_Default___.Need(_dafny.Quantifier((_16_encodedEncryptionContext).Elements(), true, func(_forall_var_0 _dafny.Tuple) bool {
   331  		var _19_i _dafny.Tuple
   332  		_19_i = interface{}(_forall_var_0).(_dafny.Tuple)
   333  		return !((_16_encodedEncryptionContext).Contains(_19_i)) || ((((((*(_19_i).IndexInt(0)).(m_Wrappers.Result)).Is_Success()) && (((*(_19_i).IndexInt(1)).(m_Wrappers.Result)).Is_Success())) && (m_ComAmazonawsDynamodbTypes.Companion_Default___.IsValid__AttributeName(_dafny.Companion_Sequence_.Concatenate(m_Structure.Companion_Default___.ENCRYPTION__CONTEXT__PREFIX(), ((*(_19_i).IndexInt(0)).(m_Wrappers.Result)).Dtor_value().(_dafny.Sequence))))) && (func(_pat_let1_0 m_Wrappers.Result) bool {
   334  			return func(_20_encoded m_Wrappers.Result) bool {
   335  				return ((_20_encoded).Is_Success()) && (_dafny.Companion_Sequence_.Equal((*(_19_i).IndexInt(2)).(_dafny.Sequence), (_20_encoded).Dtor_value().(_dafny.Sequence)))
   336  			}(_pat_let1_0)
   337  		}(m_UTF8.Encode(((*(_19_i).IndexInt(0)).(m_Wrappers.Result)).Dtor_value().(_dafny.Sequence)))))
   338  	}), m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(m_KeyStoreErrorMessages.Companion_Default___.UTF8__ENCODING__ENCRYPTION__CONTEXT__ERROR()))
   339  	if (_18_valueOrError6).IsFailure() {
   340  		output = (_18_valueOrError6).PropagateFailure()
   341  		return output
   342  	}
   343  	var _out3 m_Wrappers.Result
   344  	_ = _out3
   345  	_out3 = m_CreateKeys.Companion_Default___.CreateBranchAndBeaconKeys(_2_branchKeyIdentifier, func() _dafny.Map {
   346  		var _coll1 = _dafny.NewMapBuilder()
   347  		_ = _coll1
   348  		for _iter8 := _dafny.Iterate((_16_encodedEncryptionContext).Elements()); ; {
   349  			_compr_1, _ok8 := _iter8()
   350  			if !_ok8 {
   351  				break
   352  			}
   353  			var _21_i _dafny.Tuple
   354  			_21_i = interface{}(_compr_1).(_dafny.Tuple)
   355  			if (_16_encodedEncryptionContext).Contains(_21_i) {
   356  				_coll1.Add(((*(_21_i).IndexInt(0)).(m_Wrappers.Result)).Dtor_value().(_dafny.Sequence), ((*(_21_i).IndexInt(1)).(m_Wrappers.Result)).Dtor_value().(_dafny.Sequence))
   357  			}
   358  		}
   359  		return _coll1.ToMap()
   360  	}(), _10_timestamp, _14_branchKeyVersion, (config).Dtor_ddbTableName(), (config).Dtor_logicalKeyStoreName(), (config).Dtor_kmsConfiguration(), (config).Dtor_grantTokens(), (config).Dtor_kmsClient(), (config).Dtor_ddbClient())
   361  	output = _out3
   362  	return output
   363  }
   364  func (_static *CompanionStruct_Default___) VersionKey(config Config, input m_AwsCryptographyKeyStoreTypes.VersionKeyInput) m_Wrappers.Result {
   365  	var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_AwsCryptographyKeyStoreTypes.Companion_VersionKeyOutput_.Default())
   366  	_ = output
   367  	var _0_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   368  	_ = _0_valueOrError0
   369  	_0_valueOrError0 = m_Wrappers.Companion_Default___.Need(m_KMSKeystoreOperations.Companion_Default___.HasKeyId((config).Dtor_kmsConfiguration()), m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(m_KeyStoreErrorMessages.Companion_Default___.DISCOVERY__VERSION__KEY__NOT__SUPPORTED()))
   370  	if (_0_valueOrError0).IsFailure() {
   371  		output = (_0_valueOrError0).PropagateFailure()
   372  		return output
   373  	}
   374  	var _1_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   375  	_ = _1_valueOrError1
   376  	_1_valueOrError1 = m_Wrappers.Companion_Default___.Need((_dafny.IntOfUint32(((input).Dtor_branchKeyIdentifier()).Cardinality())).Sign() == 1, m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(m_KeyStoreErrorMessages.Companion_Default___.BRANCH__KEY__ID__NEEDED()))
   377  	if (_1_valueOrError1).IsFailure() {
   378  		output = (_1_valueOrError1).PropagateFailure()
   379  		return output
   380  	}
   381  	var _2_timestamp_q m_Wrappers.Result
   382  	_ = _2_timestamp_q
   383  	var _out0 m_Wrappers.Result
   384  	_ = _out0
   385  	_out0 = m__Time.GetCurrentTimeStamp()
   386  	_2_timestamp_q = _out0
   387  	var _3_valueOrError2 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq.SetString())
   388  	_ = _3_valueOrError2
   389  	_3_valueOrError2 = (_2_timestamp_q).MapFailure(func(coer22 func(_dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error) func(interface{}) interface{} {
   390  		return func(arg22 interface{}) interface{} {
   391  			return coer22(arg22.(_dafny.Sequence))
   392  		}
   393  	}(func(_4_e _dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error {
   394  		return m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(_4_e)
   395  	}))
   396  	if (_3_valueOrError2).IsFailure() {
   397  		output = (_3_valueOrError2).PropagateFailure()
   398  		return output
   399  	}
   400  	var _5_timestamp _dafny.Sequence
   401  	_ = _5_timestamp
   402  	_5_timestamp = (_3_valueOrError2).Extract().(_dafny.Sequence)
   403  	var _6_maybeBranchKeyVersion m_Wrappers.Result
   404  	_ = _6_maybeBranchKeyVersion
   405  	var _out1 m_Wrappers.Result
   406  	_ = _out1
   407  	_out1 = m_UUID.GenerateUUID()
   408  	_6_maybeBranchKeyVersion = _out1
   409  	var _7_valueOrError3 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq.SetString())
   410  	_ = _7_valueOrError3
   411  	_7_valueOrError3 = (_6_maybeBranchKeyVersion).MapFailure(func(coer23 func(_dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error) func(interface{}) interface{} {
   412  		return func(arg23 interface{}) interface{} {
   413  			return coer23(arg23.(_dafny.Sequence))
   414  		}
   415  	}(func(_8_e _dafny.Sequence) m_AwsCryptographyKeyStoreTypes.Error {
   416  		return m_AwsCryptographyKeyStoreTypes.Companion_Error_.Create_KeyStoreException_(_8_e)
   417  	}))
   418  	if (_7_valueOrError3).IsFailure() {
   419  		output = (_7_valueOrError3).PropagateFailure()
   420  		return output
   421  	}
   422  	var _9_branchKeyVersion _dafny.Sequence
   423  	_ = _9_branchKeyVersion
   424  	_9_branchKeyVersion = (_7_valueOrError3).Extract().(_dafny.Sequence)
   425  	var _out2 m_Wrappers.Result
   426  	_ = _out2
   427  	_out2 = m_CreateKeys.Companion_Default___.VersionActiveBranchKey(input, _5_timestamp, _9_branchKeyVersion, (config).Dtor_ddbTableName(), (config).Dtor_logicalKeyStoreName(), (config).Dtor_kmsConfiguration(), (config).Dtor_grantTokens(), (config).Dtor_kmsClient(), (config).Dtor_ddbClient())
   428  	output = _out2
   429  	return output
   430  }
   431  func (_static *CompanionStruct_Default___) GetActiveBranchKey(config Config, input m_AwsCryptographyKeyStoreTypes.GetActiveBranchKeyInput) m_Wrappers.Result {
   432  	var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_AwsCryptographyKeyStoreTypes.Companion_GetActiveBranchKeyOutput_.Default())
   433  	_ = output
   434  	var _out0 m_Wrappers.Result
   435  	_ = _out0
   436  	_out0 = m_GetKeys.Companion_Default___.GetActiveKeyAndUnwrap(input, (config).Dtor_ddbTableName(), (config).Dtor_logicalKeyStoreName(), (config).Dtor_kmsConfiguration(), (config).Dtor_grantTokens(), (config).Dtor_kmsClient(), (config).Dtor_ddbClient())
   437  	output = _out0
   438  	return output
   439  }
   440  func (_static *CompanionStruct_Default___) GetBranchKeyVersion(config Config, input m_AwsCryptographyKeyStoreTypes.GetBranchKeyVersionInput) m_Wrappers.Result {
   441  	var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_AwsCryptographyKeyStoreTypes.Companion_GetBranchKeyVersionOutput_.Default())
   442  	_ = output
   443  	var _out0 m_Wrappers.Result
   444  	_ = _out0
   445  	_out0 = m_GetKeys.Companion_Default___.GetBranchKeyVersion(input, (config).Dtor_ddbTableName(), (config).Dtor_logicalKeyStoreName(), (config).Dtor_kmsConfiguration(), (config).Dtor_grantTokens(), (config).Dtor_kmsClient(), (config).Dtor_ddbClient())
   446  	output = _out0
   447  	return output
   448  }
   449  func (_static *CompanionStruct_Default___) GetBeaconKey(config Config, input m_AwsCryptographyKeyStoreTypes.GetBeaconKeyInput) m_Wrappers.Result {
   450  	var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_AwsCryptographyKeyStoreTypes.Companion_GetBeaconKeyOutput_.Default())
   451  	_ = output
   452  	var _out0 m_Wrappers.Result
   453  	_ = _out0
   454  	_out0 = m_GetKeys.Companion_Default___.GetBeaconKeyAndUnwrap(input, (config).Dtor_ddbTableName(), (config).Dtor_logicalKeyStoreName(), (config).Dtor_kmsConfiguration(), (config).Dtor_grantTokens(), (config).Dtor_kmsClient(), (config).Dtor_ddbClient())
   455  	output = _out0
   456  	return output
   457  }
   458  
   459  // End of class Default__
   460  
   461  // Definition of datatype Config
   462  type Config struct {
   463  	Data_Config_
   464  }
   465  
   466  func (_this Config) Get_() Data_Config_ {
   467  	return _this.Data_Config_
   468  }
   469  
   470  type Data_Config_ interface {
   471  	isConfig()
   472  }
   473  
   474  type CompanionStruct_Config_ struct {
   475  }
   476  
   477  var Companion_Config_ = CompanionStruct_Config_{}
   478  
   479  type Config_Config struct {
   480  	Id                  _dafny.Sequence
   481  	DdbTableName        _dafny.Sequence
   482  	LogicalKeyStoreName _dafny.Sequence
   483  	KmsConfiguration    m_AwsCryptographyKeyStoreTypes.KMSConfiguration
   484  	GrantTokens         _dafny.Sequence
   485  	KmsClient           m_ComAmazonawsKmsTypes.IKMSClient
   486  	DdbClient           m_ComAmazonawsDynamodbTypes.IDynamoDBClient
   487  }
   488  
   489  func (Config_Config) isConfig() {}
   490  
   491  func (CompanionStruct_Config_) Create_Config_(Id _dafny.Sequence, DdbTableName _dafny.Sequence, LogicalKeyStoreName _dafny.Sequence, KmsConfiguration m_AwsCryptographyKeyStoreTypes.KMSConfiguration, GrantTokens _dafny.Sequence, KmsClient m_ComAmazonawsKmsTypes.IKMSClient, DdbClient m_ComAmazonawsDynamodbTypes.IDynamoDBClient) Config {
   492  	return Config{Config_Config{Id, DdbTableName, LogicalKeyStoreName, KmsConfiguration, GrantTokens, KmsClient, DdbClient}}
   493  }
   494  
   495  func (_this Config) Is_Config() bool {
   496  	_, ok := _this.Get_().(Config_Config)
   497  	return ok
   498  }
   499  
   500  func (CompanionStruct_Config_) Default() Config {
   501  	return Companion_Config_.Create_Config_(_dafny.EmptySeq.SetString(), _dafny.EmptySeq.SetString(), _dafny.EmptySeq.SetString(), m_AwsCryptographyKeyStoreTypes.Companion_KMSConfiguration_.Default(), _dafny.EmptySeq, (m_ComAmazonawsKmsTypes.IKMSClient)(nil), (m_ComAmazonawsDynamodbTypes.IDynamoDBClient)(nil))
   502  }
   503  
   504  func (_this Config) Dtor_id() _dafny.Sequence {
   505  	return _this.Get_().(Config_Config).Id
   506  }
   507  
   508  func (_this Config) Dtor_ddbTableName() _dafny.Sequence {
   509  	return _this.Get_().(Config_Config).DdbTableName
   510  }
   511  
   512  func (_this Config) Dtor_logicalKeyStoreName() _dafny.Sequence {
   513  	return _this.Get_().(Config_Config).LogicalKeyStoreName
   514  }
   515  
   516  func (_this Config) Dtor_kmsConfiguration() m_AwsCryptographyKeyStoreTypes.KMSConfiguration {
   517  	return _this.Get_().(Config_Config).KmsConfiguration
   518  }
   519  
   520  func (_this Config) Dtor_grantTokens() _dafny.Sequence {
   521  	return _this.Get_().(Config_Config).GrantTokens
   522  }
   523  
   524  func (_this Config) Dtor_kmsClient() m_ComAmazonawsKmsTypes.IKMSClient {
   525  	return _this.Get_().(Config_Config).KmsClient
   526  }
   527  
   528  func (_this Config) Dtor_ddbClient() m_ComAmazonawsDynamodbTypes.IDynamoDBClient {
   529  	return _this.Get_().(Config_Config).DdbClient
   530  }
   531  
   532  func (_this Config) String() string {
   533  	switch data := _this.Get_().(type) {
   534  	case nil:
   535  		return "null"
   536  	case Config_Config:
   537  		{
   538  			return "AwsCryptographyKeyStoreOperations.Config.Config" + "(" + _dafny.String(data.Id) + ", " + _dafny.String(data.DdbTableName) + ", " + _dafny.String(data.LogicalKeyStoreName) + ", " + _dafny.String(data.KmsConfiguration) + ", " + _dafny.String(data.GrantTokens) + ", " + _dafny.String(data.KmsClient) + ", " + _dafny.String(data.DdbClient) + ")"
   539  		}
   540  	default:
   541  		{
   542  			return "<unexpected>"
   543  		}
   544  	}
   545  }
   546  
   547  func (_this Config) Equals(other Config) bool {
   548  	switch data1 := _this.Get_().(type) {
   549  	case Config_Config:
   550  		{
   551  			data2, ok := other.Get_().(Config_Config)
   552  			return ok && data1.Id.Equals(data2.Id) && data1.DdbTableName.Equals(data2.DdbTableName) && data1.LogicalKeyStoreName.Equals(data2.LogicalKeyStoreName) && data1.KmsConfiguration.Equals(data2.KmsConfiguration) && data1.GrantTokens.Equals(data2.GrantTokens) && _dafny.AreEqual(data1.KmsClient, data2.KmsClient) && _dafny.AreEqual(data1.DdbClient, data2.DdbClient)
   553  		}
   554  	default:
   555  		{
   556  			return false // unexpected
   557  		}
   558  	}
   559  }
   560  
   561  func (_this Config) EqualsGeneric(other interface{}) bool {
   562  	typed, ok := other.(Config)
   563  	return ok && _this.Equals(typed)
   564  }
   565  
   566  func Type_Config_() _dafny.TypeDescriptor {
   567  	return type_Config_{}
   568  }
   569  
   570  type type_Config_ struct {
   571  }
   572  
   573  func (_this type_Config_) Default() interface{} {
   574  	return Companion_Config_.Default()
   575  }
   576  
   577  func (_this type_Config_) String() string {
   578  	return "AwsCryptographyKeyStoreOperations.Config"
   579  }
   580  func (_this Config) ParentTraits_() []*_dafny.TraitID {
   581  	return [](*_dafny.TraitID){}
   582  }
   583  
   584  var _ _dafny.TraitOffspring = Config{}
   585  
   586  // End of datatype Config