/// <summary> /// ASN.1 кодирование структуры транспорта. /// </summary> /// /// <param name="transport">ASN.1 транспорт.</param> /// /// <returns>Закодированная структура.</returns> /// /// <argnull name="transport" /> /// <exception cref="CryptographicException">При ошибках /// кодирования исходной структуры.</exception> public static byte[] EncodeGostKeyTransport( GostKeyTransportObject transport) { if (transport == null) { throw new ArgumentNullException("transport"); } GostR3410_KeyTransport asnTransport = new GostR3410_KeyTransport(); Asn1BerEncodeBuffer buffer = new Asn1BerEncodeBuffer(); try { asnTransport.sessionEncryptedKey = new Gost28147_89_EncryptedKey(); asnTransport.sessionEncryptedKey.encryptedKey = new Gost28147_89_Key( transport.sessionEncryptedKey_._encryptedKey); asnTransport.sessionEncryptedKey.macKey = new Gost28147_89_MAC(transport.sessionEncryptedKey_._mac); asnTransport.transportParameters = new GostR3410_TransportParameters(); asnTransport.transportParameters.ukm = new Asn1OctetString(transport.sessionEncryptedKey_._ukm); asnTransport.transportParameters.encryptionParamSet = CreateGost28147_89_ParamSet( transport.sessionEncryptedKey_._encryptionParamSet); if (transport.Transport.TransportParameters.DigestParamSet == "1.2.643.2.2.30.1") { asnTransport.transportParameters.ephemeralPublicKey = PackPublicKeyInfo2001(transport.transportParameters_); } else if (transport.Transport.TransportParameters.DigestParamSet == "1.2.643.7.1.1.2.2") { asnTransport.transportParameters.ephemeralPublicKey = PackPublicKeyInfo2012_256(transport.transportParameters_); } else if (transport.Transport.TransportParameters.DigestParamSet == "1.2.643.7.1.1.2.3") { asnTransport.transportParameters.ephemeralPublicKey = PackPublicKeyInfo2012_512(transport.transportParameters_); } asnTransport.Encode(buffer); } catch (Exception e) { throw new CryptographicException( "Resources.Cryptography_ASN1_EncodeWithException " + "GostR3410_KeyTransport", e); } return(buffer.MsgCopy); }