Beispiel #1
0
        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());
        }
Beispiel #2
0
        // 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());
        }