コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }