Пример #1
0
        public byte[] Decrypt(byte[] message, CryptoPadding padding = null, bool checkSign = false)
        {
            // Reinterpret encrypted message as a number
            BigInteger cryptomessage = new BigInteger(message);

            // Reverse encryption
            message = Support.ModExp(cryptomessage, checkSign ? e : d, n).ToByteArray();

            // Remove fixed padding
            byte[] b1 = new byte[message.Length - 1];
            Array.Copy(message, b1, message.Length - 1);
            message = b1;

            // Remove dynamic padding
            message = (padding ?? NO_PADDING).Unpad(message);

            return(message);
        }
Пример #2
0
        public byte[] Decrypt(byte[] message, CryptoPadding padding)
        {
            // Reinterpret encrypted message as a number
            BigInteger cryptomessage = new BigInteger(message);

            // Reverse encryption
            message = Support.ModExp(cryptomessage, d, n).ToByteArray();

            // Remove fixed padding
            byte[] b1 = new byte[message.Length - 1];
            Array.Copy(message, b1, message.Length - 1);
            message = b1;

            // Remove dynamic padding
            message = padding.Unpad(message);

            return(message);
        }
Пример #3
0
        public byte[] Encrypt(byte[] message, CryptoPadding padding = null, bool sign = false)
        {
            // Apply dynamic padding
            message = (padding ?? NO_PADDING).Pad(message);

            // Apply fixed padding
            byte[] b1 = new byte[message.Length + 1];
            Array.Copy(message, b1, message.Length);
            b1[message.Length] = 1;
            message            = b1;

            // Represent message as a number
            BigInteger m = new BigInteger(message);

            // Encrypt message
            BigInteger cryptomessage = Support.ModExp(m, sign ? d : e, n);

            // Convert encrypted message back to bytes
            return(cryptomessage.ToByteArray());
        }
Пример #4
0
        public static string SerializePadding(CryptoPadding padding)
        {
            XmlDocument doc = new XmlDocument();

            doc.AppendChild(padding.GetParameters().Compile(doc));

            string output;

            using (var stream = new MemoryStream())
            {
                XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
                doc.WriteTo(writer);
                writer.Flush();
                stream.Position = 0;
                using (var reader = new StreamReader(stream))
                {
                    output = reader.ReadToEnd();
                }
            }
            return(output);
        }
Пример #5
0
 // Encrypt (duh)
 public byte[] EncryptString(string message, Encoding encoding = null, CryptoPadding padding = null, bool sign = false) => Encrypt((encoding ?? DEFAULT_ENCODING).GetBytes(message), padding, sign);
Пример #6
0
 // Decrypt (duh)
 public string DecryptString(byte[] message, Encoding encoding = null, CryptoPadding padding = null, bool checkSign = false) => new string((encoding ?? DEFAULT_ENCODING).GetChars(Decrypt(message, padding, checkSign)));
Пример #7
0
 // WIP
 public static string NetSerialize(CryptoPadding padding) => NetSerialize(padding.GetParameters(), new StringBuilder()).ToString();
Пример #8
0
 public SequentialPadding WithPadding(CryptoPadding padding)
 {
     pads.Add(padding);
     return(this);
 }
Пример #9
0
 public string DecryptString(byte[] message, CryptoPadding padding) => new string(DEFAULT_ENCODING.GetChars(Decrypt(message, padding)));
Пример #10
0
 public string DecryptString(byte[] message, Encoding encoding, CryptoPadding padding) => new string(encoding.GetChars(Decrypt(message, padding)));
Пример #11
0
 public byte[] EncryptString(string message, Encoding encoding, CryptoPadding padding) => Encrypt(encoding.GetBytes(message), padding);
Пример #12
0
 public byte[] EncryptString(string message, CryptoPadding padding) => Encrypt(DEFAULT_ENCODING.GetBytes(message), padding);