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);
        }
Ejemplo n.º 2
0
 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());
     }
 }
Ejemplo n.º 3
0
 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);
     }
 }
Ejemplo n.º 4
0
 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;
     }
 }