コード例 #1
0
ファイル: AesGcm.cs プロジェクト: itbetaw/TPlus-.netCore-
        public static byte[] Decrypt(byte[] key, byte[] iv, byte[] aad, byte[] cipherText, byte[] authTag)
        {
            IntPtr intPtr;

            byte[] numArray;
            IntPtr intPtr1 = AesGcm.OpenAlgorithmProvider(BCrypt.BCRYPT_AES_ALGORITHM, BCrypt.MS_PRIMITIVE_PROVIDER, BCrypt.BCRYPT_CHAIN_MODE_GCM);
            IntPtr intPtr2 = AesGcm.ImportKey(intPtr1, key, out intPtr);

            BCrypt.BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO bCRYPTAUTHENTICATEDCIPHERMODEINFO  = new BCrypt.BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO(iv, aad, authTag);
            BCrypt.BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO bCRYPTAUTHENTICATEDCIPHERMODEINFO1 = bCRYPTAUTHENTICATEDCIPHERMODEINFO;
            try
            {
                byte[] numArray1 = new byte[AesGcm.MaxAuthTagSize(intPtr1)];
                int    num       = 0;
                uint   num1      = BCrypt.BCryptDecrypt(intPtr, cipherText, (int)cipherText.Length, ref bCRYPTAUTHENTICATEDCIPHERMODEINFO, numArray1, (int)numArray1.Length, null, 0, ref num, 0);
                if (num1 != 0)
                {
                    throw new CryptographicException(string.Format("BCrypt.BCryptDecrypt() (get size) failed with status code: {0}", num1));
                }
                numArray = new byte[num];
                num1     = BCrypt.BCryptDecrypt(intPtr, cipherText, (int)cipherText.Length, ref bCRYPTAUTHENTICATEDCIPHERMODEINFO, numArray1, (int)numArray1.Length, numArray, (int)numArray.Length, ref num, 0);
                if (num1 == BCrypt.STATUS_AUTH_TAG_MISMATCH)
                {
                    throw new CryptographicException("BCrypt.BCryptDecrypt(): authentication tag mismatch");
                }
                if (num1 != 0)
                {
                    throw new CryptographicException(string.Format("BCrypt.BCryptDecrypt() failed with status code:{0}", num1));
                }
            }
            finally
            {
                ((IDisposable)bCRYPTAUTHENTICATEDCIPHERMODEINFO1).Dispose();
            }
            BCrypt.BCryptDestroyKey(intPtr);
            Marshal.FreeHGlobal(intPtr2);
            BCrypt.BCryptCloseAlgorithmProvider(intPtr1, 0);
            return(numArray);
        }
コード例 #2
0
ファイル: AesGcm.cs プロジェクト: itbetaw/TPlus-.netCore-
        public static byte[][] Encrypt(byte[] key, byte[] iv, byte[] aad, byte[] plainText)
        {
            IntPtr intPtr;

            byte[] numArray;
            IntPtr intPtr1 = AesGcm.OpenAlgorithmProvider(BCrypt.BCRYPT_AES_ALGORITHM, BCrypt.MS_PRIMITIVE_PROVIDER, BCrypt.BCRYPT_CHAIN_MODE_GCM);
            IntPtr intPtr2 = AesGcm.ImportKey(intPtr1, key, out intPtr);

            byte[] numArray1 = new byte[AesGcm.MaxAuthTagSize(intPtr1)];
            BCrypt.BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO bCRYPTAUTHENTICATEDCIPHERMODEINFO  = new BCrypt.BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO(iv, aad, numArray1);
            BCrypt.BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO bCRYPTAUTHENTICATEDCIPHERMODEINFO1 = bCRYPTAUTHENTICATEDCIPHERMODEINFO;
            try
            {
                byte[] numArray2 = new byte[(int)numArray1.Length];
                int    num       = 0;
                uint   num1      = BCrypt.BCryptEncrypt(intPtr, plainText, (int)plainText.Length, ref bCRYPTAUTHENTICATEDCIPHERMODEINFO, numArray2, (int)numArray2.Length, null, 0, ref num, 0);
                if (num1 != 0)
                {
                    throw new CryptographicException(string.Format("BCrypt.BCryptEncrypt() (get size) failed with status code:{0}", num1));
                }
                numArray = new byte[num];
                num1     = BCrypt.BCryptEncrypt(intPtr, plainText, (int)plainText.Length, ref bCRYPTAUTHENTICATEDCIPHERMODEINFO, numArray2, (int)numArray2.Length, numArray, (int)numArray.Length, ref num, 0);
                if (num1 != 0)
                {
                    throw new CryptographicException(string.Format("BCrypt.BCryptEncrypt() failed with status code:{0}", num1));
                }
                Marshal.Copy(bCRYPTAUTHENTICATEDCIPHERMODEINFO.pbTag, numArray1, 0, bCRYPTAUTHENTICATEDCIPHERMODEINFO.cbTag);
            }
            finally
            {
                ((IDisposable)bCRYPTAUTHENTICATEDCIPHERMODEINFO1).Dispose();
            }
            BCrypt.BCryptDestroyKey(intPtr);
            Marshal.FreeHGlobal(intPtr2);
            BCrypt.BCryptCloseAlgorithmProvider(intPtr1, 0);
            return(new byte[][] { numArray, numArray1 });
        }