/// <summary> /// Updates one or more global keys. /// </summary> /// <param name="client">DLMS client that is used to generate action.</param> /// <param name="kek">Master key, also known as Key Encrypting Key.</param> /// <param name="list">List of Global key types and keys.</param> /// <returns>Generated action.</returns> public byte[][] GlobalKeyTransfer(GXDLMSClient client, byte[] kek, List <KeyValuePair <GlobalKeyType, byte[]> > list) { if (list == null || list.Count == 0) { throw new ArgumentException("Invalid list. It is empty."); } GXByteBuffer bb = new GXByteBuffer(); bb.SetUInt8(DataType.Array); bb.SetUInt8((byte)list.Count); byte[] tmp; foreach (KeyValuePair <GlobalKeyType, byte[]> it in list) { bb.SetUInt8(DataType.Structure); bb.SetUInt8(2); GXCommon.SetData(client.Settings, bb, DataType.Enum, it.Key); tmp = GXDLMSSecureClient.Encrypt(kek, it.Value); GXCommon.SetData(client.Settings, bb, DataType.OctetString, tmp); } return(client.Method(this, 2, bb.Array(), DataType.Array)); }