Ejemplo n.º 1
0
        /// <summary>
        /// Формування ЕЦП файлу.
        /// </summary>
        /// <param name="fileName">Ім'я файлу з даними.</param>
        /// <param name="fileNameWithSign">Ім'я файлу, в який необхідно записати підписані дані.</param>
        public static void SignFile(string fileName, string fileNameWithSign)
        {
            if (!IEUSignCP.IsInitialized())
            {
                throw new Exception(ERROR_NOT_INITIALIZED);
            }
            if (!IEUSignCP.IsPrivateKeyReaded())
            {
                throw new Exception(ERROR_BAD_PRIVATE_KEY);
            }

            using (FileStream fsIn = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                byte[] data = DFSPackHelper.fs2bytes(fsIn);
                byte[] signData;

                int error = IEUSignCP.SignDataInternal(true, data, out signData);
                if (error != IEUSignCP.EU_ERROR_NONE)
                {
                    throw new Exception(IEUSignCP.GetErrorDesc(error));
                }

                using (FileStream fsOut = new FileStream(fileNameWithSign, FileMode.Create, FileAccess.Write))
                {
                    byte[] tag = Encoding.ASCII.GetBytes("UA1_SIGN");
                    fsOut.Write(tag, 0, tag.Length);
                    fsOut.WriteByte(0);
                    fsOut.Write(BitConverter.GetBytes(signData.Length), 0, 4);
                    fsOut.Write(signData, 0, signData.Length);
                }
            }
        }