private byte[] DeriveKey(IDictionary <string, object> header, int cekSizeBits, CngKey externalPublicKey, CngKey privateKey) { byte[] bytes = Encoding.UTF8.GetBytes((string)header[this.algIdHeader]); byte[] numArray = (header.ContainsKey("apv") ? Base64Url.Decode((string)header["apv"]) : Arrays.Empty); byte[] numArray1 = (header.ContainsKey("apu") ? Base64Url.Decode((string)header["apu"]) : Arrays.Empty); byte[] numArray2 = Arrays.Concat(new byte[][] { Arrays.IntToBytes((int)bytes.Length), bytes }); byte[] numArray3 = Arrays.Concat(new byte[][] { Arrays.IntToBytes((int)numArray1.Length), numArray1 }); byte[] numArray4 = Arrays.Concat(new byte[][] { Arrays.IntToBytes((int)numArray.Length), numArray }); byte[] bytes1 = Arrays.IntToBytes(cekSizeBits); return(ConcatKDF.DeriveKey(externalPublicKey, privateKey, cekSizeBits, numArray2, numArray4, numArray3, bytes1)); }
private byte[] DeriveKey(IDictionary <string, object> header, int cekSizeBits, CngKey externalPublicKey, CngKey privateKey) { byte[] enc = Encoding.UTF8.GetBytes((string)header[algIdHeader]); byte[] apv = header.ContainsKey("apv") ? Base64Url.Decode((string)header["apv"]) : Arrays.Empty; byte[] apu = header.ContainsKey("apu") ? Base64Url.Decode((string)header["apu"]) : Arrays.Empty; byte[] algorithmId = Arrays.Concat(Arrays.IntToBytes(enc.Length), enc); byte[] partyUInfo = Arrays.Concat(Arrays.IntToBytes(apu.Length), apu); byte[] partyVInfo = Arrays.Concat(Arrays.IntToBytes(apv.Length), apv); byte[] suppPubInfo = Arrays.IntToBytes(cekSizeBits); return(ConcatKDF.DeriveKey(externalPublicKey, privateKey, cekSizeBits, algorithmId, partyVInfo, partyUInfo, suppPubInfo)); }