private static void DecodeKey(G2Header child, SettingsPacket settings)
{
G2Header key = new G2Header(child.Data);
RSAParameters rsa = new RSAParameters();
while (G2Protocol.ReadNextChild(child, key) == G2ReadResult.PACKET_GOOD)
{
if (!G2Protocol.ReadPayload(key))
continue;
switch (key.Name)
{
case Key_D:
rsa.D = Utilities.ExtractBytes(key.Data, key.PayloadPos, key.PayloadSize);
break;
case Key_DP:
rsa.DP = Utilities.ExtractBytes(key.Data, key.PayloadPos, key.PayloadSize);
break;
case Key_DQ:
rsa.DQ = Utilities.ExtractBytes(key.Data, key.PayloadPos, key.PayloadSize);
break;
case Key_Exponent:
rsa.Exponent = Utilities.ExtractBytes(key.Data, key.PayloadPos, key.PayloadSize);
break;
case Key_InverseQ:
rsa.InverseQ = Utilities.ExtractBytes(key.Data, key.PayloadPos, key.PayloadSize);
break;
case Key_Modulus:
rsa.Modulus = Utilities.ExtractBytes(key.Data, key.PayloadPos, key.PayloadSize);
break;
case Key_P:
rsa.P = Utilities.ExtractBytes(key.Data, key.PayloadPos, key.PayloadSize);
break;
case Key_Q:
rsa.Q = Utilities.ExtractBytes(key.Data, key.PayloadPos, key.PayloadSize);
break;
}
}
settings.KeyPair.ImportParameters(rsa);
settings.KeyPublic = rsa.Modulus;
}