Ejemplo n.º 1
0
        protected void configureSettings(Schema schemaVersion)
        {
            switch (schemaVersion)
            {
            case Schema.V0:
                aesMode              = AesMode.CTR;
                options              = Options.V0;
                hmac_includesHeader  = false;
                hmac_includesPadding = true;
                hmac_algorithm       = HmacAlgorithm.SHA1;
                break;

            case Schema.V1:
                aesMode              = AesMode.CBC;
                options              = Options.V1;
                hmac_includesHeader  = false;
                hmac_includesPadding = false;
                hmac_algorithm       = HmacAlgorithm.SHA256;
                break;

            case Schema.V2:
            case Schema.V3:
                aesMode              = AesMode.CBC;
                options              = Options.V1;
                hmac_includesHeader  = true;
                hmac_includesPadding = false;
                hmac_algorithm       = HmacAlgorithm.SHA256;
                break;
            }
        }
Ejemplo n.º 2
0
        // Token: 0x06000013 RID: 19 RVA: 0x00004800 File Offset: 0x00002A00
        public string Decrypt(string encryptedBase64, string password)
        {
            PayloadComponents payloadComponents = this.unpackEncryptedBase64Data(encryptedBase64);
            bool   flag = !this.hmacIsValid(payloadComponents, password);
            string result;

            if (flag)
            {
                result = "";
            }
            else
            {
                byte[]  key     = base.generateKey(payloadComponents.salt, password);
                byte[]  bytes   = new byte[0];
                AesMode aesMode = this.aesMode;
                if (aesMode != AesMode.CTR)
                {
                    if (aesMode == AesMode.CBC)
                    {
                        bytes = this.decryptAesCbcPkcs7(payloadComponents.ciphertext, key, payloadComponents.iv);
                    }
                }
                else
                {
                    bytes = base.encryptAesCtrLittleEndianNoPadding(payloadComponents.ciphertext, key, payloadComponents.iv);
                }
                result = Encoding.UTF8.GetString(bytes);
            }
            return(result);
        }
Ejemplo n.º 3
0
        public string Decrypt(string encryptedBase64, string password)
        {
            string            str;
            PayloadComponents payloadComponent = this.unpackEncryptedBase64Data(encryptedBase64);

            if (this.hmacIsValid(payloadComponent, password))
            {
                byte[]  numArray  = base.generateKey(payloadComponent.salt, password);
                byte[]  numArray1 = new byte[0];
                AesMode aesMode   = this.aesMode;
                if (aesMode == AesMode.CTR)
                {
                    numArray1 = base.encryptAesCtrLittleEndianNoPadding(payloadComponent.ciphertext, numArray, payloadComponent.iv);
                }
                else if (aesMode == AesMode.CBC)
                {
                    numArray1 = this.decryptAesCbcPkcs7(payloadComponent.ciphertext, numArray, payloadComponent.iv);
                }
                str = Encoding.UTF8.GetString(numArray1);
            }
            else
            {
                str = "";
            }
            return(str);
        }
Ejemplo n.º 4
0
        public string Encrypt(string plaintext, string password, Schema schemaVersion)
        {
            base.configureSettings(schemaVersion);
            byte[]            bytes            = base.TextEncoding.GetBytes(plaintext);
            PayloadComponents payloadComponent = new PayloadComponents()
            {
                schema   = new byte[] { (byte)schemaVersion },
                options  = new byte[] { (byte)this.options },
                salt     = this.generateRandomBytes(8),
                hmacSalt = this.generateRandomBytes(8),
                iv       = this.generateRandomBytes(16)
            };

            byte[]  numArray = base.generateKey(payloadComponent.salt, password);
            AesMode aesMode  = this.aesMode;

            if (aesMode == AesMode.CTR)
            {
                payloadComponent.ciphertext = base.encryptAesCtrLittleEndianNoPadding(bytes, numArray, payloadComponent.iv);
            }
            else if (aesMode == AesMode.CBC)
            {
                payloadComponent.ciphertext = this.encryptAesCbcPkcs7(bytes, numArray, payloadComponent.iv);
            }
            payloadComponent.hmac = base.generateHmac(payloadComponent, password);
            List <byte> nums = new List <byte>();

            nums.AddRange(base.assembleHeader(payloadComponent));
            nums.AddRange(payloadComponent.ciphertext);
            nums.AddRange(payloadComponent.hmac);
            return(Convert.ToBase64String(nums.ToArray()));
        }
