github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl@v0.2.0/StormTracker/StormTracker.go (about) 1 // Package StormTracker 2 // Dafny module StormTracker compiled into Go 3 4 package StormTracker 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_AwsKmsKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsKeyring" 20 m_AwsKmsMrkAreUnique "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkAreUnique" 21 m_AwsKmsMrkDiscoveryKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkDiscoveryKeyring" 22 m_AwsKmsMrkKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkKeyring" 23 m_AwsKmsMrkMatchForDecrypt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkMatchForDecrypt" 24 m_AwsKmsUtils "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsUtils" 25 m_CanonicalEncryptionContext "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CanonicalEncryptionContext" 26 m_Constants "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Constants" 27 m_CreateKeyStoreTable "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeyStoreTable" 28 m_CreateKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeys" 29 m_DDBKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DDBKeystoreOperations" 30 m_DiscoveryMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DiscoveryMultiKeyring" 31 m_EdkWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/EdkWrapping" 32 m_ErrorMessages "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/ErrorMessages" 33 m_GetKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/GetKeys" 34 m_IntermediateKeyWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/IntermediateKeyWrapping" 35 m_KMSKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KMSKeystoreOperations" 36 m_KeyStore "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KeyStore" 37 m_KeyStoreErrorMessages "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KeyStoreErrorMessages" 38 m_Keyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Keyring" 39 m_KmsArn "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KmsArn" 40 m_LocalCMC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/LocalCMC" 41 m_MaterialWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MaterialWrapping" 42 m_Materials "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Materials" 43 m_MrkAwareDiscoveryMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MrkAwareDiscoveryMultiKeyring" 44 m_MrkAwareStrictMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MrkAwareStrictMultiKeyring" 45 m_MultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MultiKeyring" 46 m_StrictMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/StrictMultiKeyring" 47 m_Structure "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Structure" 48 m_SynchronizedLocalCMC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/SynchronizedLocalCMC" 49 m_AtomicPrimitives "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AtomicPrimitives" 50 m_AwsCryptographyPrimitivesOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesOperations" 51 m_AwsCryptographyPrimitivesTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesTypes" 52 m_Digest "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Digest" 53 m_HKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/HKDF" 54 m_KdfCtr "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/KdfCtr" 55 m_Random "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Random" 56 m_WrappedHKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHKDF" 57 m_WrappedHMAC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHMAC" 58 m_Actions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Actions" 59 m_Base64 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64" 60 m_Base64Lemmas "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64Lemmas" 61 m_BoundedInts "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/BoundedInts" 62 m_DafnyLibraries "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DafnyLibraries" 63 m_DivInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternals" 64 m_DivInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternalsNonlinear" 65 m_DivMod "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivMod" 66 m_FileIO "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FileIO" 67 m_FloatCompare "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FloatCompare" 68 m_Functions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Functions" 69 m_GeneralInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GeneralInternals" 70 m_GetOpt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GetOpt" 71 m_HexStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/HexStrings" 72 m_Logarithm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Logarithm" 73 m__Math "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Math_" 74 m_ModInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternals" 75 m_ModInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternalsNonlinear" 76 m_Mul "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Mul" 77 m_MulInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternals" 78 m_MulInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternalsNonlinear" 79 m_Power "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Power" 80 m_Relations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Relations" 81 m_Seq "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq" 82 m_Seq_MergeSort "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq_MergeSort" 83 m_SortedSets "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/SortedSets" 84 m_Sorting "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Sorting" 85 m_StandardLibrary "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary" 86 m_StandardLibraryInterop "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibraryInterop" 87 m_StandardLibrary_Sequence "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_Sequence" 88 m_StandardLibrary_String "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_String" 89 m_StandardLibrary_UInt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_UInt" 90 m_Streams "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Streams" 91 m__Time "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Time_" 92 m_UnicodeStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UnicodeStrings" 93 m__Unicode "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Unicode_" 94 m_Utf16EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf16EncodingForm" 95 m_Utf8EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf8EncodingForm" 96 m_Wrappers "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Wrappers" 97 m__System "github.com/dafny-lang/DafnyRuntimeGo/v4/System_" 98 _dafny "github.com/dafny-lang/DafnyRuntimeGo/v4/dafny" 99 ) 100 101 var _ = os.Args 102 var _ _dafny.Dummy__ 103 var _ m__System.Dummy__ 104 var _ m_Wrappers.Dummy__ 105 var _ m_BoundedInts.Dummy__ 106 var _ m_StandardLibrary_UInt.Dummy__ 107 var _ m_StandardLibrary_Sequence.Dummy__ 108 var _ m_StandardLibrary_String.Dummy__ 109 var _ m_StandardLibrary.Dummy__ 110 var _ m_AwsCryptographyPrimitivesTypes.Dummy__ 111 var _ m_Random.Dummy__ 112 var _ m_Digest.Dummy__ 113 var _ m_WrappedHMAC.Dummy__ 114 var _ m_HKDF.Dummy__ 115 var _ m_WrappedHKDF.Dummy__ 116 var _ m_KdfCtr.Dummy__ 117 var _ m_AwsCryptographyPrimitivesOperations.Dummy__ 118 var _ m_AtomicPrimitives.Dummy__ 119 var _ m_ComAmazonawsDynamodbTypes.Dummy__ 120 var _ m_ComAmazonawsKmsTypes.Dummy__ 121 var _ m_Relations.Dummy__ 122 var _ m_Seq_MergeSort.Dummy__ 123 var _ m__Math.Dummy__ 124 var _ m_Seq.Dummy__ 125 var _ m__Unicode.Dummy__ 126 var _ m_Functions.Dummy__ 127 var _ m_Utf8EncodingForm.Dummy__ 128 var _ m_Utf16EncodingForm.Dummy__ 129 var _ m_UnicodeStrings.Dummy__ 130 var _ m_FileIO.Dummy__ 131 var _ m_GeneralInternals.Dummy__ 132 var _ m_MulInternalsNonlinear.Dummy__ 133 var _ m_MulInternals.Dummy__ 134 var _ m_Mul.Dummy__ 135 var _ m_ModInternalsNonlinear.Dummy__ 136 var _ m_DivInternalsNonlinear.Dummy__ 137 var _ m_ModInternals.Dummy__ 138 var _ m_DivInternals.Dummy__ 139 var _ m_DivMod.Dummy__ 140 var _ m_Power.Dummy__ 141 var _ m_Logarithm.Dummy__ 142 var _ m_StandardLibraryInterop.Dummy__ 143 var _ m_Streams.Dummy__ 144 var _ m_Sorting.Dummy__ 145 var _ m_HexStrings.Dummy__ 146 var _ m_GetOpt.Dummy__ 147 var _ m_FloatCompare.Dummy__ 148 var _ m_Base64.Dummy__ 149 var _ m_Base64Lemmas.Dummy__ 150 var _ m_Actions.Dummy__ 151 var _ m_AwsCryptographyKeyStoreTypes.Dummy__ 152 var _ m_AwsCryptographyMaterialProvidersTypes.Dummy__ 153 var _ m_AwsArnParsing.Dummy__ 154 var _ m_AwsKmsMrkMatchForDecrypt.Dummy__ 155 var _ m_AwsKmsUtils.Dummy__ 156 var _ m_KeyStoreErrorMessages.Dummy__ 157 var _ m_KmsArn.Dummy__ 158 var _ m_Structure.Dummy__ 159 var _ m_KMSKeystoreOperations.Dummy__ 160 var _ m_DDBKeystoreOperations.Dummy__ 161 var _ m_CreateKeys.Dummy__ 162 var _ m_CreateKeyStoreTable.Dummy__ 163 var _ m_GetKeys.Dummy__ 164 var _ m_AwsCryptographyKeyStoreOperations.Dummy__ 165 var _ m_Com_Amazonaws_Kms.Dummy__ 166 var _ m_Com_Amazonaws_Dynamodb.Dummy__ 167 var _ m_KeyStore.Dummy__ 168 var _ m_AlgorithmSuites.Dummy__ 169 var _ m_Materials.Dummy__ 170 var _ m_Keyring.Dummy__ 171 var _ m_MultiKeyring.Dummy__ 172 var _ m_AwsKmsMrkAreUnique.Dummy__ 173 var _ m_Constants.Dummy__ 174 var _ m_MaterialWrapping.Dummy__ 175 var _ m_CanonicalEncryptionContext.Dummy__ 176 var _ m_IntermediateKeyWrapping.Dummy__ 177 var _ m_EdkWrapping.Dummy__ 178 var _ m_ErrorMessages.Dummy__ 179 var _ m_AwsKmsKeyring.Dummy__ 180 var _ m_StrictMultiKeyring.Dummy__ 181 var _ m_AwsKmsDiscoveryKeyring.Dummy__ 182 var _ m_DiscoveryMultiKeyring.Dummy__ 183 var _ m_AwsKmsMrkDiscoveryKeyring.Dummy__ 184 var _ m_MrkAwareDiscoveryMultiKeyring.Dummy__ 185 var _ m_AwsKmsMrkKeyring.Dummy__ 186 var _ m_MrkAwareStrictMultiKeyring.Dummy__ 187 var _ m_LocalCMC.Dummy__ 188 var _ m_SynchronizedLocalCMC.Dummy__ 189 190 type Dummy__ struct{} 191 192 // Definition of class Default__ 193 type Default__ struct { 194 dummy byte 195 } 196 197 func New_Default___() *Default__ { 198 _this := Default__{} 199 200 return &_this 201 } 202 203 type CompanionStruct_Default___ struct { 204 } 205 206 var Companion_Default___ = CompanionStruct_Default___{} 207 208 func (_this *Default__) Equals(other *Default__) bool { 209 return _this == other 210 } 211 212 func (_this *Default__) EqualsGeneric(x interface{}) bool { 213 other, ok := x.(*Default__) 214 return ok && _this.Equals(other) 215 } 216 217 func (*Default__) String() string { 218 return "StormTracker.Default__" 219 } 220 func (_this *Default__) ParentTraits_() []*_dafny.TraitID { 221 return [](*_dafny.TraitID){} 222 } 223 224 var _ _dafny.TraitOffspring = &Default__{} 225 226 func (_static *CompanionStruct_Default___) DefaultStorm() m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache { 227 return m_AwsCryptographyMaterialProvidersTypes.Companion_StormTrackingCache_.Create_StormTrackingCache_(int32(1000), m_Wrappers.Companion_Option_.Create_Some_(int32(1)), (int32(10))*(int32(1000)), (int32(1))*(int32(1000)), int32(20), (int32(10))*(int32(1000)), int32(20), m_Wrappers.Companion_Option_.Create_Some_(m_AwsCryptographyMaterialProvidersTypes.Companion_TimeUnits_.Create_Milliseconds_())) 228 } 229 func (_static *CompanionStruct_Default___) ConsistentSettings(cache m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache) bool { 230 return ((((cache).Dtor_graceInterval()) <= ((cache).Dtor_gracePeriod())) && (((cache).Dtor_inFlightTTL()) <= ((cache).Dtor_gracePeriod()))) && (((cache).Dtor_graceInterval()) <= ((cache).Dtor_inFlightTTL())) 231 } 232 func (_static *CompanionStruct_Default___) N(n int32) _dafny.Sequence { 233 return m_StandardLibrary_String.Companion_Default___.Base10Int2String(_dafny.IntOfInt32(n)) 234 } 235 func (_static *CompanionStruct_Default___) BadCacheMsg(cache m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache) _dafny.Sequence { 236 var _0_msg _dafny.Sequence = _dafny.SeqOfString("For a StormCache : ") 237 _ = _0_msg 238 var _1_msg _dafny.Sequence = _dafny.Companion_Sequence_.Concatenate(_0_msg, (func() _dafny.Sequence { 239 if !(((cache).Dtor_graceInterval()) <= ((cache).Dtor_gracePeriod())) { 240 return _dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.SeqOfString("graceInterval must not exceed gracePeriod, yet configuration has graceInterval="), Companion_Default___.N((cache).Dtor_graceInterval())), _dafny.SeqOfString(" and gracePeriod=")), Companion_Default___.N((cache).Dtor_gracePeriod())), _dafny.SeqOfString(". ")) 241 } 242 return _dafny.SeqOfString("") 243 })()) 244 _ = _1_msg 245 var _2_msg _dafny.Sequence = _dafny.Companion_Sequence_.Concatenate(_1_msg, (func() _dafny.Sequence { 246 if !(((cache).Dtor_inFlightTTL()) <= ((cache).Dtor_gracePeriod())) { 247 return _dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.SeqOfString("inFlightTTL must not exceed gracePeriod, yet configuration has inFlightTTL="), Companion_Default___.N((cache).Dtor_inFlightTTL())), _dafny.SeqOfString(" and gracePeriod=")), Companion_Default___.N((cache).Dtor_gracePeriod())), _dafny.SeqOfString(". ")) 248 } 249 return _dafny.SeqOfString("") 250 })()) 251 _ = _2_msg 252 return _2_msg 253 } 254 func (_static *CompanionStruct_Default___) CheckSettings(cache m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache) m_Wrappers.Outcome { 255 if Companion_Default___.ConsistentSettings(cache) { 256 return m_Wrappers.Companion_Outcome_.Create_Pass_() 257 } else { 258 return m_Wrappers.Companion_Outcome_.Create_Fail_(m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(Companion_Default___.BadCacheMsg(cache))) 259 } 260 } 261 262 // End of class Default__ 263 264 // Definition of datatype CacheState 265 type CacheState struct { 266 Data_CacheState_ 267 } 268 269 func (_this CacheState) Get_() Data_CacheState_ { 270 return _this.Data_CacheState_ 271 } 272 273 type Data_CacheState_ interface { 274 isCacheState() 275 } 276 277 type CompanionStruct_CacheState_ struct { 278 } 279 280 var Companion_CacheState_ = CompanionStruct_CacheState_{} 281 282 type CacheState_EmptyWait struct { 283 } 284 285 func (CacheState_EmptyWait) isCacheState() {} 286 287 func (CompanionStruct_CacheState_) Create_EmptyWait_() CacheState { 288 return CacheState{CacheState_EmptyWait{}} 289 } 290 291 func (_this CacheState) Is_EmptyWait() bool { 292 _, ok := _this.Get_().(CacheState_EmptyWait) 293 return ok 294 } 295 296 type CacheState_EmptyFetch struct { 297 } 298 299 func (CacheState_EmptyFetch) isCacheState() {} 300 301 func (CompanionStruct_CacheState_) Create_EmptyFetch_() CacheState { 302 return CacheState{CacheState_EmptyFetch{}} 303 } 304 305 func (_this CacheState) Is_EmptyFetch() bool { 306 _, ok := _this.Get_().(CacheState_EmptyFetch) 307 return ok 308 } 309 310 type CacheState_Full struct { 311 Data m_AwsCryptographyMaterialProvidersTypes.GetCacheEntryOutput 312 } 313 314 func (CacheState_Full) isCacheState() {} 315 316 func (CompanionStruct_CacheState_) Create_Full_(Data m_AwsCryptographyMaterialProvidersTypes.GetCacheEntryOutput) CacheState { 317 return CacheState{CacheState_Full{Data}} 318 } 319 320 func (_this CacheState) Is_Full() bool { 321 _, ok := _this.Get_().(CacheState_Full) 322 return ok 323 } 324 325 func (CompanionStruct_CacheState_) Default() CacheState { 326 return Companion_CacheState_.Create_EmptyWait_() 327 } 328 329 func (_this CacheState) Dtor_data() m_AwsCryptographyMaterialProvidersTypes.GetCacheEntryOutput { 330 return _this.Get_().(CacheState_Full).Data 331 } 332 333 func (_this CacheState) String() string { 334 switch data := _this.Get_().(type) { 335 case nil: 336 return "null" 337 case CacheState_EmptyWait: 338 { 339 return "StormTracker.CacheState.EmptyWait" 340 } 341 case CacheState_EmptyFetch: 342 { 343 return "StormTracker.CacheState.EmptyFetch" 344 } 345 case CacheState_Full: 346 { 347 return "StormTracker.CacheState.Full" + "(" + _dafny.String(data.Data) + ")" 348 } 349 default: 350 { 351 return "<unexpected>" 352 } 353 } 354 } 355 356 func (_this CacheState) Equals(other CacheState) bool { 357 switch data1 := _this.Get_().(type) { 358 case CacheState_EmptyWait: 359 { 360 _, ok := other.Get_().(CacheState_EmptyWait) 361 return ok 362 } 363 case CacheState_EmptyFetch: 364 { 365 _, ok := other.Get_().(CacheState_EmptyFetch) 366 return ok 367 } 368 case CacheState_Full: 369 { 370 data2, ok := other.Get_().(CacheState_Full) 371 return ok && data1.Data.Equals(data2.Data) 372 } 373 default: 374 { 375 return false // unexpected 376 } 377 } 378 } 379 380 func (_this CacheState) EqualsGeneric(other interface{}) bool { 381 typed, ok := other.(CacheState) 382 return ok && _this.Equals(typed) 383 } 384 385 func Type_CacheState_() _dafny.TypeDescriptor { 386 return type_CacheState_{} 387 } 388 389 type type_CacheState_ struct { 390 } 391 392 func (_this type_CacheState_) Default() interface{} { 393 return Companion_CacheState_.Default() 394 } 395 396 func (_this type_CacheState_) String() string { 397 return "StormTracker.CacheState" 398 } 399 func (_this CacheState) ParentTraits_() []*_dafny.TraitID { 400 return [](*_dafny.TraitID){} 401 } 402 403 var _ _dafny.TraitOffspring = CacheState{} 404 405 // End of datatype CacheState 406 407 // Definition of class StormTracker 408 type StormTracker struct { 409 Wrapped *m_LocalCMC.LocalCMC 410 InFlight *m_DafnyLibraries.MutableMap 411 GracePeriod int64 412 GraceInterval int64 413 FanOut int64 414 InFlightTTL int64 415 LastPrune int64 416 SleepMilli int64 417 } 418 419 func New_StormTracker_() *StormTracker { 420 _this := StormTracker{} 421 422 _this.Wrapped = (*m_LocalCMC.LocalCMC)(nil) 423 _this.InFlight = (*m_DafnyLibraries.MutableMap)(nil) 424 _this.GracePeriod = int64(0) 425 _this.GraceInterval = int64(0) 426 _this.FanOut = int64(0) 427 _this.InFlightTTL = int64(0) 428 _this.LastPrune = int64(0) 429 _this.SleepMilli = int64(0) 430 return &_this 431 } 432 433 type CompanionStruct_StormTracker_ struct { 434 } 435 436 var Companion_StormTracker_ = CompanionStruct_StormTracker_{} 437 438 func (_this *StormTracker) Equals(other *StormTracker) bool { 439 return _this == other 440 } 441 442 func (_this *StormTracker) EqualsGeneric(x interface{}) bool { 443 other, ok := x.(*StormTracker) 444 return ok && _this.Equals(other) 445 } 446 447 func (*StormTracker) String() string { 448 return "StormTracker.StormTracker" 449 } 450 451 func Type_StormTracker_() _dafny.TypeDescriptor { 452 return type_StormTracker_{} 453 } 454 455 type type_StormTracker_ struct { 456 } 457 458 func (_this type_StormTracker_) Default() interface{} { 459 return (*StormTracker)(nil) 460 } 461 462 func (_this type_StormTracker_) String() string { 463 return "StormTracker.StormTracker" 464 } 465 func (_this *StormTracker) ParentTraits_() []*_dafny.TraitID { 466 return [](*_dafny.TraitID){} 467 } 468 469 var _ _dafny.TraitOffspring = &StormTracker{} 470 471 func (_this *StormTracker) Ctor__(cache m_AwsCryptographyMaterialProvidersTypes.StormTrackingCache) { 472 { 473 var _0_gracePeriod int64 = int64(0) 474 _ = _0_gracePeriod 475 var _1_graceInterval int64 = int64(0) 476 _ = _1_graceInterval 477 var _2_inFlightTTL int64 = int64(0) 478 _ = _2_inFlightTTL 479 if (((cache).Dtor_timeUnits()).UnwrapOr(m_AwsCryptographyMaterialProvidersTypes.Companion_TimeUnits_.Create_Seconds_()).(m_AwsCryptographyMaterialProvidersTypes.TimeUnits)).Is_Seconds() { 480 _0_gracePeriod = (int64((cache).Dtor_gracePeriod())) * (int64(1000)) 481 _1_graceInterval = (int64((cache).Dtor_graceInterval())) * (int64(1000)) 482 _2_inFlightTTL = (int64((cache).Dtor_inFlightTTL())) * (int64(1000)) 483 } else { 484 _0_gracePeriod = int64((cache).Dtor_gracePeriod()) 485 _1_graceInterval = int64((cache).Dtor_graceInterval()) 486 _2_inFlightTTL = int64((cache).Dtor_inFlightTTL()) 487 } 488 var _nw0 *m_LocalCMC.LocalCMC = m_LocalCMC.New_LocalCMC_() 489 _ = _nw0 490 _nw0.Ctor__(_dafny.IntOfInt32((cache).Dtor_entryCapacity()), _dafny.IntOfInt32(((cache).Dtor_entryPruningTailSize()).UnwrapOr(int32(1)).(int32))) 491 (_this).Wrapped = _nw0 492 var _nw1 *m_DafnyLibraries.MutableMap = m_DafnyLibraries.New_MutableMap_() 493 _ = _nw1 494 (_this).InFlight = _nw1 495 (_this).GracePeriod = _0_gracePeriod 496 (_this).GraceInterval = _1_graceInterval 497 (_this).FanOut = int64((cache).Dtor_fanOut()) 498 (_this).InFlightTTL = _2_inFlightTTL 499 (_this).SleepMilli = int64((cache).Dtor_sleepMilli()) 500 (_this).LastPrune = int64(0) 501 } 502 } 503 func (_this *StormTracker) FanOutReached(now int64) bool { 504 { 505 var res bool = false 506 _ = res 507 (_this).PruneInFlight(now) 508 res = (_this.FanOut) <= (((_this.InFlight).Size()).Int64()) 509 return res 510 return res 511 } 512 } 513 func (_this *StormTracker) AddLong(x int64, y int64) int64 { 514 { 515 if (x) < (((m_StandardLibrary_UInt.Companion_Default___.INT64__MAX__LIMIT()).Int64()) - (y)) { 516 return (x) + (y) 517 } else { 518 return (m_StandardLibrary_UInt.Companion_Default___.INT64__MAX__LIMIT()).Int64() 519 } 520 } 521 } 522 func (_this *StormTracker) GracePeriod_q(result m_AwsCryptographyMaterialProvidersTypes.GetCacheEntryOutput, now int64) bool { 523 { 524 return (((result).Dtor_expiryTime()) < (int64(9223372036854775))) && (((((result).Dtor_expiryTime()) * (int64(1000))) - (_this.GracePeriod)) <= (now)) 525 } 526 } 527 func (_this *StormTracker) CheckInFlight(identifier _dafny.Sequence, result m_AwsCryptographyMaterialProvidersTypes.GetCacheEntryOutput, now int64) CacheState { 528 { 529 var output CacheState = Companion_CacheState_.Default() 530 _ = output 531 var _0_fanOutReached bool 532 _ = _0_fanOutReached 533 var _out0 bool 534 _ = _out0 535 _out0 = (_this).FanOutReached(now) 536 _0_fanOutReached = _out0 537 if _0_fanOutReached { 538 output = Companion_CacheState_.Create_Full_(result) 539 return output 540 } else if !((_this).GracePeriod_q(result, now)) { 541 output = Companion_CacheState_.Create_Full_(result) 542 return output 543 } else { 544 if (_this.InFlight).HasKey(identifier) { 545 var _1_entry int64 546 _ = _1_entry 547 _1_entry = (_this.InFlight).Select(identifier).(int64) 548 if ((_this).AddLong(_1_entry, _this.GraceInterval)) > (now) { 549 output = Companion_CacheState_.Create_Full_(result) 550 return output 551 } 552 } 553 (_this.InFlight).Put(identifier, now) 554 output = Companion_CacheState_.Create_EmptyFetch_() 555 return output 556 } 557 return output 558 } 559 } 560 func (_this *StormTracker) PruneInFlight(now int64) { 561 { 562 if (((_this.InFlight).Size()).Int64()) < (_this.FanOut) { 563 return 564 } 565 if ((now) - (int64(1000))) < (_this.LastPrune) { 566 return 567 } 568 (_this).LastPrune = now 569 var _0_keySet _dafny.Set 570 _ = _0_keySet 571 _0_keySet = (_this.InFlight).Keys() 572 var _1_keys _dafny.Sequence 573 _ = _1_keys 574 var _out0 _dafny.Sequence 575 _ = _out0 576 _out0 = m_SortedSets.SetToSequence(_0_keySet) 577 _1_keys = _out0 578 var _hi0 _dafny.Int = _dafny.IntOfUint32((_1_keys).Cardinality()) 579 _ = _hi0 580 for _2_i := _dafny.Zero; _2_i.Cmp(_hi0) < 0; _2_i = _2_i.Plus(_dafny.One) { 581 var _3_v int64 582 _ = _3_v 583 _3_v = (_this.InFlight).Select((_1_keys).Select((_2_i).Uint32()).(_dafny.Sequence)).(int64) 584 if (now) >= ((_this).AddLong(_3_v, _this.InFlightTTL)) { 585 (_this.InFlight).Remove((_1_keys).Select((_2_i).Uint32()).(_dafny.Sequence)) 586 } 587 } 588 } 589 } 590 func (_this *StormTracker) CheckNewEntry(identifier _dafny.Sequence, now int64) CacheState { 591 { 592 var output CacheState = Companion_CacheState_.Default() 593 _ = output 594 var _0_fanOutReached bool 595 _ = _0_fanOutReached 596 var _out0 bool 597 _ = _out0 598 _out0 = (_this).FanOutReached(now) 599 _0_fanOutReached = _out0 600 if _0_fanOutReached { 601 output = Companion_CacheState_.Create_EmptyWait_() 602 return output 603 } else if (_this.InFlight).HasKey(identifier) { 604 var _1_entry int64 605 _ = _1_entry 606 _1_entry = (_this.InFlight).Select(identifier).(int64) 607 if (now) < ((_this).AddLong(_1_entry, _this.GraceInterval)) { 608 output = Companion_CacheState_.Create_EmptyWait_() 609 return output 610 } 611 } 612 (_this.InFlight).Put(identifier, now) 613 output = Companion_CacheState_.Create_EmptyFetch_() 614 return output 615 return output 616 } 617 } 618 func (_this *StormTracker) GetFromCacheWithTime(input m_AwsCryptographyMaterialProvidersTypes.GetCacheEntryInput, now int64) m_Wrappers.Result { 619 { 620 var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(Companion_CacheState_.Default()) 621 _ = output 622 var _0_result m_Wrappers.Result 623 _ = _0_result 624 var _out0 m_Wrappers.Result 625 _ = _out0 626 _out0 = (_this.Wrapped).GetCacheEntryWithTime(input, _dafny.DivInt64(now, int64(1000))) 627 _0_result = _out0 628 if (_0_result).Is_Success() { 629 var _1_newResult CacheState 630 _ = _1_newResult 631 var _out1 CacheState 632 _ = _out1 633 _out1 = (_this).CheckInFlight((input).Dtor_identifier(), (_0_result).Dtor_value().(m_AwsCryptographyMaterialProvidersTypes.GetCacheEntryOutput), now) 634 _1_newResult = _out1 635 output = m_Wrappers.Companion_Result_.Create_Success_(_1_newResult) 636 return output 637 } else if ((_0_result).Dtor_error().(m_AwsCryptographyMaterialProvidersTypes.Error)).Is_EntryDoesNotExist() { 638 var _2_newResult CacheState 639 _ = _2_newResult 640 var _out2 CacheState 641 _ = _out2 642 _out2 = (_this).CheckNewEntry((input).Dtor_identifier(), now) 643 _2_newResult = _out2 644 output = m_Wrappers.Companion_Result_.Create_Success_(_2_newResult) 645 return output 646 } else { 647 output = m_Wrappers.Companion_Result_.Create_Failure_((_0_result).Dtor_error().(m_AwsCryptographyMaterialProvidersTypes.Error)) 648 return output 649 } 650 return output 651 } 652 } 653 func (_this *StormTracker) GetFromCache(input m_AwsCryptographyMaterialProvidersTypes.GetCacheEntryInput) m_Wrappers.Result { 654 { 655 var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(Companion_CacheState_.Default()) 656 _ = output 657 var _0_now int64 658 _ = _0_now 659 var _out0 int64 660 _ = _out0 661 _out0 = m__Time.CurrentRelativeTimeMilli() 662 _0_now = _out0 663 var _out1 m_Wrappers.Result 664 _ = _out1 665 _out1 = (_this).GetFromCacheWithTime(input, _0_now) 666 output = _out1 667 return output 668 } 669 } 670 func (_this *StormTracker) GetCacheEntry(input m_AwsCryptographyMaterialProvidersTypes.GetCacheEntryInput) m_Wrappers.Result { 671 { 672 var output m_Wrappers.Result = m_Wrappers.Result{} 673 _ = output 674 var _0_result m_Wrappers.Result 675 _ = _0_result 676 var _out0 m_Wrappers.Result 677 _ = _out0 678 _out0 = (_this).GetFromCache(input) 679 _0_result = _out0 680 if (_0_result).Is_Failure() { 681 output = m_Wrappers.Companion_Result_.Create_Failure_((_0_result).Dtor_error().(m_AwsCryptographyMaterialProvidersTypes.Error)) 682 return output 683 } else if ((_0_result).Dtor_value().(CacheState)).Is_Full() { 684 output = m_Wrappers.Companion_Result_.Create_Success_(((_0_result).Dtor_value().(CacheState)).Dtor_data()) 685 return output 686 } else { 687 output = m_Wrappers.Companion_Result_.Create_Failure_(m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_EntryDoesNotExist_(_dafny.SeqOfString("Entry does not exist"))) 688 return output 689 } 690 return output 691 } 692 } 693 func (_this *StormTracker) PutCacheEntry(input m_AwsCryptographyMaterialProvidersTypes.PutCacheEntryInput) m_Wrappers.Result { 694 { 695 var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf()) 696 _ = output 697 (_this.InFlight).Remove((input).Dtor_identifier()) 698 var _out0 m_Wrappers.Result 699 _ = _out0 700 _out0 = (_this.Wrapped).PutCacheEntry_k(input) 701 output = _out0 702 return output 703 } 704 } 705 func (_this *StormTracker) DeleteCacheEntry(input m_AwsCryptographyMaterialProvidersTypes.DeleteCacheEntryInput) m_Wrappers.Result { 706 { 707 var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf()) 708 _ = output 709 (_this.InFlight).Remove((input).Dtor_identifier()) 710 var _out0 m_Wrappers.Result 711 _ = _out0 712 _out0 = (_this.Wrapped).DeleteCacheEntry_k(input) 713 output = _out0 714 return output 715 } 716 } 717 func (_this *StormTracker) UpdateUsageMetadata(input m_AwsCryptographyMaterialProvidersTypes.UpdateUsageMetadataInput) m_Wrappers.Result { 718 { 719 var output m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.TupleOf()) 720 _ = output 721 var _out0 m_Wrappers.Result 722 _ = _out0 723 _out0 = (_this.Wrapped).UpdateUsageMetadata_k(input) 724 output = _out0 725 return output 726 } 727 } 728 729 // End of class StormTracker