func()

in releases/go/mpl/AwsKmsHierarchicalKeyring/AwsKmsHierarchicalKeyring.go [452:613]


func (_this *AwsKmsHierarchicalKeyring) OnEncrypt_k(input m_AwsCryptographyMaterialProvidersTypes.OnEncryptInput) m_Wrappers.Result {
	{
		var res m_Wrappers.Result = m_Wrappers.Result{}
		_ = res
		var _0_materials m_AwsCryptographyMaterialProvidersTypes.EncryptionMaterials
		_ = _0_materials
		_0_materials = (input).Dtor_materials()
		var _1_suite m_AwsCryptographyMaterialProvidersTypes.AlgorithmSuiteInfo
		_ = _1_suite
		_1_suite = (_0_materials).Dtor_algorithmSuite()
		var _2_valueOrError0 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq.SetString())
		_ = _2_valueOrError0
		var _out0 m_Wrappers.Result
		_ = _out0
		_out0 = (_this).GetBranchKeyId((_0_materials).Dtor_encryptionContext())
		_2_valueOrError0 = _out0
		if (_2_valueOrError0).IsFailure() {
			res = (_2_valueOrError0).PropagateFailure()
			return res
		}
		var _3_branchKeyIdForEncrypt _dafny.Sequence
		_ = _3_branchKeyIdForEncrypt
		_3_branchKeyIdForEncrypt = (_2_valueOrError0).Extract().(_dafny.Sequence)
		var _4_valueOrError1 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_UTF8.Companion_ValidUTF8Bytes_.Witness())
		_ = _4_valueOrError1
		_4_valueOrError1 = (m_UTF8.Encode(_3_branchKeyIdForEncrypt)).MapFailure(func(coer76 func(_dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
			return func(arg77 interface{}) interface{} {
				return coer76(arg77.(_dafny.Sequence))
			}
		}(m_AwsKmsUtils.Companion_Default___.WrapStringToError))
		if (_4_valueOrError1).IsFailure() {
			res = (_4_valueOrError1).PropagateFailure()
			return res
		}
		var _5_branchKeyIdUtf8 _dafny.Sequence
		_ = _5_branchKeyIdUtf8
		_5_branchKeyIdUtf8 = (_4_valueOrError1).Extract().(_dafny.Sequence)
		var _6_valueOrError2 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
		_ = _6_valueOrError2
		var _out1 m_Wrappers.Result
		_ = _out1
		_out1 = (_this).GetActiveCacheId(_3_branchKeyIdForEncrypt, _5_branchKeyIdUtf8, (_this).CryptoPrimitives())
		_6_valueOrError2 = _out1
		if (_6_valueOrError2).IsFailure() {
			res = (_6_valueOrError2).PropagateFailure()
			return res
		}
		var _7_cacheId _dafny.Sequence
		_ = _7_cacheId
		_7_cacheId = (_6_valueOrError2).Extract().(_dafny.Sequence)
		var _8_valueOrError3 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_AwsCryptographyKeyStoreTypes.Companion_BranchKeyMaterials_.Default())
		_ = _8_valueOrError3
		var _out2 m_Wrappers.Result
		_ = _out2
		_out2 = (_this).GetActiveHierarchicalMaterials(_3_branchKeyIdForEncrypt, _7_cacheId, (_this).KeyStore())
		_8_valueOrError3 = _out2
		if (_8_valueOrError3).IsFailure() {
			res = (_8_valueOrError3).PropagateFailure()
			return res
		}
		var _9_hierarchicalMaterials m_AwsCryptographyKeyStoreTypes.BranchKeyMaterials
		_ = _9_hierarchicalMaterials
		_9_hierarchicalMaterials = (_8_valueOrError3).Extract().(m_AwsCryptographyKeyStoreTypes.BranchKeyMaterials)
		var _10_branchKey _dafny.Sequence
		_ = _10_branchKey
		_10_branchKey = (_9_hierarchicalMaterials).Dtor_branchKey()
		var _11_branchKeyVersion _dafny.Sequence
		_ = _11_branchKeyVersion
		_11_branchKeyVersion = (_9_hierarchicalMaterials).Dtor_branchKeyVersion()
		var _12_valueOrError4 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq.SetString())
		_ = _12_valueOrError4
		_12_valueOrError4 = (m_UTF8.Decode(_11_branchKeyVersion)).MapFailure(func(coer77 func(_dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
			return func(arg78 interface{}) interface{} {
				return coer77(arg78.(_dafny.Sequence))
			}
		}(m_AwsKmsUtils.Companion_Default___.WrapStringToError))
		if (_12_valueOrError4).IsFailure() {
			res = (_12_valueOrError4).PropagateFailure()
			return res
		}
		var _13_branchKeyVersionAsString _dafny.Sequence
		_ = _13_branchKeyVersionAsString
		_13_branchKeyVersionAsString = (_12_valueOrError4).Extract().(_dafny.Sequence)
		var _14_valueOrError5 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
		_ = _14_valueOrError5
		_14_valueOrError5 = (m_UUID.ToByteArray(_13_branchKeyVersionAsString)).MapFailure(func(coer78 func(_dafny.Sequence) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
			return func(arg79 interface{}) interface{} {
				return coer78(arg79.(_dafny.Sequence))
			}
		}(m_AwsKmsUtils.Companion_Default___.WrapStringToError))
		if (_14_valueOrError5).IsFailure() {
			res = (_14_valueOrError5).PropagateFailure()
			return res
		}
		var _15_branchKeyVersionAsBytes _dafny.Sequence
		_ = _15_branchKeyVersionAsBytes
		_15_branchKeyVersionAsBytes = (_14_valueOrError5).Extract().(_dafny.Sequence)
		var _16_kmsHierarchyGenerateAndWrap *KmsHierarchyGenerateAndWrapKeyMaterial
		_ = _16_kmsHierarchyGenerateAndWrap
		var _nw0 *KmsHierarchyGenerateAndWrapKeyMaterial = New_KmsHierarchyGenerateAndWrapKeyMaterial_()
		_ = _nw0
		_nw0.Ctor__((_9_hierarchicalMaterials).Dtor_branchKey(), _5_branchKeyIdUtf8, _15_branchKeyVersionAsBytes, (_this).CryptoPrimitives())
		_16_kmsHierarchyGenerateAndWrap = _nw0
		var _17_kmsHierarchyWrap *KmsHierarchyWrapKeyMaterial
		_ = _17_kmsHierarchyWrap
		var _nw1 *KmsHierarchyWrapKeyMaterial = New_KmsHierarchyWrapKeyMaterial_()
		_ = _nw1
		_nw1.Ctor__((_9_hierarchicalMaterials).Dtor_branchKey(), _5_branchKeyIdUtf8, _15_branchKeyVersionAsBytes, (_this).CryptoPrimitives())
		_17_kmsHierarchyWrap = _nw1
		var _18_valueOrError6 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_EdkWrapping.Companion_WrapEdkMaterialOutput_.Default(Companion_HierarchyWrapInfo_.Default()))
		_ = _18_valueOrError6
		var _out3 m_Wrappers.Result
		_ = _out3
		_out3 = m_EdkWrapping.Companion_Default___.WrapEdkMaterial(_0_materials, _17_kmsHierarchyWrap, _16_kmsHierarchyGenerateAndWrap)
		_18_valueOrError6 = _out3
		if (_18_valueOrError6).IsFailure() {
			res = (_18_valueOrError6).PropagateFailure()
			return res
		}
		var _19_wrapOutput m_EdkWrapping.WrapEdkMaterialOutput
		_ = _19_wrapOutput
		_19_wrapOutput = (_18_valueOrError6).Extract().(m_EdkWrapping.WrapEdkMaterialOutput)
		var _20_symmetricSigningKeyList m_Wrappers.Option
		_ = _20_symmetricSigningKeyList
		if ((_19_wrapOutput).Dtor_symmetricSigningKey()).Is_Some() {
			_20_symmetricSigningKeyList = m_Wrappers.Companion_Option_.Create_Some_(_dafny.SeqOf(((_19_wrapOutput).Dtor_symmetricSigningKey()).Dtor_value().(_dafny.Sequence)))
		} else {
			_20_symmetricSigningKeyList = m_Wrappers.Companion_Option_.Create_None_()
		}
		var _21_edk m_AwsCryptographyMaterialProvidersTypes.EncryptedDataKey
		_ = _21_edk
		_21_edk = m_AwsCryptographyMaterialProvidersTypes.Companion_EncryptedDataKey_.Create_EncryptedDataKey_(m_Constants.Companion_Default___.PROVIDER__ID__HIERARCHY(), _5_branchKeyIdUtf8, (_19_wrapOutput).Dtor_wrappedMaterial())
		if (_19_wrapOutput).Is_GenerateAndWrapEdkMaterialOutput() {
			var _22_valueOrError7 m_Wrappers.Result = m_Wrappers.Result{}
			_ = _22_valueOrError7
			_22_valueOrError7 = m_Materials.Companion_Default___.EncryptionMaterialAddDataKey(_0_materials, (_19_wrapOutput).Dtor_plaintextDataKey(), _dafny.SeqOf(_21_edk), _20_symmetricSigningKeyList)
			if (_22_valueOrError7).IsFailure() {
				res = (_22_valueOrError7).PropagateFailure()
				return res
			}
			var _23_result m_AwsCryptographyMaterialProvidersTypes.EncryptionMaterials
			_ = _23_result
			_23_result = (_22_valueOrError7).Extract().(m_AwsCryptographyMaterialProvidersTypes.EncryptionMaterials)
			res = m_Wrappers.Companion_Result_.Create_Success_(m_AwsCryptographyMaterialProvidersTypes.Companion_OnEncryptOutput_.Create_OnEncryptOutput_(_23_result))
			return res
		} else if (_19_wrapOutput).Is_WrapOnlyEdkMaterialOutput() {
			var _24_valueOrError8 m_Wrappers.Result = m_Wrappers.Result{}
			_ = _24_valueOrError8
			_24_valueOrError8 = m_Materials.Companion_Default___.EncryptionMaterialAddEncryptedDataKeys(_0_materials, _dafny.SeqOf(_21_edk), _20_symmetricSigningKeyList)
			if (_24_valueOrError8).IsFailure() {
				res = (_24_valueOrError8).PropagateFailure()
				return res
			}
			var _25_result m_AwsCryptographyMaterialProvidersTypes.EncryptionMaterials
			_ = _25_result
			_25_result = (_24_valueOrError8).Extract().(m_AwsCryptographyMaterialProvidersTypes.EncryptionMaterials)
			res = m_Wrappers.Companion_Result_.Create_Success_(m_AwsCryptographyMaterialProvidersTypes.Companion_OnEncryptOutput_.Create_OnEncryptOutput_(_25_result))
			return res
		}
		return res
	}
}