Ejemplo n.º 5
0
        // Token: 0x0600001A RID: 26 RVA: 0x00004124 File Offset: 0x00002324
        public string Encrypt(string plaintext, string password, Schema schemaVersion)
        {
            base.configureSettings(schemaVersion);
            byte[]            bytes             = base.TextEncoding.GetBytes(plaintext);
            PayloadComponents payloadComponents = default(PayloadComponents);

            payloadComponents.schema = new byte[]
            {
                (byte)schemaVersion
            };
            payloadComponents.options = new byte[]
            {
                (byte)this.options
            };
            payloadComponents.salt     = this.generateRandomBytes(8);
            payloadComponents.hmacSalt = this.generateRandomBytes(8);
            payloadComponents.iv       = this.generateRandomBytes(16);
            byte[]  key     = base.generateKey(payloadComponents.salt, password);
            AesMode aesMode = this.aesMode;

            if (aesMode != AesMode.CTR)
            {
                if (aesMode == AesMode.CBC)
                {
                    payloadComponents.ciphertext = this.encryptAesCbcPkcs7(bytes, key, payloadComponents.iv);
                }
            }
            else
            {
                payloadComponents.ciphertext = base.encryptAesCtrLittleEndianNoPadding(bytes, key, payloadComponents.iv);
            }
            payloadComponents.hmac = base.generateHmac(payloadComponents, password);
            List <byte> list = new List <byte>();

            list.AddRange(base.assembleHeader(payloadComponents));
            list.AddRange(payloadComponents.ciphertext);
            list.AddRange(payloadComponents.hmac);
            return(Convert.ToBase64String(list.ToArray()));
        }
Ejemplo n.º 6
0
 public CipherSuiteInfo()
 {
     PRFAlgorithm = PRFAlgorithm.TLSPrfSHA256;
     AesMode      = AesMode.CBC;
 }
        protected virtual ICryptoTransform CreateTransform(System.Security.Cryptography.Aes aes, byte[] key, byte[] iv, AesMode mode)
        {
            if (aes == null)
            {
                throw new ArgumentNullException(nameof(aes));
            }
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }
            if (iv == null)
            {
                throw new ArgumentNullException(nameof(iv));
            }

            switch (mode)
            {
            case AesMode.Decrypt:
                return(aes.CreateDecryptor(key, iv));

            case AesMode.Encrypt:
                return(aes.CreateEncryptor(key, iv));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Ejemplo n.º 8
0
 public void SetMode(AesMode m)
 {
     Mode = m;
 }
Ejemplo n.º 9
0
 public CipherSuiteInfo()
 {
     PRFAlgorithm = PRFAlgorithm.TLSPrfSHA256;
     AesMode = AesMode.CBC;
 }
Ejemplo n.º 10
0
        protected void configureSettings(Schema schemaVersion)
        {
            switch (schemaVersion) {
                case Schema.V0:
                    aesMode = AesMode.CTR;
                    options = Options.V0;
                    hmac_includesHeader = false;
                    hmac_includesPadding = true;
                    hmac_algorithm = HmacAlgorithm.SHA1;
                    break;

                case Schema.V1:
                    aesMode = AesMode.CBC;
                    options = Options.V1;
                    hmac_includesHeader = false;
                    hmac_includesPadding = false;
                    hmac_algorithm = HmacAlgorithm.SHA256;
                    break;

                case Schema.V2:
                case Schema.V3:
                    aesMode = AesMode.CBC;
                    options = Options.V1;
                    hmac_includesHeader = true;
                    hmac_includesPadding = false;
                    hmac_algorithm = HmacAlgorithm.SHA256;
                    break;
            }
        }