static KeySet LoadKeys(string fileName) { if (fileName == null) { fileName = "ServerKeys.cbor"; } KeySet keys = new KeySet(); FileStream fs = new FileStream(fileName, FileMode.Open); using (BinaryReader reader = new BinaryReader(fs)) { byte[] data = reader.ReadBytes((int)fs.Length); CBORObject obj = CBORObject.DecodeFromBytes(data); for (int i = 0; i < obj.Count; i++) { OneKey key = new OneKey(obj[i]); string[] usages = key[_UsageKey].AsString().Split(' '); foreach (String usage in usages) { if (usage == "oscoap") { SecurityContext ctx = SecurityContext.DeriveContext( key[CoseKeyParameterKeys.Octet_k].GetByteString(), key[CBORObject.FromObject("RecipID")].GetByteString(), key[CBORObject.FromObject("SenderID")].GetByteString(), null, key[CoseKeyKeys.Algorithm]); SecurityContextSet.AllContexts.Add(ctx); break; } #if DEV_VERSION else if (usage == "oscoap-group") { SecurityContext ctx = SecurityContext.DeriveGroupContext( key[CoseKeyParameterKeys.Octet_k].GetByteString(), key[CoseKeyKeys.KeyIdentifier].GetByteString(), key[CBORObject.FromObject("sender")][CBORObject.FromObject("ID")].GetByteString(), null, null, key[CoseKeyKeys.Algorithm]); ctx.Sender.SigningKey = new OneKey(obj[i]["sign"]); foreach (CBORObject recipient in key[CBORObject.FromObject("recipients")].Values) { ctx.AddRecipient(recipient[CBORObject.FromObject("ID")].GetByteString(), new OneKey(recipient["sign"])); } SecurityContextSet.AllContexts.Add(ctx); } #endif else if (usage == "dtls") { if (key.HasPrivateKey()) { DtlsSignKeys.AddKey(key); } else { DtlsValidateKeys.AddKey(key); } } else if (usage == "edhoc") { if (key[CoseKeyKeys.KeyType].Equals(GeneralValues.KeyType_EC) || key[CoseKeyKeys.KeyType].Equals(GeneralValues.KeyType_OKP)) { if (key.ContainsName(CoseKeyParameterKeys.EC_D)) { edhocSign = key; } else { edhocKeys.AddKey(key); } } else { edhocKeys.AddKey(key); } } } if ((usages.Length != 1) || (usages[0] != "oscoap")) { keys.AddKey(key); } } reader.Close(); } return(keys); }