public static byte[] CreateUserKeyingMaterial(PublicKeyPacket pubKeyData) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown MemoryStream val = new MemoryStream(); ECDHPublicBcpgKey eCDHPublicBcpgKey = (ECDHPublicBcpgKey)pubKeyData.Key; byte[] encoded = eCDHPublicBcpgKey.CurveOid.GetEncoded(); ((Stream)val).Write(encoded, 1, encoded.Length - 1); ((Stream)val).WriteByte((byte)pubKeyData.Algorithm); ((Stream)val).WriteByte((byte)3); ((Stream)val).WriteByte((byte)1); ((Stream)val).WriteByte((byte)eCDHPublicBcpgKey.HashAlgorithm); ((Stream)val).WriteByte((byte)eCDHPublicBcpgKey.SymmetricKeyAlgorithm); ((Stream)val).Write(ANONYMOUS_SENDER, 0, ANONYMOUS_SENDER.Length); byte[] array = PgpPublicKey.CalculateFingerprint(pubKeyData); ((Stream)val).Write(array, 0, array.Length); return(val.ToArray()); }
// RFC 6637 - Section 8 // curve_OID_len = (byte)len(curve_OID); // Param = curve_OID_len || curve_OID || public_key_alg_ID || 03 // || 01 || KDF_hash_ID || KEK_alg_ID for AESKeyWrap || "Anonymous // Sender " || recipient_fingerprint; // Z_len = the key size for the KEK_alg_ID used with AESKeyWrap // Compute Z = KDF( S, Z_len, Param ); public static byte[] CreateUserKeyingMaterial(PublicKeyPacket pubKeyData) { MemoryStream pOut = new MemoryStream(); ECDHPublicBcpgKey ecKey = (ECDHPublicBcpgKey)pubKeyData.Key; byte[] encOid = ecKey.CurveOid.GetEncoded(); pOut.Write(encOid, 1, encOid.Length - 1); pOut.WriteByte((byte)pubKeyData.Algorithm); pOut.WriteByte(0x03); pOut.WriteByte(0x01); pOut.WriteByte((byte)ecKey.HashAlgorithm); pOut.WriteByte((byte)ecKey.SymmetricKeyAlgorithm); pOut.Write(ANONYMOUS_SENDER, 0, ANONYMOUS_SENDER.Length); byte[] fingerprint = PgpPublicKey.CalculateFingerprint(pubKeyData); pOut.Write(fingerprint, 0, fingerprint.Length); return(pOut.ToArray()); }