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

     1  // Package EcdhEdkWrapping
     2  // Dafny module EcdhEdkWrapping compiled into Go
     3  
     4  package EcdhEdkWrapping
     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_AwsKmsHierarchicalKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsHierarchicalKeyring"
    20  	m_AwsKmsKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsKeyring"
    21  	m_AwsKmsMrkAreUnique "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkAreUnique"
    22  	m_AwsKmsMrkDiscoveryKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkDiscoveryKeyring"
    23  	m_AwsKmsMrkKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkKeyring"
    24  	m_AwsKmsMrkMatchForDecrypt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsMrkMatchForDecrypt"
    25  	m_AwsKmsRsaKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsRsaKeyring"
    26  	m_AwsKmsUtils "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/AwsKmsUtils"
    27  	m_CacheConstants "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CacheConstants"
    28  	m_CanonicalEncryptionContext "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CanonicalEncryptionContext"
    29  	m_Constants "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Constants"
    30  	m_CreateKeyStoreTable "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeyStoreTable"
    31  	m_CreateKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/CreateKeys"
    32  	m_DDBKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DDBKeystoreOperations"
    33  	m_DiscoveryMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/DiscoveryMultiKeyring"
    34  	m_EdkWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/EdkWrapping"
    35  	m_ErrorMessages "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/ErrorMessages"
    36  	m_GetKeys "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/GetKeys"
    37  	m_IntermediateKeyWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/IntermediateKeyWrapping"
    38  	m_KMSKeystoreOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KMSKeystoreOperations"
    39  	m_KeyStore "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KeyStore"
    40  	m_KeyStoreErrorMessages "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KeyStoreErrorMessages"
    41  	m_Keyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Keyring"
    42  	m_KmsArn "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/KmsArn"
    43  	m_LocalCMC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/LocalCMC"
    44  	m_MaterialWrapping "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MaterialWrapping"
    45  	m_Materials "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Materials"
    46  	m_MrkAwareDiscoveryMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MrkAwareDiscoveryMultiKeyring"
    47  	m_MrkAwareStrictMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MrkAwareStrictMultiKeyring"
    48  	m_MultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/MultiKeyring"
    49  	m_StormTracker "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/StormTracker"
    50  	m_StormTrackingCMC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/StormTrackingCMC"
    51  	m_StrictMultiKeyring "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/StrictMultiKeyring"
    52  	m_Structure "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/Structure"
    53  	m_SynchronizedLocalCMC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/SynchronizedLocalCMC"
    54  	m_AtomicPrimitives "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AtomicPrimitives"
    55  	m_AwsCryptographyPrimitivesOperations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesOperations"
    56  	m_AwsCryptographyPrimitivesTypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/AwsCryptographyPrimitivesTypes"
    57  	m_Digest "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Digest"
    58  	m_HKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/HKDF"
    59  	m_KdfCtr "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/KdfCtr"
    60  	m_Random "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/Random"
    61  	m_WrappedHKDF "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHKDF"
    62  	m_WrappedHMAC "github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives/WrappedHMAC"
    63  	m_Actions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Actions"
    64  	m_Base64 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64"
    65  	m_Base64Lemmas "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Base64Lemmas"
    66  	m_BoundedInts "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/BoundedInts"
    67  	m_DivInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternals"
    68  	m_DivInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivInternalsNonlinear"
    69  	m_DivMod "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/DivMod"
    70  	m_FileIO "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FileIO"
    71  	m_FloatCompare "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/FloatCompare"
    72  	m_Functions "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Functions"
    73  	m_GeneralInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GeneralInternals"
    74  	m_GetOpt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/GetOpt"
    75  	m_HexStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/HexStrings"
    76  	m_Logarithm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Logarithm"
    77  	m__Math "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Math_"
    78  	m_ModInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternals"
    79  	m_ModInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/ModInternalsNonlinear"
    80  	m_Mul "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Mul"
    81  	m_MulInternals "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternals"
    82  	m_MulInternalsNonlinear "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/MulInternalsNonlinear"
    83  	m_Power "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Power"
    84  	m_Relations "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Relations"
    85  	m_Seq "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq"
    86  	m_Seq_MergeSort "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Seq_MergeSort"
    87  	m_Sorting "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Sorting"
    88  	m_StandardLibrary "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary"
    89  	m_StandardLibraryInterop "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibraryInterop"
    90  	m_StandardLibrary_Sequence "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_Sequence"
    91  	m_StandardLibrary_String "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_String"
    92  	m_StandardLibrary_UInt "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/StandardLibrary_UInt"
    93  	m_Streams "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Streams"
    94  	m_UTF8 "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UTF8"
    95  	m_UnicodeStrings "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/UnicodeStrings"
    96  	m__Unicode "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Unicode_"
    97  	m_Utf16EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf16EncodingForm"
    98  	m_Utf8EncodingForm "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Utf8EncodingForm"
    99  	m_Wrappers "github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library/Wrappers"
   100  	m__System "github.com/dafny-lang/DafnyRuntimeGo/v4/System_"
   101  	_dafny "github.com/dafny-lang/DafnyRuntimeGo/v4/dafny"
   102  )
   103  
   104  var _ = os.Args
   105  var _ _dafny.Dummy__
   106  var _ m__System.Dummy__
   107  var _ m_Wrappers.Dummy__
   108  var _ m_BoundedInts.Dummy__
   109  var _ m_StandardLibrary_UInt.Dummy__
   110  var _ m_StandardLibrary_Sequence.Dummy__
   111  var _ m_StandardLibrary_String.Dummy__
   112  var _ m_StandardLibrary.Dummy__
   113  var _ m_AwsCryptographyPrimitivesTypes.Dummy__
   114  var _ m_Random.Dummy__
   115  var _ m_Digest.Dummy__
   116  var _ m_WrappedHMAC.Dummy__
   117  var _ m_HKDF.Dummy__
   118  var _ m_WrappedHKDF.Dummy__
   119  var _ m_KdfCtr.Dummy__
   120  var _ m_AwsCryptographyPrimitivesOperations.Dummy__
   121  var _ m_AtomicPrimitives.Dummy__
   122  var _ m_ComAmazonawsDynamodbTypes.Dummy__
   123  var _ m_ComAmazonawsKmsTypes.Dummy__
   124  var _ m_Relations.Dummy__
   125  var _ m_Seq_MergeSort.Dummy__
   126  var _ m__Math.Dummy__
   127  var _ m_Seq.Dummy__
   128  var _ m__Unicode.Dummy__
   129  var _ m_Functions.Dummy__
   130  var _ m_Utf8EncodingForm.Dummy__
   131  var _ m_Utf16EncodingForm.Dummy__
   132  var _ m_UnicodeStrings.Dummy__
   133  var _ m_FileIO.Dummy__
   134  var _ m_GeneralInternals.Dummy__
   135  var _ m_MulInternalsNonlinear.Dummy__
   136  var _ m_MulInternals.Dummy__
   137  var _ m_Mul.Dummy__
   138  var _ m_ModInternalsNonlinear.Dummy__
   139  var _ m_DivInternalsNonlinear.Dummy__
   140  var _ m_ModInternals.Dummy__
   141  var _ m_DivInternals.Dummy__
   142  var _ m_DivMod.Dummy__
   143  var _ m_Power.Dummy__
   144  var _ m_Logarithm.Dummy__
   145  var _ m_StandardLibraryInterop.Dummy__
   146  var _ m_Streams.Dummy__
   147  var _ m_Sorting.Dummy__
   148  var _ m_HexStrings.Dummy__
   149  var _ m_GetOpt.Dummy__
   150  var _ m_FloatCompare.Dummy__
   151  var _ m_Base64.Dummy__
   152  var _ m_Base64Lemmas.Dummy__
   153  var _ m_Actions.Dummy__
   154  var _ m_AwsCryptographyKeyStoreTypes.Dummy__
   155  var _ m_AwsCryptographyMaterialProvidersTypes.Dummy__
   156  var _ m_AwsArnParsing.Dummy__
   157  var _ m_AwsKmsMrkMatchForDecrypt.Dummy__
   158  var _ m_AwsKmsUtils.Dummy__
   159  var _ m_KeyStoreErrorMessages.Dummy__
   160  var _ m_KmsArn.Dummy__
   161  var _ m_Structure.Dummy__
   162  var _ m_KMSKeystoreOperations.Dummy__
   163  var _ m_DDBKeystoreOperations.Dummy__
   164  var _ m_CreateKeys.Dummy__
   165  var _ m_CreateKeyStoreTable.Dummy__
   166  var _ m_GetKeys.Dummy__
   167  var _ m_AwsCryptographyKeyStoreOperations.Dummy__
   168  var _ m_Com_Amazonaws_Kms.Dummy__
   169  var _ m_Com_Amazonaws_Dynamodb.Dummy__
   170  var _ m_KeyStore.Dummy__
   171  var _ m_AlgorithmSuites.Dummy__
   172  var _ m_Materials.Dummy__
   173  var _ m_Keyring.Dummy__
   174  var _ m_MultiKeyring.Dummy__
   175  var _ m_AwsKmsMrkAreUnique.Dummy__
   176  var _ m_Constants.Dummy__
   177  var _ m_MaterialWrapping.Dummy__
   178  var _ m_CanonicalEncryptionContext.Dummy__
   179  var _ m_IntermediateKeyWrapping.Dummy__
   180  var _ m_EdkWrapping.Dummy__
   181  var _ m_ErrorMessages.Dummy__
   182  var _ m_AwsKmsKeyring.Dummy__
   183  var _ m_StrictMultiKeyring.Dummy__
   184  var _ m_AwsKmsDiscoveryKeyring.Dummy__
   185  var _ m_DiscoveryMultiKeyring.Dummy__
   186  var _ m_AwsKmsMrkDiscoveryKeyring.Dummy__
   187  var _ m_MrkAwareDiscoveryMultiKeyring.Dummy__
   188  var _ m_AwsKmsMrkKeyring.Dummy__
   189  var _ m_MrkAwareStrictMultiKeyring.Dummy__
   190  var _ m_LocalCMC.Dummy__
   191  var _ m_SynchronizedLocalCMC.Dummy__
   192  var _ m_StormTracker.Dummy__
   193  var _ m_StormTrackingCMC.Dummy__
   194  var _ m_CacheConstants.Dummy__
   195  var _ m_AwsKmsHierarchicalKeyring.Dummy__
   196  var _ m_AwsKmsRsaKeyring.Dummy__
   197  
   198  type Dummy__ struct{}
   199  
   200  // Definition of class Default__
   201  type Default__ struct {
   202  	dummy byte
   203  }
   204  
   205  func New_Default___() *Default__ {
   206  	_this := Default__{}
   207  
   208  	return &_this
   209  }
   210  
   211  type CompanionStruct_Default___ struct {
   212  }
   213  
   214  var Companion_Default___ = CompanionStruct_Default___{}
   215  
   216  func (_this *Default__) Equals(other *Default__) bool {
   217  	return _this == other
   218  }
   219  
   220  func (_this *Default__) EqualsGeneric(x interface{}) bool {
   221  	other, ok := x.(*Default__)
   222  	return ok && _this.Equals(other)
   223  }
   224  
   225  func (*Default__) String() string {
   226  	return "EcdhEdkWrapping.Default__"
   227  }
   228  func (_this *Default__) ParentTraits_() []*_dafny.TraitID {
   229  	return [](*_dafny.TraitID){}
   230  }
   231  
   232  var _ _dafny.TraitOffspring = &Default__{}
   233  
   234  func (_static *CompanionStruct_Default___) DeriveSharedKeyingMaterial(sharedSecret _dafny.Sequence, fixedInfo _dafny.Sequence, salt _dafny.Sequence, crypto *m_AtomicPrimitives.AtomicPrimitivesClient) m_Wrappers.Result {
   235  	var res m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   236  	_ = res
   237  	var _0_maybeDerivedKeyingMaterial m_Wrappers.Result
   238  	_ = _0_maybeDerivedKeyingMaterial
   239  	var _out0 m_Wrappers.Result
   240  	_ = _out0
   241  	_out0 = (crypto).KdfCounterMode(m_AwsCryptographyPrimitivesTypes.Companion_KdfCtrInput_.Create_KdfCtrInput_(m_AwsCryptographyPrimitivesTypes.Companion_DigestAlgorithm_.Create_SHA__384_(), sharedSecret, m_Constants.Companion_Default___.KDF__EXPECTED__LEN(), m_Wrappers.Companion_Option_.Create_Some_(fixedInfo), m_Wrappers.Companion_Option_.Create_Some_(salt)))
   242  	_0_maybeDerivedKeyingMaterial = _out0
   243  	var _1_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   244  	_ = _1_valueOrError0
   245  	_1_valueOrError0 = (_0_maybeDerivedKeyingMaterial).MapFailure(func(coer102 func(m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
   246  		return func(arg103 interface{}) interface{} {
   247  			return coer102(arg103.(m_AwsCryptographyPrimitivesTypes.Error))
   248  		}
   249  	}(func(_2_e m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error {
   250  		return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographyPrimitives_(_2_e)
   251  	}))
   252  	if (_1_valueOrError0).IsFailure() {
   253  		res = (_1_valueOrError0).PropagateFailure()
   254  		return res
   255  	}
   256  	var _3_derivedKeyingMaterial _dafny.Sequence
   257  	_ = _3_derivedKeyingMaterial
   258  	_3_derivedKeyingMaterial = (_1_valueOrError0).Extract().(_dafny.Sequence)
   259  	res = m_Wrappers.Companion_Result_.Create_Success_(_3_derivedKeyingMaterial)
   260  	return res
   261  }
   262  func (_static *CompanionStruct_Default___) SerializeFixedInfo(ecdhKeyDerivationUtf8 _dafny.Sequence, curveSpecUtf8 _dafny.Sequence, senderPublicKey _dafny.Sequence, recipientPublicKey _dafny.Sequence, canonicalizedEC _dafny.Sequence, keyringVersion _dafny.Sequence) _dafny.Sequence {
   263  	return _dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(ecdhKeyDerivationUtf8, m_Constants.Companion_Default___.ECDH__KDF__DELIMETER()), curveSpecUtf8), m_Constants.Companion_Default___.ECDH__KDF__DELIMETER()), m_Constants.Companion_Default___.ECDH__KDF__PRF__NAME()), m_Constants.Companion_Default___.ECDH__KDF__DELIMETER()), senderPublicKey), recipientPublicKey), m_Constants.Companion_Default___.ECDH__KDF__DELIMETER()), keyringVersion), m_Constants.Companion_Default___.ECDH__KDF__DELIMETER()), canonicalizedEC)
   264  }
   265  func (_static *CompanionStruct_Default___) CurveSpecTypeToString(c m_AwsCryptographyPrimitivesTypes.ECDHCurveSpec) _dafny.Sequence {
   266  	var _source0 m_AwsCryptographyPrimitivesTypes.ECDHCurveSpec = c
   267  	_ = _source0
   268  	{
   269  		if _source0.Is_ECC__NIST__P256() {
   270  			return _dafny.SeqOfString("p256")
   271  		}
   272  	}
   273  	{
   274  		if _source0.Is_ECC__NIST__P384() {
   275  			return _dafny.SeqOfString("p384")
   276  		}
   277  	}
   278  	{
   279  		if _source0.Is_ECC__NIST__P521() {
   280  			return _dafny.SeqOfString("p521")
   281  		}
   282  	}
   283  	{
   284  		return _dafny.SeqOfString("sm2")
   285  	}
   286  }
   287  func (_static *CompanionStruct_Default___) E(s _dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error {
   288  	return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(s)
   289  }
   290  
   291  // End of class Default__
   292  
   293  // Definition of datatype EcdhUnwrapInfo
   294  type EcdhUnwrapInfo struct {
   295  	Data_EcdhUnwrapInfo_
   296  }
   297  
   298  func (_this EcdhUnwrapInfo) Get_() Data_EcdhUnwrapInfo_ {
   299  	return _this.Data_EcdhUnwrapInfo_
   300  }
   301  
   302  type Data_EcdhUnwrapInfo_ interface {
   303  	isEcdhUnwrapInfo()
   304  }
   305  
   306  type CompanionStruct_EcdhUnwrapInfo_ struct {
   307  }
   308  
   309  var Companion_EcdhUnwrapInfo_ = CompanionStruct_EcdhUnwrapInfo_{}
   310  
   311  type EcdhUnwrapInfo_EcdhUnwrapInfo struct {
   312  }
   313  
   314  func (EcdhUnwrapInfo_EcdhUnwrapInfo) isEcdhUnwrapInfo() {}
   315  
   316  func (CompanionStruct_EcdhUnwrapInfo_) Create_EcdhUnwrapInfo_() EcdhUnwrapInfo {
   317  	return EcdhUnwrapInfo{EcdhUnwrapInfo_EcdhUnwrapInfo{}}
   318  }
   319  
   320  func (_this EcdhUnwrapInfo) Is_EcdhUnwrapInfo() bool {
   321  	_, ok := _this.Get_().(EcdhUnwrapInfo_EcdhUnwrapInfo)
   322  	return ok
   323  }
   324  
   325  func (CompanionStruct_EcdhUnwrapInfo_) Default() EcdhUnwrapInfo {
   326  	return Companion_EcdhUnwrapInfo_.Create_EcdhUnwrapInfo_()
   327  }
   328  
   329  func (_ CompanionStruct_EcdhUnwrapInfo_) AllSingletonConstructors() _dafny.Iterator {
   330  	i := -1
   331  	return func() (interface{}, bool) {
   332  		i++
   333  		switch i {
   334  		case 0:
   335  			return Companion_EcdhUnwrapInfo_.Create_EcdhUnwrapInfo_(), true
   336  		default:
   337  			return EcdhUnwrapInfo{}, false
   338  		}
   339  	}
   340  }
   341  
   342  func (_this EcdhUnwrapInfo) String() string {
   343  	switch _this.Get_().(type) {
   344  	case nil:
   345  		return "null"
   346  	case EcdhUnwrapInfo_EcdhUnwrapInfo:
   347  		{
   348  			return "EcdhEdkWrapping.EcdhUnwrapInfo.EcdhUnwrapInfo"
   349  		}
   350  	default:
   351  		{
   352  			return "<unexpected>"
   353  		}
   354  	}
   355  }
   356  
   357  func (_this EcdhUnwrapInfo) Equals(other EcdhUnwrapInfo) bool {
   358  	switch _this.Get_().(type) {
   359  	case EcdhUnwrapInfo_EcdhUnwrapInfo:
   360  		{
   361  			_, ok := other.Get_().(EcdhUnwrapInfo_EcdhUnwrapInfo)
   362  			return ok
   363  		}
   364  	default:
   365  		{
   366  			return false // unexpected
   367  		}
   368  	}
   369  }
   370  
   371  func (_this EcdhUnwrapInfo) EqualsGeneric(other interface{}) bool {
   372  	typed, ok := other.(EcdhUnwrapInfo)
   373  	return ok && _this.Equals(typed)
   374  }
   375  
   376  func Type_EcdhUnwrapInfo_() _dafny.TypeDescriptor {
   377  	return type_EcdhUnwrapInfo_{}
   378  }
   379  
   380  type type_EcdhUnwrapInfo_ struct {
   381  }
   382  
   383  func (_this type_EcdhUnwrapInfo_) Default() interface{} {
   384  	return Companion_EcdhUnwrapInfo_.Default()
   385  }
   386  
   387  func (_this type_EcdhUnwrapInfo_) String() string {
   388  	return "EcdhEdkWrapping.EcdhUnwrapInfo"
   389  }
   390  func (_this EcdhUnwrapInfo) ParentTraits_() []*_dafny.TraitID {
   391  	return [](*_dafny.TraitID){}
   392  }
   393  
   394  var _ _dafny.TraitOffspring = EcdhUnwrapInfo{}
   395  
   396  // End of datatype EcdhUnwrapInfo
   397  
   398  // Definition of datatype EcdhWrapInfo
   399  type EcdhWrapInfo struct {
   400  	Data_EcdhWrapInfo_
   401  }
   402  
   403  func (_this EcdhWrapInfo) Get_() Data_EcdhWrapInfo_ {
   404  	return _this.Data_EcdhWrapInfo_
   405  }
   406  
   407  type Data_EcdhWrapInfo_ interface {
   408  	isEcdhWrapInfo()
   409  }
   410  
   411  type CompanionStruct_EcdhWrapInfo_ struct {
   412  }
   413  
   414  var Companion_EcdhWrapInfo_ = CompanionStruct_EcdhWrapInfo_{}
   415  
   416  type EcdhWrapInfo_EcdhWrapInfo struct {
   417  }
   418  
   419  func (EcdhWrapInfo_EcdhWrapInfo) isEcdhWrapInfo() {}
   420  
   421  func (CompanionStruct_EcdhWrapInfo_) Create_EcdhWrapInfo_() EcdhWrapInfo {
   422  	return EcdhWrapInfo{EcdhWrapInfo_EcdhWrapInfo{}}
   423  }
   424  
   425  func (_this EcdhWrapInfo) Is_EcdhWrapInfo() bool {
   426  	_, ok := _this.Get_().(EcdhWrapInfo_EcdhWrapInfo)
   427  	return ok
   428  }
   429  
   430  func (CompanionStruct_EcdhWrapInfo_) Default() EcdhWrapInfo {
   431  	return Companion_EcdhWrapInfo_.Create_EcdhWrapInfo_()
   432  }
   433  
   434  func (_ CompanionStruct_EcdhWrapInfo_) AllSingletonConstructors() _dafny.Iterator {
   435  	i := -1
   436  	return func() (interface{}, bool) {
   437  		i++
   438  		switch i {
   439  		case 0:
   440  			return Companion_EcdhWrapInfo_.Create_EcdhWrapInfo_(), true
   441  		default:
   442  			return EcdhWrapInfo{}, false
   443  		}
   444  	}
   445  }
   446  
   447  func (_this EcdhWrapInfo) String() string {
   448  	switch _this.Get_().(type) {
   449  	case nil:
   450  		return "null"
   451  	case EcdhWrapInfo_EcdhWrapInfo:
   452  		{
   453  			return "EcdhEdkWrapping.EcdhWrapInfo.EcdhWrapInfo"
   454  		}
   455  	default:
   456  		{
   457  			return "<unexpected>"
   458  		}
   459  	}
   460  }
   461  
   462  func (_this EcdhWrapInfo) Equals(other EcdhWrapInfo) bool {
   463  	switch _this.Get_().(type) {
   464  	case EcdhWrapInfo_EcdhWrapInfo:
   465  		{
   466  			_, ok := other.Get_().(EcdhWrapInfo_EcdhWrapInfo)
   467  			return ok
   468  		}
   469  	default:
   470  		{
   471  			return false // unexpected
   472  		}
   473  	}
   474  }
   475  
   476  func (_this EcdhWrapInfo) EqualsGeneric(other interface{}) bool {
   477  	typed, ok := other.(EcdhWrapInfo)
   478  	return ok && _this.Equals(typed)
   479  }
   480  
   481  func Type_EcdhWrapInfo_() _dafny.TypeDescriptor {
   482  	return type_EcdhWrapInfo_{}
   483  }
   484  
   485  type type_EcdhWrapInfo_ struct {
   486  }
   487  
   488  func (_this type_EcdhWrapInfo_) Default() interface{} {
   489  	return Companion_EcdhWrapInfo_.Default()
   490  }
   491  
   492  func (_this type_EcdhWrapInfo_) String() string {
   493  	return "EcdhEdkWrapping.EcdhWrapInfo"
   494  }
   495  func (_this EcdhWrapInfo) ParentTraits_() []*_dafny.TraitID {
   496  	return [](*_dafny.TraitID){}
   497  }
   498  
   499  var _ _dafny.TraitOffspring = EcdhWrapInfo{}
   500  
   501  // End of datatype EcdhWrapInfo
   502  
   503  // Definition of class EcdhUnwrap
   504  type EcdhUnwrap struct {
   505  	_senderPublicKey    _dafny.Sequence
   506  	_recipientPublicKey _dafny.Sequence
   507  	_sharedSecret       _dafny.Sequence
   508  	_keyringVersion     _dafny.Sequence
   509  	_curveSpec          m_AwsCryptographyPrimitivesTypes.ECDHCurveSpec
   510  	_crypto             *m_AtomicPrimitives.AtomicPrimitivesClient
   511  }
   512  
   513  func New_EcdhUnwrap_() *EcdhUnwrap {
   514  	_this := EcdhUnwrap{}
   515  
   516  	_this._senderPublicKey = _dafny.EmptySeq
   517  	_this._recipientPublicKey = _dafny.EmptySeq
   518  	_this._sharedSecret = _dafny.EmptySeq
   519  	_this._keyringVersion = _dafny.EmptySeq
   520  	_this._curveSpec = m_AwsCryptographyPrimitivesTypes.Companion_ECDHCurveSpec_.Default()
   521  	_this._crypto = (*m_AtomicPrimitives.AtomicPrimitivesClient)(nil)
   522  	return &_this
   523  }
   524  
   525  type CompanionStruct_EcdhUnwrap_ struct {
   526  }
   527  
   528  var Companion_EcdhUnwrap_ = CompanionStruct_EcdhUnwrap_{}
   529  
   530  func (_this *EcdhUnwrap) Equals(other *EcdhUnwrap) bool {
   531  	return _this == other
   532  }
   533  
   534  func (_this *EcdhUnwrap) EqualsGeneric(x interface{}) bool {
   535  	other, ok := x.(*EcdhUnwrap)
   536  	return ok && _this.Equals(other)
   537  }
   538  
   539  func (*EcdhUnwrap) String() string {
   540  	return "EcdhEdkWrapping.EcdhUnwrap"
   541  }
   542  
   543  func Type_EcdhUnwrap_() _dafny.TypeDescriptor {
   544  	return type_EcdhUnwrap_{}
   545  }
   546  
   547  type type_EcdhUnwrap_ struct {
   548  }
   549  
   550  func (_this type_EcdhUnwrap_) Default() interface{} {
   551  	return (*EcdhUnwrap)(nil)
   552  }
   553  
   554  func (_this type_EcdhUnwrap_) String() string {
   555  	return "EcdhEdkWrapping.EcdhUnwrap"
   556  }
   557  func (_this *EcdhUnwrap) ParentTraits_() []*_dafny.TraitID {
   558  	return [](*_dafny.TraitID){m_MaterialWrapping.Companion_UnwrapMaterial_.TraitID_, m_Actions.Companion_ActionWithResult_.TraitID_, m_Actions.Companion_Action_.TraitID_}
   559  }
   560  
   561  var _ m_MaterialWrapping.UnwrapMaterial = &EcdhUnwrap{}
   562  var _ m_Actions.ActionWithResult = &EcdhUnwrap{}
   563  var _ m_Actions.Action = &EcdhUnwrap{}
   564  var _ _dafny.TraitOffspring = &EcdhUnwrap{}
   565  
   566  func (_this *EcdhUnwrap) Ctor__(senderPublicKey _dafny.Sequence, recipientPublicKey _dafny.Sequence, sharedSecret _dafny.Sequence, keyringVersion _dafny.Sequence, curveSpec m_AwsCryptographyPrimitivesTypes.ECDHCurveSpec, crypto *m_AtomicPrimitives.AtomicPrimitivesClient) {
   567  	{
   568  		(_this)._senderPublicKey = senderPublicKey
   569  		(_this)._recipientPublicKey = recipientPublicKey
   570  		(_this)._sharedSecret = sharedSecret
   571  		(_this)._keyringVersion = keyringVersion
   572  		(_this)._curveSpec = curveSpec
   573  		(_this)._crypto = crypto
   574  	}
   575  }
   576  func (_this *EcdhUnwrap) Invoke(input interface{}) interface{} {
   577  	{
   578  		var input m_MaterialWrapping.UnwrapInput = input.(m_MaterialWrapping.UnwrapInput)
   579  		_ = input
   580  		var res m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_MaterialWrapping.Companion_UnwrapOutput_.Default(Companion_EcdhUnwrapInfo_.Default()))
   581  		_ = res
   582  		var _0_suite m_AwsCryptographyMaterialProvidersTypes.AlgorithmSuiteInfo
   583  		_ = _0_suite
   584  		_0_suite = (input).Dtor_algorithmSuite()
   585  		var _1_wrappedMaterial _dafny.Sequence
   586  		_ = _1_wrappedMaterial
   587  		_1_wrappedMaterial = (input).Dtor_wrappedMaterial()
   588  		var _2_aad _dafny.Map
   589  		_ = _2_aad
   590  		_2_aad = (input).Dtor_encryptionContext()
   591  		var _3_valueOrError0 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   592  		_ = _3_valueOrError0
   593  		_3_valueOrError0 = m_Wrappers.Companion_Default___.Need((_dafny.IntOfUint32((_1_wrappedMaterial).Cardinality())).Cmp(m_Constants.Companion_Default___.CIPHERTEXT__WRAPPED__MATERIAL__INDEX()) > 0, Companion_Default___.E(_dafny.SeqOfString("Recieved ciphertext is shorter than expected.")))
   594  		if (_3_valueOrError0).IsFailure() {
   595  			res = (_3_valueOrError0).PropagateFailure()
   596  			return res
   597  		}
   598  		var _4_KeyLength _dafny.Int
   599  		_ = _4_KeyLength
   600  		_4_KeyLength = _dafny.IntOfInt32(m_AlgorithmSuites.Companion_Default___.GetEncryptKeyLength(_0_suite))
   601  		var _5_valueOrError1 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   602  		_ = _5_valueOrError1
   603  		_5_valueOrError1 = m_Wrappers.Companion_Default___.Need((_dafny.IntOfUint32((_1_wrappedMaterial).Cardinality())).Cmp((m_Constants.Companion_Default___.ECDH__WRAPPED__KEY__MATERIAL__INDEX()).Plus(_4_KeyLength)) > 0, m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Received EDK Ciphertext of incorrect length.")))
   604  		if (_5_valueOrError1).IsFailure() {
   605  			res = (_5_valueOrError1).PropagateFailure()
   606  			return res
   607  		}
   608  		var _6_kdfNonce _dafny.Sequence
   609  		_ = _6_kdfNonce
   610  		_6_kdfNonce = (_1_wrappedMaterial).Subsequence(0, (m_Constants.Companion_Default___.ECDH__COMMITMENT__KEY__INDEX()).Uint32())
   611  		var _7_iv _dafny.Sequence
   612  		_ = _7_iv
   613  		_7_iv = _dafny.SeqCreate((_dafny.IntOfInt32((m_Constants.Companion_Default___.ECDH__AES__256__ENC__ALG()).Dtor_ivLength())).Uint32(), func(coer103 func(_dafny.Int) uint8) func(_dafny.Int) interface{} {
   614  			return func(arg104 _dafny.Int) interface{} {
   615  				return coer103(arg104)
   616  			}
   617  		}(func(_8___v0 _dafny.Int) uint8 {
   618  			return uint8(0)
   619  		}))
   620  		var _9_commitmentKey _dafny.Sequence
   621  		_ = _9_commitmentKey
   622  		_9_commitmentKey = (_1_wrappedMaterial).Subsequence((m_Constants.Companion_Default___.ECDH__COMMITMENT__KEY__INDEX()).Uint32(), (m_Constants.Companion_Default___.ECDH__WRAPPED__KEY__MATERIAL__INDEX()).Uint32())
   623  		var _10_wrappedKey _dafny.Sequence
   624  		_ = _10_wrappedKey
   625  		_10_wrappedKey = (_1_wrappedMaterial).Subsequence((m_Constants.Companion_Default___.ECDH__WRAPPED__KEY__MATERIAL__INDEX()).Uint32(), ((m_Constants.Companion_Default___.ECDH__WRAPPED__KEY__MATERIAL__INDEX()).Plus(_4_KeyLength)).Uint32())
   626  		var _11_authTag _dafny.Sequence
   627  		_ = _11_authTag
   628  		_11_authTag = (_1_wrappedMaterial).Drop(((m_Constants.Companion_Default___.ECDH__WRAPPED__KEY__MATERIAL__INDEX()).Plus(_4_KeyLength)).Uint32())
   629  		var _12_valueOrError2 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_UTF8.Companion_ValidUTF8Bytes_.Witness())
   630  		_ = _12_valueOrError2
   631  		_12_valueOrError2 = (m_UTF8.Encode(Companion_Default___.CurveSpecTypeToString((_this).CurveSpec()))).MapFailure(func(coer104 func(_dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
   632  			return func(arg105 interface{}) interface{} {
   633  				return coer104(arg105.(_dafny.Sequence))
   634  			}
   635  		}(Companion_Default___.E))
   636  		if (_12_valueOrError2).IsFailure() {
   637  			res = (_12_valueOrError2).PropagateFailure()
   638  			return res
   639  		}
   640  		var _13_curveSpecUtf8 _dafny.Sequence
   641  		_ = _13_curveSpecUtf8
   642  		_13_curveSpecUtf8 = (_12_valueOrError2).Extract().(_dafny.Sequence)
   643  		var _14_valueOrError3 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   644  		_ = _14_valueOrError3
   645  		_14_valueOrError3 = m_CanonicalEncryptionContext.Companion_Default___.EncryptionContextToAAD((input).Dtor_encryptionContext())
   646  		if (_14_valueOrError3).IsFailure() {
   647  			res = (_14_valueOrError3).PropagateFailure()
   648  			return res
   649  		}
   650  		var _15_canonicalizedEC _dafny.Sequence
   651  		_ = _15_canonicalizedEC
   652  		_15_canonicalizedEC = (_14_valueOrError3).Extract().(_dafny.Sequence)
   653  		var _16_fixedInfo _dafny.Sequence
   654  		_ = _16_fixedInfo
   655  		_16_fixedInfo = Companion_Default___.SerializeFixedInfo(m_Constants.Companion_Default___.ECDH__KDF__UTF8(), _13_curveSpecUtf8, (_this).SenderPublicKey(), (_this).RecipientPublicKey(), _15_canonicalizedEC, (_this).KeyringVersion())
   656  		var _17_valueOrError4 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   657  		_ = _17_valueOrError4
   658  		var _out0 m_Wrappers.Result
   659  		_ = _out0
   660  		_out0 = Companion_Default___.DeriveSharedKeyingMaterial((_this).SharedSecret(), _16_fixedInfo, _6_kdfNonce, (_this).Crypto())
   661  		_17_valueOrError4 = _out0
   662  		if (_17_valueOrError4).IsFailure() {
   663  			res = (_17_valueOrError4).PropagateFailure()
   664  			return res
   665  		}
   666  		var _18_derivedKeyingMaterial _dafny.Sequence
   667  		_ = _18_derivedKeyingMaterial
   668  		_18_derivedKeyingMaterial = (_17_valueOrError4).Extract().(_dafny.Sequence)
   669  		var _19_calculatedCommitmentKey _dafny.Sequence
   670  		_ = _19_calculatedCommitmentKey
   671  		_19_calculatedCommitmentKey = (_18_derivedKeyingMaterial).Subsequence(0, 32)
   672  		var _20_sharedKeyingMaterial _dafny.Sequence
   673  		_ = _20_sharedKeyingMaterial
   674  		_20_sharedKeyingMaterial = (_18_derivedKeyingMaterial).Drop(32)
   675  		var _21_valueOrError5 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   676  		_ = _21_valueOrError5
   677  		_21_valueOrError5 = m_Wrappers.Companion_Default___.Need((_dafny.IntOfUint32((_19_calculatedCommitmentKey).Cardinality())).Cmp(_dafny.IntOfUint32((_9_commitmentKey).Cardinality())) == 0, Companion_Default___.E(_dafny.SeqOfString("Calculated commitment key length does NOT match expected commitment key length")))
   678  		if (_21_valueOrError5).IsFailure() {
   679  			res = (_21_valueOrError5).PropagateFailure()
   680  			return res
   681  		}
   682  		var _22_check_q bool
   683  		_ = _22_check_q
   684  		var _out1 bool
   685  		_ = _out1
   686  		_out1 = (_this).CommitmentKeyCheck(_19_calculatedCommitmentKey, _9_commitmentKey)
   687  		_22_check_q = _out1
   688  		var _23_valueOrError6 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   689  		_ = _23_valueOrError6
   690  		_23_valueOrError6 = m_Wrappers.Companion_Default___.Need(_22_check_q, Companion_Default___.E(_dafny.SeqOfString("Commitment keys do not match")))
   691  		if (_23_valueOrError6).IsFailure() {
   692  			res = (_23_valueOrError6).PropagateFailure()
   693  			return res
   694  		}
   695  		var _24_maybeUnwrappedPdk m_Wrappers.Result
   696  		_ = _24_maybeUnwrappedPdk
   697  		var _out2 m_Wrappers.Result
   698  		_ = _out2
   699  		_out2 = ((_this).Crypto()).AESDecrypt(m_AwsCryptographyPrimitivesTypes.Companion_AESDecryptInput_.Create_AESDecryptInput_(m_Constants.Companion_Default___.ECDH__AES__256__ENC__ALG(), _20_sharedKeyingMaterial, _10_wrappedKey, _11_authTag, _7_iv, _16_fixedInfo))
   700  		_24_maybeUnwrappedPdk = _out2
   701  		var _25_valueOrError7 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   702  		_ = _25_valueOrError7
   703  		_25_valueOrError7 = (_24_maybeUnwrappedPdk).MapFailure(func(coer105 func(m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
   704  			return func(arg106 interface{}) interface{} {
   705  				return coer105(arg106.(m_AwsCryptographyPrimitivesTypes.Error))
   706  			}
   707  		}(func(_26_e m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error {
   708  			return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographyPrimitives_(_26_e)
   709  		}))
   710  		if (_25_valueOrError7).IsFailure() {
   711  			res = (_25_valueOrError7).PropagateFailure()
   712  			return res
   713  		}
   714  		var _27_unwrappedPdk _dafny.Sequence
   715  		_ = _27_unwrappedPdk
   716  		_27_unwrappedPdk = (_25_valueOrError7).Extract().(_dafny.Sequence)
   717  		var _28_valueOrError8 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
   718  		_ = _28_valueOrError8
   719  		_28_valueOrError8 = m_Wrappers.Companion_Default___.Need((_dafny.IntOfUint32((_27_unwrappedPdk).Cardinality())).Cmp(_dafny.IntOfInt32(m_AlgorithmSuites.Companion_Default___.GetEncryptKeyLength((input).Dtor_algorithmSuite()))) == 0, Companion_Default___.E(_dafny.SeqOfString("Invalid Key Length")))
   720  		if (_28_valueOrError8).IsFailure() {
   721  			res = (_28_valueOrError8).PropagateFailure()
   722  			return res
   723  		}
   724  		var _29_output m_MaterialWrapping.UnwrapOutput
   725  		_ = _29_output
   726  		_29_output = m_MaterialWrapping.Companion_UnwrapOutput_.Create_UnwrapOutput_(_27_unwrappedPdk, Companion_EcdhUnwrapInfo_.Create_EcdhUnwrapInfo_())
   727  		res = m_Wrappers.Companion_Result_.Create_Success_(_29_output)
   728  		return res
   729  		return res
   730  	}
   731  }
   732  func (_this *EcdhUnwrap) CommitmentKeyCheck(calculatedCommitmentKey _dafny.Sequence, serializedCommitmentKey _dafny.Sequence) bool {
   733  	{
   734  		var res bool = false
   735  		_ = res
   736  		var _0_diff_q uint8
   737  		_ = _0_diff_q
   738  		_0_diff_q = uint8(0)
   739  		var _hi0 _dafny.Int = _dafny.IntOfUint32((serializedCommitmentKey).Cardinality())
   740  		_ = _hi0
   741  		for _1_i := _dafny.Zero; _1_i.Cmp(_hi0) < 0; _1_i = _1_i.Plus(_dafny.One) {
   742  			_0_diff_q = (_0_diff_q) | ((uint8((calculatedCommitmentKey).Select((_1_i).Uint32()).(uint8))) ^ (uint8((serializedCommitmentKey).Select((_1_i).Uint32()).(uint8))))
   743  		}
   744  		res = (_0_diff_q) == (uint8(0))
   745  		return res
   746  	}
   747  }
   748  func (_this *EcdhUnwrap) SenderPublicKey() _dafny.Sequence {
   749  	{
   750  		return _this._senderPublicKey
   751  	}
   752  }
   753  func (_this *EcdhUnwrap) RecipientPublicKey() _dafny.Sequence {
   754  	{
   755  		return _this._recipientPublicKey
   756  	}
   757  }
   758  func (_this *EcdhUnwrap) SharedSecret() _dafny.Sequence {
   759  	{
   760  		return _this._sharedSecret
   761  	}
   762  }
   763  func (_this *EcdhUnwrap) KeyringVersion() _dafny.Sequence {
   764  	{
   765  		return _this._keyringVersion
   766  	}
   767  }
   768  func (_this *EcdhUnwrap) CurveSpec() m_AwsCryptographyPrimitivesTypes.ECDHCurveSpec {
   769  	{
   770  		return _this._curveSpec
   771  	}
   772  }
   773  func (_this *EcdhUnwrap) Crypto() *m_AtomicPrimitives.AtomicPrimitivesClient {
   774  	{
   775  		return _this._crypto
   776  	}
   777  }
   778  
   779  // End of class EcdhUnwrap
   780  
   781  // Definition of class EcdhGenerateAndWrapKeyMaterial
   782  type EcdhGenerateAndWrapKeyMaterial struct {
   783  	_crypto       *m_AtomicPrimitives.AtomicPrimitivesClient
   784  	_sharedSecret _dafny.Sequence
   785  	_fixedInfo    _dafny.Sequence
   786  }
   787  
   788  func New_EcdhGenerateAndWrapKeyMaterial_() *EcdhGenerateAndWrapKeyMaterial {
   789  	_this := EcdhGenerateAndWrapKeyMaterial{}
   790  
   791  	_this._crypto = (*m_AtomicPrimitives.AtomicPrimitivesClient)(nil)
   792  	_this._sharedSecret = _dafny.EmptySeq
   793  	_this._fixedInfo = _dafny.EmptySeq
   794  	return &_this
   795  }
   796  
   797  type CompanionStruct_EcdhGenerateAndWrapKeyMaterial_ struct {
   798  }
   799  
   800  var Companion_EcdhGenerateAndWrapKeyMaterial_ = CompanionStruct_EcdhGenerateAndWrapKeyMaterial_{}
   801  
   802  func (_this *EcdhGenerateAndWrapKeyMaterial) Equals(other *EcdhGenerateAndWrapKeyMaterial) bool {
   803  	return _this == other
   804  }
   805  
   806  func (_this *EcdhGenerateAndWrapKeyMaterial) EqualsGeneric(x interface{}) bool {
   807  	other, ok := x.(*EcdhGenerateAndWrapKeyMaterial)
   808  	return ok && _this.Equals(other)
   809  }
   810  
   811  func (*EcdhGenerateAndWrapKeyMaterial) String() string {
   812  	return "EcdhEdkWrapping.EcdhGenerateAndWrapKeyMaterial"
   813  }
   814  
   815  func Type_EcdhGenerateAndWrapKeyMaterial_() _dafny.TypeDescriptor {
   816  	return type_EcdhGenerateAndWrapKeyMaterial_{}
   817  }
   818  
   819  type type_EcdhGenerateAndWrapKeyMaterial_ struct {
   820  }
   821  
   822  func (_this type_EcdhGenerateAndWrapKeyMaterial_) Default() interface{} {
   823  	return (*EcdhGenerateAndWrapKeyMaterial)(nil)
   824  }
   825  
   826  func (_this type_EcdhGenerateAndWrapKeyMaterial_) String() string {
   827  	return "EcdhEdkWrapping.EcdhGenerateAndWrapKeyMaterial"
   828  }
   829  func (_this *EcdhGenerateAndWrapKeyMaterial) ParentTraits_() []*_dafny.TraitID {
   830  	return [](*_dafny.TraitID){m_MaterialWrapping.Companion_GenerateAndWrapMaterial_.TraitID_, m_Actions.Companion_ActionWithResult_.TraitID_, m_Actions.Companion_Action_.TraitID_}
   831  }
   832  
   833  var _ m_MaterialWrapping.GenerateAndWrapMaterial = &EcdhGenerateAndWrapKeyMaterial{}
   834  var _ m_Actions.ActionWithResult = &EcdhGenerateAndWrapKeyMaterial{}
   835  var _ m_Actions.Action = &EcdhGenerateAndWrapKeyMaterial{}
   836  var _ _dafny.TraitOffspring = &EcdhGenerateAndWrapKeyMaterial{}
   837  
   838  func (_this *EcdhGenerateAndWrapKeyMaterial) Ctor__(sharedSecret _dafny.Sequence, fixedInfo _dafny.Sequence, crypto *m_AtomicPrimitives.AtomicPrimitivesClient) {
   839  	{
   840  		(_this)._sharedSecret = sharedSecret
   841  		(_this)._fixedInfo = fixedInfo
   842  		(_this)._crypto = crypto
   843  	}
   844  }
   845  func (_this *EcdhGenerateAndWrapKeyMaterial) Invoke(input interface{}) interface{} {
   846  	{
   847  		var input m_MaterialWrapping.GenerateAndWrapInput = input.(m_MaterialWrapping.GenerateAndWrapInput)
   848  		_ = input
   849  		var res m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_MaterialWrapping.Companion_GenerateAndWrapOutput_.Default(Companion_EcdhWrapInfo_.Default()))
   850  		_ = res
   851  		var _0_suite m_AwsCryptographyMaterialProvidersTypes.AlgorithmSuiteInfo
   852  		_ = _0_suite
   853  		_0_suite = (input).Dtor_algorithmSuite()
   854  		var _1_pdkResult m_Wrappers.Result
   855  		_ = _1_pdkResult
   856  		var _out0 m_Wrappers.Result
   857  		_ = _out0
   858  		_out0 = ((_this).Crypto()).GenerateRandomBytes(m_AwsCryptographyPrimitivesTypes.Companion_GenerateRandomBytesInput_.Create_GenerateRandomBytesInput_(m_AlgorithmSuites.Companion_Default___.GetEncryptKeyLength(_0_suite)))
   859  		_1_pdkResult = _out0
   860  		var _2_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   861  		_ = _2_valueOrError0
   862  		_2_valueOrError0 = (_1_pdkResult).MapFailure(func(coer106 func(m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
   863  			return func(arg107 interface{}) interface{} {
   864  				return coer106(arg107.(m_AwsCryptographyPrimitivesTypes.Error))
   865  			}
   866  		}(func(_3_e m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error {
   867  			return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographyPrimitives_(_3_e)
   868  		}))
   869  		if (_2_valueOrError0).IsFailure() {
   870  			res = (_2_valueOrError0).PropagateFailure()
   871  			return res
   872  		}
   873  		var _4_pdk _dafny.Sequence
   874  		_ = _4_pdk
   875  		_4_pdk = (_2_valueOrError0).Extract().(_dafny.Sequence)
   876  		var _5_wrap *EcdhWrapKeyMaterial
   877  		_ = _5_wrap
   878  		var _nw0 *EcdhWrapKeyMaterial = New_EcdhWrapKeyMaterial_()
   879  		_ = _nw0
   880  		_nw0.Ctor__((_this).SharedSecret(), (_this).FixedInfo(), (_this).Crypto())
   881  		_5_wrap = _nw0
   882  		var _6_valueOrError1 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_MaterialWrapping.Companion_WrapOutput_.Default(Companion_EcdhWrapInfo_.Default()))
   883  		_ = _6_valueOrError1
   884  		var _out1 interface{}
   885  		_ = _out1
   886  		_out1 = (_5_wrap).Invoke(m_MaterialWrapping.Companion_WrapInput_.Create_WrapInput_(_4_pdk, (input).Dtor_algorithmSuite(), (input).Dtor_encryptionContext()))
   887  		_6_valueOrError1 = _out1.(m_Wrappers.Result)
   888  		if (_6_valueOrError1).IsFailure() {
   889  			res = (_6_valueOrError1).PropagateFailure()
   890  			return res
   891  		}
   892  		var _7_wrapOutput m_MaterialWrapping.WrapOutput
   893  		_ = _7_wrapOutput
   894  		_7_wrapOutput = (_6_valueOrError1).Extract().(m_MaterialWrapping.WrapOutput)
   895  		var _8_output m_MaterialWrapping.GenerateAndWrapOutput
   896  		_ = _8_output
   897  		_8_output = m_MaterialWrapping.Companion_GenerateAndWrapOutput_.Create_GenerateAndWrapOutput_(_4_pdk, (_7_wrapOutput).Dtor_wrappedMaterial(), (_7_wrapOutput).Dtor_wrapInfo().(EcdhWrapInfo))
   898  		res = m_Wrappers.Companion_Result_.Create_Success_(_8_output)
   899  		return res
   900  		return res
   901  	}
   902  }
   903  func (_this *EcdhGenerateAndWrapKeyMaterial) Crypto() *m_AtomicPrimitives.AtomicPrimitivesClient {
   904  	{
   905  		return _this._crypto
   906  	}
   907  }
   908  func (_this *EcdhGenerateAndWrapKeyMaterial) SharedSecret() _dafny.Sequence {
   909  	{
   910  		return _this._sharedSecret
   911  	}
   912  }
   913  func (_this *EcdhGenerateAndWrapKeyMaterial) FixedInfo() _dafny.Sequence {
   914  	{
   915  		return _this._fixedInfo
   916  	}
   917  }
   918  
   919  // End of class EcdhGenerateAndWrapKeyMaterial
   920  
   921  // Definition of class EcdhWrapKeyMaterial
   922  type EcdhWrapKeyMaterial struct {
   923  	_crypto       *m_AtomicPrimitives.AtomicPrimitivesClient
   924  	_fixedInfo    _dafny.Sequence
   925  	_sharedSecret _dafny.Sequence
   926  }
   927  
   928  func New_EcdhWrapKeyMaterial_() *EcdhWrapKeyMaterial {
   929  	_this := EcdhWrapKeyMaterial{}
   930  
   931  	_this._crypto = (*m_AtomicPrimitives.AtomicPrimitivesClient)(nil)
   932  	_this._fixedInfo = _dafny.EmptySeq
   933  	_this._sharedSecret = _dafny.EmptySeq
   934  	return &_this
   935  }
   936  
   937  type CompanionStruct_EcdhWrapKeyMaterial_ struct {
   938  }
   939  
   940  var Companion_EcdhWrapKeyMaterial_ = CompanionStruct_EcdhWrapKeyMaterial_{}
   941  
   942  func (_this *EcdhWrapKeyMaterial) Equals(other *EcdhWrapKeyMaterial) bool {
   943  	return _this == other
   944  }
   945  
   946  func (_this *EcdhWrapKeyMaterial) EqualsGeneric(x interface{}) bool {
   947  	other, ok := x.(*EcdhWrapKeyMaterial)
   948  	return ok && _this.Equals(other)
   949  }
   950  
   951  func (*EcdhWrapKeyMaterial) String() string {
   952  	return "EcdhEdkWrapping.EcdhWrapKeyMaterial"
   953  }
   954  
   955  func Type_EcdhWrapKeyMaterial_() _dafny.TypeDescriptor {
   956  	return type_EcdhWrapKeyMaterial_{}
   957  }
   958  
   959  type type_EcdhWrapKeyMaterial_ struct {
   960  }
   961  
   962  func (_this type_EcdhWrapKeyMaterial_) Default() interface{} {
   963  	return (*EcdhWrapKeyMaterial)(nil)
   964  }
   965  
   966  func (_this type_EcdhWrapKeyMaterial_) String() string {
   967  	return "EcdhEdkWrapping.EcdhWrapKeyMaterial"
   968  }
   969  func (_this *EcdhWrapKeyMaterial) ParentTraits_() []*_dafny.TraitID {
   970  	return [](*_dafny.TraitID){m_MaterialWrapping.Companion_WrapMaterial_.TraitID_, m_Actions.Companion_ActionWithResult_.TraitID_, m_Actions.Companion_Action_.TraitID_}
   971  }
   972  
   973  var _ m_MaterialWrapping.WrapMaterial = &EcdhWrapKeyMaterial{}
   974  var _ m_Actions.ActionWithResult = &EcdhWrapKeyMaterial{}
   975  var _ m_Actions.Action = &EcdhWrapKeyMaterial{}
   976  var _ _dafny.TraitOffspring = &EcdhWrapKeyMaterial{}
   977  
   978  func (_this *EcdhWrapKeyMaterial) Ctor__(sharedSecret _dafny.Sequence, fixedInfo _dafny.Sequence, crypto *m_AtomicPrimitives.AtomicPrimitivesClient) {
   979  	{
   980  		(_this)._sharedSecret = sharedSecret
   981  		(_this)._fixedInfo = fixedInfo
   982  		(_this)._crypto = crypto
   983  	}
   984  }
   985  func (_this *EcdhWrapKeyMaterial) Invoke(input interface{}) interface{} {
   986  	{
   987  		var input m_MaterialWrapping.WrapInput = input.(m_MaterialWrapping.WrapInput)
   988  		_ = input
   989  		var res m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_MaterialWrapping.Companion_WrapOutput_.Default(Companion_EcdhWrapInfo_.Default()))
   990  		_ = res
   991  		var _0_suite m_AwsCryptographyMaterialProvidersTypes.AlgorithmSuiteInfo
   992  		_ = _0_suite
   993  		_0_suite = (input).Dtor_algorithmSuite()
   994  		var _1_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
   995  		_ = _1_valueOrError0
   996  		_1_valueOrError0 = m_CanonicalEncryptionContext.Companion_Default___.EncryptionContextToAAD((input).Dtor_encryptionContext())
   997  		if (_1_valueOrError0).IsFailure() {
   998  			res = (_1_valueOrError0).PropagateFailure()
   999  			return res
  1000  		}
  1001  		var _2_canonicalizedEC _dafny.Sequence
  1002  		_ = _2_canonicalizedEC
  1003  		_2_canonicalizedEC = (_1_valueOrError0).Extract().(_dafny.Sequence)
  1004  		var _3_maybeSalt m_Wrappers.Result
  1005  		_ = _3_maybeSalt
  1006  		var _out0 m_Wrappers.Result
  1007  		_ = _out0
  1008  		_out0 = ((_this).Crypto()).GenerateRandomBytes(m_AwsCryptographyPrimitivesTypes.Companion_GenerateRandomBytesInput_.Create_GenerateRandomBytesInput_(m_Constants.Companion_Default___.KDF__SALT__LEN()))
  1009  		_3_maybeSalt = _out0
  1010  		var _4_valueOrError1 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
  1011  		_ = _4_valueOrError1
  1012  		_4_valueOrError1 = (_3_maybeSalt).MapFailure(func(coer107 func(m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
  1013  			return func(arg108 interface{}) interface{} {
  1014  				return coer107(arg108.(m_AwsCryptographyPrimitivesTypes.Error))
  1015  			}
  1016  		}(func(_5_e m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error {
  1017  			return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographyPrimitives_(_5_e)
  1018  		}))
  1019  		if (_4_valueOrError1).IsFailure() {
  1020  			res = (_4_valueOrError1).PropagateFailure()
  1021  			return res
  1022  		}
  1023  		var _6_salt _dafny.Sequence
  1024  		_ = _6_salt
  1025  		_6_salt = (_4_valueOrError1).Extract().(_dafny.Sequence)
  1026  		var _7_valueOrError2 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
  1027  		_ = _7_valueOrError2
  1028  		var _out1 m_Wrappers.Result
  1029  		_ = _out1
  1030  		_out1 = Companion_Default___.DeriveSharedKeyingMaterial((_this).SharedSecret(), (_this).FixedInfo(), _6_salt, (_this).Crypto())
  1031  		_7_valueOrError2 = _out1
  1032  		if (_7_valueOrError2).IsFailure() {
  1033  			res = (_7_valueOrError2).PropagateFailure()
  1034  			return res
  1035  		}
  1036  		var _8_derivedKeyingMaterial _dafny.Sequence
  1037  		_ = _8_derivedKeyingMaterial
  1038  		_8_derivedKeyingMaterial = (_7_valueOrError2).Extract().(_dafny.Sequence)
  1039  		var _9_commitmentKey _dafny.Sequence
  1040  		_ = _9_commitmentKey
  1041  		_9_commitmentKey = (_8_derivedKeyingMaterial).Subsequence(0, 32)
  1042  		var _10_sharedKeyingMaterial _dafny.Sequence
  1043  		_ = _10_sharedKeyingMaterial
  1044  		_10_sharedKeyingMaterial = (_8_derivedKeyingMaterial).Drop(32)
  1045  		var _11_iv _dafny.Sequence
  1046  		_ = _11_iv
  1047  		_11_iv = _dafny.SeqCreate((_dafny.IntOfInt32((m_Constants.Companion_Default___.ECDH__AES__256__ENC__ALG()).Dtor_ivLength())).Uint32(), func(coer108 func(_dafny.Int) uint8) func(_dafny.Int) interface{} {
  1048  			return func(arg109 _dafny.Int) interface{} {
  1049  				return coer108(arg109)
  1050  			}
  1051  		}(func(_12___v3 _dafny.Int) uint8 {
  1052  			return uint8(0)
  1053  		}))
  1054  		var _13_maybeWrappedPdk m_Wrappers.Result
  1055  		_ = _13_maybeWrappedPdk
  1056  		var _out2 m_Wrappers.Result
  1057  		_ = _out2
  1058  		_out2 = ((_this).Crypto()).AESEncrypt(m_AwsCryptographyPrimitivesTypes.Companion_AESEncryptInput_.Create_AESEncryptInput_(m_Constants.Companion_Default___.ECDH__AES__256__ENC__ALG(), _11_iv, _10_sharedKeyingMaterial, (input).Dtor_plaintextMaterial(), (_this).FixedInfo()))
  1059  		_13_maybeWrappedPdk = _out2
  1060  		var _14_valueOrError3 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_AwsCryptographyPrimitivesTypes.Companion_AESEncryptOutput_.Default())
  1061  		_ = _14_valueOrError3
  1062  		_14_valueOrError3 = (_13_maybeWrappedPdk).MapFailure(func(coer109 func(m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
  1063  			return func(arg110 interface{}) interface{} {
  1064  				return coer109(arg110.(m_AwsCryptographyPrimitivesTypes.Error))
  1065  			}
  1066  		}(func(_15_e m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error {
  1067  			return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographyPrimitives_(_15_e)
  1068  		}))
  1069  		if (_14_valueOrError3).IsFailure() {
  1070  			res = (_14_valueOrError3).PropagateFailure()
  1071  			return res
  1072  		}
  1073  		var _16_wrappedPdk m_AwsCryptographyPrimitivesTypes.AESEncryptOutput
  1074  		_ = _16_wrappedPdk
  1075  		_16_wrappedPdk = (_14_valueOrError3).Extract().(m_AwsCryptographyPrimitivesTypes.AESEncryptOutput)
  1076  		var _17_output m_MaterialWrapping.WrapOutput
  1077  		_ = _17_output
  1078  		_17_output = m_MaterialWrapping.Companion_WrapOutput_.Create_WrapOutput_(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate(_6_salt, _9_commitmentKey), (_16_wrappedPdk).Dtor_cipherText()), (_16_wrappedPdk).Dtor_authTag()), Companion_EcdhWrapInfo_.Create_EcdhWrapInfo_())
  1079  		res = m_Wrappers.Companion_Result_.Create_Success_(_17_output)
  1080  		return res
  1081  		return res
  1082  	}
  1083  }
  1084  func (_this *EcdhWrapKeyMaterial) Crypto() *m_AtomicPrimitives.AtomicPrimitivesClient {
  1085  	{
  1086  		return _this._crypto
  1087  	}
  1088  }
  1089  func (_this *EcdhWrapKeyMaterial) FixedInfo() _dafny.Sequence {
  1090  	{
  1091  		return _this._fixedInfo
  1092  	}
  1093  }
  1094  func (_this *EcdhWrapKeyMaterial) SharedSecret() _dafny.Sequence {
  1095  	{
  1096  		return _this._sharedSecret
  1097  	}
  1098  }
  1099  
  1100  // End of class EcdhWrapKeyMaterial