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); }
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); }