internal static IFreeformEntity_Msg InitKeyExchangeEndG2H_SIM(this FreeformSecurityTableCollection secTables, IFreeformEntity_Msg request) { // store the partial key of the host FFTgt_B2B_Security_KeyExchange_PartialKey tgt = request.EntityPrimaryTarget as FFTgt_B2B_Security_KeyExchange_PartialKey; SECURITY_KEY_INDEX keyIndex = FreeformEncryptionHelper.GetSecurityKeyIndex(request); byte[] gmuPartialKey = secTables.CreatePartialKeyGmu(keyIndex); secTables.StoreOtherPartialKeyGmu(keyIndex, tgt.PartialKey); secTables.CreateCommonKey(keyIndex); // send the partial key of the gmu IFreeformEntity_Msg response = request.CopyTo(FF_FlowDirection.G2H, new FFCreateEntityRequest_G2H_ResponseRequired() { MessageType = FF_AppId_G2H_MessageTypes.FreeForm, Command = FF_AppId_G2H_Commands.ResponseRequest, SkipTransactionId = true, }); FFTgt_B2B_Security tgt2 = new FFTgt_B2B_Security() { SecurityData = new FFTgt_B2B_Security_KeyExchange_End() { PartialKey = gmuPartialKey, } }; response.AddTarget(tgt2); return(response); }
public override void GetTargetData(IFreeformEntity_MsgTgt tgt, ref List <byte> buffer) { if (tgt is FFTgt_B2B_Security_KeyExchange_PartialKey) { FFTgt_B2B_Security_KeyExchange_PartialKey tgt2 = (FFTgt_B2B_Security_KeyExchange_PartialKey)tgt; buffer.AddRange(tgt2.PartialKey.CopyToBuffer(0, 9)); } else if (tgt is FFTgt_B2B_Security_KeyExchange_Status) { FFTgt_B2B_Security_KeyExchange_Status tgt2 = (FFTgt_B2B_Security_KeyExchange_Status)tgt; buffer.Add(tgt2.Status.GetGmuIdInt8()); } }
internal override IFreeformEntity ParseBufferInternal(ref IFreeformEntity entity, IFreeformEntity rootEntity, int id, byte[] buffer) { if (buffer.Length == 9) { FFTgt_B2B_Security_KeyExchange_PartialKey tgt = new FFTgt_B2B_Security_KeyExchange_PartialKey { PartialKey = buffer }; return(tgt); } else { FFTgt_B2B_Security_KeyExchange_Status tgt = new FFTgt_B2B_Security_KeyExchange_Status() { Status = buffer[0].GetAppId <FF_GmuId_ResponseStatus_Types, FF_AppId_ResponseStatus_Types>(), }; return(tgt); } }
internal override IFreeformEntity ParseBufferInternal(ref IFreeformEntity entity, IFreeformEntity rootEntity, int id, byte[] buffer) { if (buffer.Length == 9) { FFTgt_B2B_Security_KeyExchange_PartialKey tgt = new FFTgt_B2B_Security_KeyExchange_PartialKey { PartialKey = buffer }; return tgt; } else { FFTgt_B2B_Security_KeyExchange_Status tgt = new FFTgt_B2B_Security_KeyExchange_Status() { Status = buffer[0].GetAppId<FF_GmuId_ResponseStatus_Types, FF_AppId_ResponseStatus_Types>(), }; return tgt; } }