Exemple #1
0
        public static byte[] EncodePublicBlob(GostKeyExchangeParameters publicKeyParameters, GostAlgorithmType algorithm)
        {
            if (publicKeyParameters == null)
            {
                throw ExceptionUtility.ArgumentNull("publicKeyParameters");
            }

            int size;
            int value;

            switch (algorithm)
            {
            case GostAlgorithmType.Gost2001:
                size  = 512;
                value = Constants.CALG_GR3410EL;
                break;

            case GostAlgorithmType.Gost2012_256:
                size  = 512;
                value = Constants.CALG_GR3410_2012_256;
                break;

            case GostAlgorithmType.Gost2012_512:
                size  = 1024;
                value = Constants.CALG_GR3410_2012_512;
                break;

            default:
                throw new CryptographicException(Resources.AlgorithmNotAvailable);
            }

            var encodeKeyParameters = publicKeyParameters.EncodeParameters();
            var importedKeyBytes    = new byte[(encodeKeyParameters.Length + 16) + publicKeyParameters.PublicKey.Length];

            importedKeyBytes[0] = 6;
            importedKeyBytes[1] = 32;
            Array.Copy(BitConverter.GetBytes(value), 0, importedKeyBytes, 4, 4);
            Array.Copy(BitConverter.GetBytes(Constants.GR3410_1_MAGIC), 0, importedKeyBytes, 8, 4);
            Array.Copy(BitConverter.GetBytes(size), 0, importedKeyBytes, 12, 4);
            Array.Copy(encodeKeyParameters, 0, importedKeyBytes, 16, encodeKeyParameters.Length);
            Array.Copy(publicKeyParameters.PublicKey, 0, importedKeyBytes, encodeKeyParameters.Length + 16, publicKeyParameters.PublicKey.Length);

            return(importedKeyBytes);
        }
Exemple #2
0
        public static byte[] EncodePublicBlob(GostKeyExchangeParameters publicKeyParameters)
        {
            if (publicKeyParameters == null)
            {
                throw new Exception("ArgumentNull - publicKeyParameters");
            }

            var encodeKeyParameters = publicKeyParameters.EncodeParameters();
            var importedKeyBytes    = new byte[(encodeKeyParameters.Length + 16) + publicKeyParameters.PublicKey.Length];

            importedKeyBytes[0] = 6;
            importedKeyBytes[1] = 32;
            Array.Copy(BitConverter.GetBytes(GostConstants.CALG_GR3410EL), 0, importedKeyBytes, 4, 4);
            Array.Copy(BitConverter.GetBytes(GostConstants.GR3410_1_MAGIC), 0, importedKeyBytes, 8, 4);
            Array.Copy(BitConverter.GetBytes(GostConstants.GOST_3410EL_SIZE), 0, importedKeyBytes, 12, 4);
            Array.Copy(encodeKeyParameters, 0, importedKeyBytes, 16, encodeKeyParameters.Length);
            Array.Copy(publicKeyParameters.PublicKey, 0, importedKeyBytes, encodeKeyParameters.Length + 16, publicKeyParameters.PublicKey.Length);

            return(importedKeyBytes);
        }
        public static byte[] EncodePublicBlob(GostKeyExchangeParameters publicKeyParameters, int algId)
        {
            if (publicKeyParameters == null)
            {
                throw new ArgumentNullException(nameof(publicKeyParameters));
            }

            int keySize;

            if (algId == GostConstants.CALG_GR3410EL)
            {
                keySize = GostConstants.GOST_3410EL_SIZE;
            }
            else if (algId == GostConstants.CALG_GR3410_12_256)
            {
                keySize = GostConstants.GOST3410_2012_256KEY_SIZE;
            }
            else if (algId == GostConstants.CALG_GR3410_12_512)
            {
                keySize = GostConstants.GOST3410_2012_512KEY_SIZE;
            }
            else
            {
                throw new CryptographicException(
                          SR.Cryptography_CSP_WrongKeySpec);
            }

            var encodeKeyParameters = publicKeyParameters.EncodeParameters();
            var importedKeyBytes    = new byte[(encodeKeyParameters.Length + 16) + publicKeyParameters.PublicKey.Length];

            importedKeyBytes[0] = 6;
            importedKeyBytes[1] = 32;
            Array.Copy(BitConverter.GetBytes(algId), 0, importedKeyBytes, 4, 4);
            Array.Copy(BitConverter.GetBytes(GostConstants.GR3410_1_MAGIC), 0, importedKeyBytes, 8, 4);
            Array.Copy(BitConverter.GetBytes(keySize), 0, importedKeyBytes, 12, 4);
            Array.Copy(encodeKeyParameters, 0, importedKeyBytes, 16, encodeKeyParameters.Length);
            Array.Copy(publicKeyParameters.PublicKey, 0, importedKeyBytes, encodeKeyParameters.Length + 16, publicKeyParameters.PublicKey.Length);

            return(importedKeyBytes);
        }