in releases/go/mpl/IntermediateKeyWrapping/IntermediateKeyWrapping.go [338:463]
func (_static *CompanionStruct_Default___) IntermediateWrap(generateAndWrap m_MaterialWrapping.GenerateAndWrapMaterial, plaintextDataKey _dafny.Sequence, algorithmSuite m_AwsCryptographyMaterialProvidersTypes.AlgorithmSuiteInfo, encryptionContext _dafny.Map) m_Wrappers.Result {
var res m_Wrappers.Result = m_Wrappers.Result{}
_ = res
var _0_maybeCrypto m_Wrappers.Result
_ = _0_maybeCrypto
var _out0 m_Wrappers.Result
_ = _out0
_out0 = m_AtomicPrimitives.Companion_Default___.AtomicPrimitives(m_AtomicPrimitives.Companion_Default___.DefaultCryptoConfig())
_0_maybeCrypto = _out0
var _1_valueOrError0 m_Wrappers.Result = m_Wrappers.Result{}
_ = _1_valueOrError0
_1_valueOrError0 = (_0_maybeCrypto).MapFailure(func(coer41 func(m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
return func(arg42 interface{}) interface{} {
return coer41(arg42.(m_AwsCryptographyPrimitivesTypes.Error))
}
}(func(_2_e m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error {
return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographyPrimitives_(_2_e)
}))
if (_1_valueOrError0).IsFailure() {
res = (_1_valueOrError0).PropagateFailure()
return res
}
var _3_cryptoPrimitivesX m_AwsCryptographyPrimitivesTypes.IAwsCryptographicPrimitivesClient
_ = _3_cryptoPrimitivesX
_3_cryptoPrimitivesX = (_1_valueOrError0).Extract().(*m_AtomicPrimitives.AtomicPrimitivesClient)
var _4_cryptoPrimitives *m_AtomicPrimitives.AtomicPrimitivesClient
_ = _4_cryptoPrimitives
_4_cryptoPrimitives = _3_cryptoPrimitivesX.(*m_AtomicPrimitives.AtomicPrimitivesClient)
var _5_valueOrError1 m_Wrappers.Result = m_Wrappers.Result{}
_ = _5_valueOrError1
var _out1 interface{}
_ = _out1
_out1 = (generateAndWrap).Invoke(m_MaterialWrapping.Companion_GenerateAndWrapInput_.Create_GenerateAndWrapInput_(algorithmSuite, encryptionContext))
_5_valueOrError1 = _out1.(m_Wrappers.Result)
if (_5_valueOrError1).IsFailure() {
res = (_5_valueOrError1).PropagateFailure()
return res
}
var _6_generateAndWrapOutput m_MaterialWrapping.GenerateAndWrapOutput
_ = _6_generateAndWrapOutput
_6_generateAndWrapOutput = (_5_valueOrError1).Extract().(m_MaterialWrapping.GenerateAndWrapOutput)
var _let_tmp_rhs0 m_MaterialWrapping.GenerateAndWrapOutput = _6_generateAndWrapOutput
_ = _let_tmp_rhs0
var _7_intermediateMaterial _dafny.Sequence = _let_tmp_rhs0.Get_().(m_MaterialWrapping.GenerateAndWrapOutput_GenerateAndWrapOutput).PlaintextMaterial
_ = _7_intermediateMaterial
var _8_providerWrappedIkm _dafny.Sequence = _let_tmp_rhs0.Get_().(m_MaterialWrapping.GenerateAndWrapOutput_GenerateAndWrapOutput).WrappedMaterial
_ = _8_providerWrappedIkm
var _9_wrapInfo interface{} = _let_tmp_rhs0.Get_().(m_MaterialWrapping.GenerateAndWrapOutput_GenerateAndWrapOutput).WrapInfo
_ = _9_wrapInfo
var _10_valueOrError2 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(Companion_PdkEncryptionAndSymmetricSigningKeys_.Default())
_ = _10_valueOrError2
var _out2 m_Wrappers.Result
_ = _out2
_out2 = Companion_Default___.DeriveKeysFromIntermediateMaterial(_7_intermediateMaterial, algorithmSuite, encryptionContext, _4_cryptoPrimitives)
_10_valueOrError2 = _out2
if (_10_valueOrError2).IsFailure() {
res = (_10_valueOrError2).PropagateFailure()
return res
}
var _11_derivedKeys PdkEncryptionAndSymmetricSigningKeys
_ = _11_derivedKeys
_11_derivedKeys = (_10_valueOrError2).Extract().(PdkEncryptionAndSymmetricSigningKeys)
var _let_tmp_rhs1 PdkEncryptionAndSymmetricSigningKeys = _11_derivedKeys
_ = _let_tmp_rhs1
var _12_pdkEncryptionKey _dafny.Sequence = _let_tmp_rhs1.Get_().(PdkEncryptionAndSymmetricSigningKeys_PdkEncryptionAndSymmetricSigningKeys).PdkEncryptionKey
_ = _12_pdkEncryptionKey
var _13_symmetricSigningKey _dafny.Sequence = _let_tmp_rhs1.Get_().(PdkEncryptionAndSymmetricSigningKeys_PdkEncryptionAndSymmetricSigningKeys).SymmetricSigningKey
_ = _13_symmetricSigningKey
var _14_iv _dafny.Sequence
_ = _14_iv
_14_iv = _dafny.SeqCreate((_dafny.IntOfInt32(m_AlgorithmSuites.Companion_Default___.GetEncryptIvLength(algorithmSuite))).Uint32(), func(coer42 func(_dafny.Int) uint8) func(_dafny.Int) interface{} {
return func(arg43 _dafny.Int) interface{} {
return coer42(arg43)
}
}(func(_15___v1 _dafny.Int) uint8 {
return uint8(0)
}))
var _16_valueOrError3 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(_dafny.EmptySeq)
_ = _16_valueOrError3
_16_valueOrError3 = m_CanonicalEncryptionContext.Companion_Default___.EncryptionContextToAAD(encryptionContext)
if (_16_valueOrError3).IsFailure() {
res = (_16_valueOrError3).PropagateFailure()
return res
}
var _17_aad _dafny.Sequence
_ = _17_aad
_17_aad = (_16_valueOrError3).Extract().(_dafny.Sequence)
var _18_encInput m_AwsCryptographyPrimitivesTypes.AESEncryptInput
_ = _18_encInput
_18_encInput = m_AwsCryptographyPrimitivesTypes.Companion_AESEncryptInput_.Create_AESEncryptInput_(((algorithmSuite).Dtor_encrypt()).Dtor_AES__GCM(), _14_iv, _12_pdkEncryptionKey, plaintextDataKey, _17_aad)
var _19_encOutR m_Wrappers.Result
_ = _19_encOutR
var _out3 m_Wrappers.Result
_ = _out3
_out3 = (_4_cryptoPrimitives).AESEncrypt(_18_encInput)
_19_encOutR = _out3
var _20_valueOrError4 m_Wrappers.Result = m_Wrappers.Companion_Result_.Default(m_AwsCryptographyPrimitivesTypes.Companion_AESEncryptOutput_.Default())
_ = _20_valueOrError4
_20_valueOrError4 = (_19_encOutR).MapFailure(func(coer43 func(m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error) func(interface{}) interface{} {
return func(arg44 interface{}) interface{} {
return coer43(arg44.(m_AwsCryptographyPrimitivesTypes.Error))
}
}(func(_21_e m_AwsCryptographyPrimitivesTypes.Error) m_AwsCryptographyMaterialProvidersTypes.Error {
return m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographyPrimitives_(_21_e)
}))
if (_20_valueOrError4).IsFailure() {
res = (_20_valueOrError4).PropagateFailure()
return res
}
var _22_encryptedPdk m_AwsCryptographyPrimitivesTypes.AESEncryptOutput
_ = _22_encryptedPdk
_22_encryptedPdk = (_20_valueOrError4).Extract().(m_AwsCryptographyPrimitivesTypes.AESEncryptOutput)
var _23_valueOrError5 m_Wrappers.Outcome = m_Wrappers.Companion_Outcome_.Default()
_ = _23_valueOrError5
_23_valueOrError5 = m_Wrappers.Companion_Default___.Need((_dafny.IntOfUint32((_dafny.Companion_Sequence_.Concatenate((_22_encryptedPdk).Dtor_cipherText(), (_22_encryptedPdk).Dtor_authTag())).Cardinality())).Cmp(_dafny.IntOfInt32((m_AlgorithmSuites.Companion_Default___.GetEncryptKeyLength(algorithmSuite))+(m_AlgorithmSuites.Companion_Default___.GetEncryptTagLength(algorithmSuite)))) == 0, m_AwsCryptographyMaterialProvidersTypes.Companion_Error_.Create_AwsCryptographicMaterialProvidersException_(_dafny.SeqOfString("Unexpected AES_GCM Encrypt length")))
if (_23_valueOrError5).IsFailure() {
res = (_23_valueOrError5).PropagateFailure()
return res
}
var _24_serializedMaterial _dafny.Sequence
_ = _24_serializedMaterial
_24_serializedMaterial = _dafny.Companion_Sequence_.Concatenate(_dafny.Companion_Sequence_.Concatenate((_22_encryptedPdk).Dtor_cipherText(), (_22_encryptedPdk).Dtor_authTag()), _8_providerWrappedIkm)
res = m_Wrappers.Companion_Result_.Create_Success_(Companion_IntermediateWrapOutput_.Create_IntermediateWrapOutput_(_24_serializedMaterial, _13_symmetricSigningKey, _9_wrapInfo))
return res
return res
}