github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl@v0.2.0/MultiKeyring/MultiKeyring.go (about) 1 // Package MultiKeyring 2 // Dafny module MultiKeyring compiled into Go 3 4 package MultiKeyring 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_AwsKmsMrkMatchForDecrypt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkMatchForDecrypt" 19 m_AwsKmsUtils "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsUtils" 20 m_CreateKeyStoreTable "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeyStoreTable" 21 m_CreateKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeys" 22 m_DDBKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DDBKeystoreOperations" 23 m_GetKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/GetKeys" 24 m_KMSKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KMSKeystoreOperations" 25 m_KeyStore "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KeyStore" 26 m_KeyStoreErrorMessages "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KeyStoreErrorMessages" 27 m_Keyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Keyring" 28 m_KmsArn "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KmsArn" 29 m_Materials "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Materials" 30 m_Structure "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Structure" 31 m_AtomicPrimitives "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AtomicPrimitives" 32 m_AwsCryptographyPrimitivesOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesOperations" 33 m_AwsCryptographyPrimitivesTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesTypes" 34 m_Digest "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Digest" 35 m_HKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/HKDF" 36 m_KdfCtr "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/KdfCtr" 37 m_Random "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Random" 38 m_WrappedHKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHKDF" 39 m_WrappedHMAC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHMAC" 40 m_Actions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Actions" 41 m_Base64 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64" 42 m_Base64Lemmas "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64Lemmas" 43 m_BoundedInts "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/BoundedInts" 44 m_DivInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternals" 45 m_DivInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternalsNonlinear" 46 m_DivMod "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivMod" 47 m_FileIO "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FileIO" 48 m_FloatCompare "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FloatCompare" 49 m_Functions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Functions" 50 m_GeneralInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GeneralInternals" 51 m_GetOpt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GetOpt" 52 m_HexStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/HexStrings" 53 m_Logarithm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Logarithm" 54 m__Math "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Math_" 55 m_ModInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternals" 56 m_ModInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternalsNonlinear" 57 m_Mul "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Mul" 58 m_MulInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternals" 59 m_MulInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternalsNonlinear" 60 m_Power "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Power" 61 m_Relations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Relations" 62 m_Seq "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq" 63 m_Seq_MergeSort "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq_MergeSort" 64 m_Sorting "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Sorting" 65 m_StandardLibrary "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary" 66 m_StandardLibraryInterop "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibraryInterop" 67 m_StandardLibrary_Sequence "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_Sequence" 68 m_StandardLibrary_String "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_String" 69 m_StandardLibrary_UInt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_UInt" 70 m_Streams "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Streams" 71 m_UnicodeStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UnicodeStrings" 72 m__Unicode "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Unicode_" 73 m_Utf16EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf16EncodingForm" 74 m_Utf8EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf8EncodingForm" 75 m_Wrappers "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Wrappers" 76 m__System "github.com/dafny-lang/DafnyRuntimeGo/v4/System_" 77 _dafny "github.com/dafny-lang/DafnyRuntimeGo/v4/dafny" 78 ) 79 80 var _ = os.Args 81 var _ _dafny.Dummy__ 82 var _ m__System.Dummy__ 83 var _ m_Wrappers.Dummy__ 84 var _ m_BoundedInts.Dummy__ 85 var _ m_StandardLibrary_UInt.Dummy__ 86 var _ m_StandardLibrary_Sequence.Dummy__ 87 var _ m_StandardLibrary_String.Dummy__ 88 var _ m_StandardLibrary.Dummy__ 89 var _ m_AwsCryptographyPrimitivesTypes.Dummy__ 90 var _ m_Random.Dummy__ 91 var _ m_Digest.Dummy__ 92 var _ m_WrappedHMAC.Dummy__ 93 var _ m_HKDF.Dummy__ 94 var _ m_WrappedHKDF.Dummy__ 95 var _ m_KdfCtr.Dummy__ 96 var _ m_AwsCryptographyPrimitivesOperations.Dummy__ 97 var _ m_AtomicPrimitives.Dummy__ 98 var _ m_ComAmazonawsDynamodbTypes.Dummy__ 99 var _ m_ComAmazonawsKmsTypes.Dummy__ 100 var _ m_Relations.Dummy__ 101 var _ m_Seq_MergeSort.Dummy__ 102 var _ m__Math.Dummy__ 103 var _ m_Seq.Dummy__ 104 var _ m__Unicode.Dummy__ 105 var _ m_Functions.Dummy__ 106 var _ m_Utf8EncodingForm.Dummy__ 107 var _ m_Utf16EncodingForm.Dummy__ 108 var _ m_UnicodeStrings.Dummy__ 109 var _ m_FileIO.Dummy__ 110 var _ m_GeneralInternals.Dummy__ 111 var _ m_MulInternalsNonlinear.Dummy__ 112 var _ m_MulInternals.Dummy__ 113 var _ m_Mul.Dummy__ 114 var _ m_ModInternalsNonlinear.Dummy__ 115 var _ m_DivInternalsNonlinear.Dummy__ 116 var _ m_ModInternals.Dummy__ 117 var _ m_DivInternals.Dummy__ 118 var _ m_DivMod.Dummy__ 119 var _ m_Power.Dummy__ 120 var _ m_Logarithm.Dummy__ 121 var _ m_StandardLibraryInterop.Dummy__ 122 var _ m_Streams.Dummy__ 123 var _ m_Sorting.Dummy__ 124 var _ m_HexStrings.Dummy__ 125 var _ m_GetOpt.Dummy__ 126 var _ m_FloatCompare.Dummy__ 127 var _ m_Base64.Dummy__ 128 var _ m_Base64Lemmas.Dummy__ 129 var _ m_Actions.Dummy__ 130 var _ m_AwsCryptographyKeyStoreTypes.Dummy__ 131 var _ m_AwsCryptographyMaterialProvidersTypes.Dummy__ 132 var _ m_AwsArnParsing.Dummy__ 133 var _ m_AwsKmsMrkMatchForDecrypt.Dummy__ 134 var _ m_AwsKmsUtils.Dummy__ 135 var _ m_KeyStoreErrorMessages.Dummy__ 136 var _ m_KmsArn.Dummy__ 137 var _ m_Structure.Dummy__ 138 var _ m_KMSKeystoreOperations.Dummy__ 139 var _ m_DDBKeystoreOperations.Dummy__ 140 var _ m_CreateKeys.Dummy__ 141 var _ m_CreateKeyStoreTable.Dummy__ 142 var _ m_GetKeys.Dummy__ 143 var _ m_AwsCryptographyKeyStoreOperations.Dummy__ 144 var _ m_Com_Amazonaws_Kms.Dummy__ 145 var _ m_Com_Amazonaws_Dynamodb.Dummy__ 146 var _ m_KeyStore.Dummy__ 147 var _ m_AlgorithmSuites.Dummy__ 148 var _ m_Materials.Dummy__ 149 var _ m_Keyring.Dummy__ 150 151 type Dummy__ struct{} 152 153 // Definition of class Default__ 154 type Default__ struct { 155 dummy byte 156 } 157 158 func New_Default___() *Default__ { 159 _this := Default__{} 160 161 return &_this 162 } 163 164 type CompanionStruct_Default___ struct { 165 } 166 167 var Companion_Default___ = CompanionStruct_Default___{} 168 169 func (_this *Default__) Equals(other *Default__) bool { 170 return _this == other 171 } 172 173 func (_this *Default__) EqualsGeneric(x interface{}) bool { 174 other, ok := x.(*Default__) 175 return ok && _this.Equals(other) 176 } 177 178 func (*Default__) String() string { 179 return "MultiKeyring.Default__" 180 } 181 func (_this *Default__) ParentTraits_() []*_dafny.TraitID { 182 return [](*_dafny.TraitID){} 183 } 184 185 var _ _dafny.TraitOffspring = &Default__{} 186 187 func (_static *CompanionStruct_Default___) AttemptDecryptDataKey(keyring m_AwsCryptographyMaterialProvidersTypes.IKeyring, input m_AwsCryptographyMaterialProvidersTypes.OnDecryptInput) m_Wrappers.Result { 188 var res m_Wrappers.Result = m_Wrappers.Result{} 189 _ = res 190 var _0_valueOrError0 m_Wrappers.Result = m_Wrappers.Result{} 191 _ = _0_valueOrError0 192 var _out0 m_Wrappers.Result 193 _ = _out0 194 _out0 = (keyring).OnDecrypt(input) 195 _0_valueOrError0 = _out0 196 if (_0_valueOrError0).IsFailure() { 197 res = (_0_valueOrError0).PropagateFailure() 198 return res 199 } 200 var _1_output m_AwsCryptographyMaterialProvidersTypes.OnDecryptOutput 201 _ = _1_output 202 _1_output = (_0_valueOrError0).Extract().(m_AwsCryptographyMaterialProvidersTypes.OnDecryptOutput) 203 var _2_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default() 204 _ = _2_valueOrError1 205 _2_valueOrError1 = m_Wrappers.Companion_Default___.Need(m_Materials.Companion_Default___.DecryptionMaterialsTransitionIsValid((input).Dtor_materials(), (_1_output).Dtor_materials()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Keyring performed invalid material transition"))) 206 if (_2_valueOrError1).IsFailure() { 207 res = (_2_valueOrError1).PropagateFailure() 208 return res 209 } 210 res = m_Wrappers.Companion_Result_.Create_Success_(_1_output) 211 return res 212 return res 213 } 214 215 // End of class Default__ 216 217 // Definition of class MultiKeyring 218 type MultiKeyring struct { 219 _generatorKeyring m_Wrappers.Option 220 _childKeyrings _dafny.Sequence 221 } 222 223 func New_MultiKeyring_() *MultiKeyring { 224 _this := MultiKeyring{} 225 226 _this._generatorKeyring = m_Wrappers.Companion_Option_.Default() 227 _this._childKeyrings = _dafny.EmptySeq 228 return &_this 229 } 230 231 type CompanionStruct_MultiKeyring_ struct { 232 } 233 234 var Companion_MultiKeyring_ = CompanionStruct_MultiKeyring_{} 235 236 func (_this *MultiKeyring) Equals(other *MultiKeyring) bool { 237 return _this == other 238 } 239 240 func (_this *MultiKeyring) EqualsGeneric(x interface{}) bool { 241 other, ok := x.(*MultiKeyring) 242 return ok && _this.Equals(other) 243 } 244 245 func (*MultiKeyring) String() string { 246 return "MultiKeyring.MultiKeyring" 247 } 248 249 func Type_MultiKeyring_() _dafny.TypeDescriptor { 250 return type_MultiKeyring_{} 251 } 252 253 type type_MultiKeyring_ struct { 254 } 255 256 func (_this type_MultiKeyring_) Default() interface{} { 257 return (*MultiKeyring)(nil) 258 } 259 260 func (_this type_MultiKeyring_) String() string { 261 return "MultiKeyring.MultiKeyring" 262 } 263 func (_this *MultiKeyring) ParentTraits_() []*_dafny.TraitID { 264 return [](*_dafny.TraitID){m_Keyring.Companion_VerifiableInterface_.TraitID_, m_AwsCryptographyMaterialProvidersTypes.Companion_IKeyring_.TraitID_} 265 } 266 267 var _ m_Keyring.VerifiableInterface = &MultiKeyring{} 268 var _ m_AwsCryptographyMaterialProvidersTypes.IKeyring = &MultiKeyring{} 269 var _ _dafny.TraitOffspring = &MultiKeyring{} 270 271 func (_this *MultiKeyring) OnDecrypt(input m_AwsCryptographyMaterialProvidersTypes.OnDecryptInput) m_Wrappers.Result { 272 var _out1 m_Wrappers.Result 273 _ = _out1 274 _out1 = m_AwsCryptographyMaterialProvidersTypes.Companion_IKeyring_.OnDecrypt(_this, input) 275 return _out1 276 } 277 func (_this *MultiKeyring) OnEncrypt(input m_AwsCryptographyMaterialProvidersTypes.OnEncryptInput) m_Wrappers.Result { 278 var _out1 m_Wrappers.Result 279 _ = _out1 280 _out1 = m_AwsCryptographyMaterialProvidersTypes.Companion_IKeyring_.OnEncrypt(_this, input) 281 return _out1 282 } 283 func (_this *MultiKeyring) Ctor__(generatorKeyring m_Wrappers.Option, childKeyrings _dafny.Sequence) { 284 { 285 (_this)._generatorKeyring = generatorKeyring 286 (_this)._childKeyrings = childKeyrings 287 } 288 } 289 func (_this *MultiKeyring) OnEncrypt_k(input m_AwsCryptographyMaterialProvidersTypes.OnEncryptInput) m_Wrappers.Result { 290 { 291 var res m_Wrappers.Result = m_Wrappers.Result{} 292 _ = res 293 if (((_this).GeneratorKeyring()).Is_None()) && ((((input).Dtor_materials()).Dtor_plaintextDataKey()).Is_None()) { 294 var _0_exception _dafny.Sequence 295 _ = _0_exception 296 _0_exception = _dafny.SeqOfString("Need either a generator keyring or input encryption materials which contain a plaintext data key") 297 res = m_Wrappers.Companion_Result_.Create_Failure_(m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_0_exception)) 298 return res 299 } 300 var _1_returnMaterials m_AwsCryptographyMaterialProvidersTypes.EncryptionMaterials 301 _ = _1_returnMaterials 302 _1_returnMaterials = (input).Dtor_materials() 303 if ((_this).GeneratorKeyring()).Is_Some() { 304 var _2_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default() 305 _ = _2_valueOrError0 306 _2_valueOrError0 = m_Wrappers.Companion_Default___.Need((((input).Dtor_materials()).Dtor_plaintextDataKey()).Is_None(), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("This multi keyring has a generator but provided Encryption Materials already contain plaintext data key"))) 307 if (_2_valueOrError0).IsFailure() { 308 res = (_2_valueOrError0).PropagateFailure() 309 return res 310 } 311 var _3_onEncryptOutput m_Wrappers.Result 312 _ = _3_onEncryptOutput 313 var _out0 m_Wrappers.Result 314 _ = _out0 315 _out0 = (m_AwsCryptographyMaterialProvidersTypes.Companion_IKeyring_.CastTo_(((_this).GeneratorKeyring()).Dtor_value())).OnEncrypt(input) 316 _3_onEncryptOutput = _out0 317 var _4_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default() 318 _ = _4_valueOrError1 319 _4_valueOrError1 = m_Wrappers.Companion_Default___.Need((_3_onEncryptOutput).Is_Success(), (func() m_AwsCryptographyMaterialProvidersTypes.Error { 320 if (_3_onEncryptOutput).Is_Failure() { 321 return (_3_onEncryptOutput).Dtor_error().(m_AwsCryptographyMaterialProvidersTypes.Error) 322 } 323 return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Unexpected failure. Input to Need is !Success.")) 324 })()) 325 if (_4_valueOrError1).IsFailure() { 326 res = (_4_valueOrError1).PropagateFailure() 327 return res 328 } 329 var _5_valueOrError2 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default() 330 _ = _5_valueOrError2 331 _5_valueOrError2 = m_Wrappers.Companion_Default___.Need(m_Materials.Companion_Default___.ValidEncryptionMaterialsTransition((input).Dtor_materials(), ((_3_onEncryptOutput).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.OnEncryptOutput)).Dtor_materials()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Generator keyring returned invalid encryption materials"))) 332 if (_5_valueOrError2).IsFailure() { 333 res = (_5_valueOrError2).PropagateFailure() 334 return res 335 } 336 _1_returnMaterials = ((_3_onEncryptOutput).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.OnEncryptOutput)).Dtor_materials() 337 } 338 var _hi0 _dafny.Int = _dafny.IntOfUint32(((_this).ChildKeyrings()).Cardinality()) 339 _ = _hi0 340 for _6_i := _dafny.Zero; _6_i.Cmp(_hi0) < 0; _6_i = _6_i.Plus(_dafny.One) { 341 var _7_onEncryptInput m_AwsCryptographyMaterialProvidersTypes.OnEncryptInput 342 _ = _7_onEncryptInput 343 _7_onEncryptInput = m_AwsCryptographyMaterialProvidersTypes.Companion_OnEncryptInput_.Create_OnEncryptInput_(_1_returnMaterials) 344 var _8_onEncryptOutput m_Wrappers.Result 345 _ = _8_onEncryptOutput 346 var _out1 m_Wrappers.Result 347 _ = _out1 348 _out1 = (((_this).ChildKeyrings()).Select((_6_i).Uint32()).(m_AwsCryptographyMaterialProvidersTypes.IKeyring)).OnEncrypt(_7_onEncryptInput) 349 _8_onEncryptOutput = _out1 350 var _9_valueOrError3 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default() 351 _ = _9_valueOrError3 352 _9_valueOrError3 = m_Wrappers.Companion_Default___.Need((_8_onEncryptOutput).Is_Success(), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Child keyring failed to encrypt plaintext data key"))) 353 if (_9_valueOrError3).IsFailure() { 354 res = (_9_valueOrError3).PropagateFailure() 355 return res 356 } 357 var _10_valueOrError4 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default() 358 _ = _10_valueOrError4 359 _10_valueOrError4 = m_Wrappers.Companion_Default___.Need(m_Materials.Companion_Default___.ValidEncryptionMaterialsTransition(_1_returnMaterials, ((_8_onEncryptOutput).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.OnEncryptOutput)).Dtor_materials()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Child keyring performed invalid transition on encryption materials"))) 360 if (_10_valueOrError4).IsFailure() { 361 res = (_10_valueOrError4).PropagateFailure() 362 return res 363 } 364 _1_returnMaterials = ((_8_onEncryptOutput).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.OnEncryptOutput)).Dtor_materials() 365 } 366 var _11_valueOrError5 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default() 367 _ = _11_valueOrError5 368 _11_valueOrError5 = m_Wrappers.Companion_Default___.Need(m_Materials.Companion_Default___.ValidEncryptionMaterialsTransition((input).Dtor_materials(), _1_returnMaterials), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("A child or generator keyring modified the encryption materials in illegal ways."))) 369 if (_11_valueOrError5).IsFailure() { 370 res = (_11_valueOrError5).PropagateFailure() 371 return res 372 } 373 res = m_Wrappers.Companion_Result_.Create_Success_(m_AwsCryptographyMaterialProvidersTypes.Companion_OnEncryptOutput_.Create_OnEncryptOutput_(_1_returnMaterials)) 374 return res 375 return res 376 } 377 } 378 func (_this *MultiKeyring) OnDecrypt_k(input m_AwsCryptographyMaterialProvidersTypes.OnDecryptInput) m_Wrappers.Result { 379 { 380 var res m_Wrappers.Result = m_Wrappers.Result{} 381 _ = res 382 var _0_materials m_AwsCryptographyMaterialProvidersTypes.DecryptionMaterials 383 _ = _0_materials 384 _0_materials = (input).Dtor_materials() 385 var _1_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default() 386 _ = _1_valueOrError0 387 _1_valueOrError0 = m_Wrappers.Companion_Default___.Need(m_Materials.Companion_Default___.DecryptionMaterialsWithoutPlaintextDataKey((input).Dtor_materials()), m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Keyring received decryption materials that already contain a plaintext data key."))) 388 if (_1_valueOrError0).IsFailure() { 389 res = (_1_valueOrError0).PropagateFailure() 390 return res 391 } 392 var _2_failures _dafny.Sequence 393 _ = _2_failures 394 _2_failures = _dafny.SeqOf() 395 if ((_this).GeneratorKeyring()).Is_Some() { 396 var _3_result m_Wrappers.Result 397 _ = _3_result 398 var _out0 m_Wrappers.Result 399 _ = _out0 400 _out0 = Companion_Default___.AttemptDecryptDataKey(m_AwsCryptographyMaterialProvidersTypes.Companion_IKeyring_.CastTo_(((_this).GeneratorKeyring()).Dtor_value()), input) 401 _3_result = _out0 402 if (_3_result).Is_Success() { 403 if ((((_3_result).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.OnDecryptOutput)).Dtor_materials()).Dtor_plaintextDataKey()).Is_Some() { 404 res = m_Wrappers.Companion_Result_.Create_Success_((_3_result).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.OnDecryptOutput)) 405 return res 406 } 407 } else { 408 _2_failures = _dafny.Companion_Sequence_.Concatenate(_2_failures, _dafny.SeqOf((_3_result).Dtor_error().(m_AwsCryptographyMaterialProvidersTypes.Error))) 409 } 410 } 411 var _hi0 _dafny.Int = _dafny.IntOfUint32(((_this).ChildKeyrings()).Cardinality()) 412 _ = _hi0 413 for _4_j := _dafny.Zero; _4_j.Cmp(_hi0) < 0; _4_j = _4_j.Plus(_dafny.One) { 414 var _5_result m_Wrappers.Result 415 _ = _5_result 416 var _out1 m_Wrappers.Result 417 _ = _out1 418 _out1 = Companion_Default___.AttemptDecryptDataKey(((_this).ChildKeyrings()).Select((_4_j).Uint32()).(m_AwsCryptographyMaterialProvidersTypes.IKeyring), input) 419 _5_result = _out1 420 if (_5_result).Is_Success() { 421 res = m_Wrappers.Companion_Result_.Create_Success_((_5_result).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.OnDecryptOutput)) 422 return res 423 } else { 424 _2_failures = _dafny.Companion_Sequence_.Concatenate(_2_failures, _dafny.SeqOf((_5_result).Dtor_error().(m_AwsCryptographyMaterialProvidersTypes.Error))) 425 } 426 } 427 var _6_combinedResult m_AwsCryptographyMaterialProvidersTypes.Error 428 _ = _6_combinedResult 429 _6_combinedResult = m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_CollectionOfErrors_(_2_failures, _dafny.SeqOfString("No Configured Keyring was able to decrypt the Data Key. The list of encountered Exceptions is available via `list`.")) 430 res = m_Wrappers.Companion_Result_.Create_Failure_(_6_combinedResult) 431 return res 432 return res 433 } 434 } 435 func (_this *MultiKeyring) GeneratorKeyring() m_Wrappers.Option { 436 { 437 return _this._generatorKeyring 438 } 439 } 440 func (_this *MultiKeyring) ChildKeyrings() _dafny.Sequence { 441 { 442 return _this._childKeyrings 443 } 444 } 445 446 // End of class MultiKeyring