/// <summary> /// Декодирование ASN.1 структуры зашифрованного общего секрета. /// </summary> /// /// <param name="data">ASN.1 закодированная структура.</param> /// <param name="wk">Зашифрованный ГОСТ Р 34.10 ключ.</param> /// /// <argnull name="data" /> /// <argnull name="wk" /> /// <exception cref="CryptographicException">При ошибках /// декодирования исходной структуры.</exception> public static void DecodeXmlGostR3410WrappedKey(byte[] data, GostWrappedKeyObject wk) { Asn1BerDecodeBuffer buffer = new Asn1BerDecodeBuffer(data); GostR3410_KeyWrap wrapped = new GostR3410_KeyWrap(); wrapped.Decode(buffer); wk._encryptedKey = wrapped.encryptedKey.encryptedKey.Value; wk._mac = wrapped.encryptedKey.macKey.Value; wk._ukm = wrapped.encryptedParameters.ukm.Value; wk._encryptionParamSet = ToString( wrapped.encryptedParameters.encryptionParamSet); }
/// <summary> /// Кодирование ASN.1 структуры зашифрованного ключа. /// </summary> /// /// <param name="wk">Зашифрованный ключ.</param> /// /// <returns>Закодированная структура.</returns> /// /// <argnull name="wk" /> /// <exception cref="CryptographicException">При ошибках /// кодирования исходной структуры.</exception> public static byte[] EncodeXmlGostR3410WrappedKey(GostWrappedKeyObject wk) { GostR3410_KeyWrap wrapped = new GostR3410_KeyWrap(); Asn1BerEncodeBuffer buffer = new Asn1BerEncodeBuffer(); wrapped.encryptedKey = new Gost28147_89_EncryptedKey(); wrapped.encryptedKey.macKey = new Gost28147_89_MAC(wk._mac); wrapped.encryptedKey.encryptedKey = new Gost28147_89_Key(wk._encryptedKey); wrapped.encryptedParameters = new Gost28147_89_KeyWrapParameters(); wrapped.encryptedParameters.ukm = new Asn1OctetString(wk._ukm); wrapped.encryptedParameters.encryptionParamSet = CreateGost28147_89_ParamSet(wk._encryptionParamSet); wrapped.Encode(buffer); return(buffer.MsgCopy); }