Причина Xmonad
обрабатывает ALT_R + ENTER , как если бы это было mod1 + ENTER , потому что X
устанавливает mod1Mask
бит в поле состояния
события KeyEvent
, как показано в выходных данных xev
в вопросе. Xmonad
не знает, что ALT_R - это нажатая клавиша, потому что X
сообщает ему, что ENTER был нажат с state = mod1Mask
.
Почему X
не соблюдает xmodmap
- это отдельный вопрос, задаваемый здесь:
Почему X не обрабатывает ALT_L и ALT_R по-разному w / r / t Mod1
Ваше сообщение явно является попыткой очистить сообщение S/MIME -подписанное (, также известное как сообщение с отдельной подписью ), см. rfc5751 sec 3.4.3 et pred, хотя на самом деле это неверно. ; первая часть, представляющая собой объект данных, не имеет заголовков MIME.
Некоторое программное обеспечение, включая OpenSSL, может справиться с этим отклонением, но OpenSSL (по-прежнему! )создает отдельные подписи с подтипом x-pkcs7-signature
из v2 (rfc2311 ), а не pkcs7-signature
из более новых версий, как в вашем сообщении.
Отсоединенная подпись PKCS7/CMS, используемая в этом типе сообщения S/MIME, имеет несколько необязательных компонентов, которые могут использоваться или нет. Из усеченных данных, которые вы показываете, невозможно определить, какие параметры используются в этом сообщении, и в любом случае вы не указываете, так или иначе вы заботитесь об этих параметрах.
What is the command to generate it ?
С OpenSSLopenssl smime -sign -sha256 -signer $certfile [-inkey $keyfile]
без-nodetach
создает сообщение в этом формате, за исключением того, что я отметил выше, используя более старый подтип с x-
. Параметр -inkey
можно опустить, если закрытый ключ включен в тот же файл, что и сертификат. Вы можете опционально:
включать или не включать сертификат подписавшего
явно включать дополнительный (цепочку )сертификат (с)
использовать атрибуты signedAttributes или нет, как описано на справочной странице вашей системы или в Интернете . Вы можете вводить и выводить в именованные файлы или использовать stdin и stdout, которые, в свою очередь, могут быть перенаправлены или переданы оболочкой (или ОС ).
За исключением очень старых версий OpenSSL (0.9.8 или ниже ), вы также можете использовать openssl cms
, который на самом деле является надмножеством openssl smime
и, несмотря на его название, по умолчанию выполняет S /MIME --чтобы получить илиopenssl smime
илиopenssl cms
для выполнения CMS, вы должны указать -outform
для подписи или шифрования или -inform
для проверки или расшифровки!
Команда smime verify
в вашем Q проверяет подпись S/MIME (и по умолчанию применимую цепочку сертификатов, но похоже, что вы используете автономный сертификат, и, следовательно, нет реальной цепочки )и затем отбрасывает его, выводя только подписанные данные, которые в вашем случае представляют собой XML.
Внешний тег<cms>
может означать, что эти данные предназначены для представления синтаксиса криптографических сообщений, преемника PKCS7 (rfc5652 et pred ), но эта комбинация данных не соответствует какому-либо сообщению CMS.. Названия предполагают, что он содержит хеш-значение для определенного файла; если у вас есть (предполагаемая )копия этого файла и вы хотите сверить хэш с файлом, OpenSSL не может сделать это автоматически (и даже проверку, выполняемую обычными командами Unix {md5,sha1,etc}sum -c
с использованием более простого объявления -текстовый формат hoc ). Чтобы проверить вручную, ваша вторая команда является правильным запуском; чтобы извлечь хэш из XML, вы можете сделать что-то вроде
$ grep -Po '<digest>\K[^<]*'
или, если у вас нет grep с PCRE, есть эквиваленты с sed awk perl
, почти наверняка охваченные другими вопросами здесь; а затем сравните два хеш-значения с помощью оболочки test "$x" == "$y"
или [ "$x" == "$y" ]
, или bash,ksh,zsh [[
, или awk
, или perl
, или другими методами.
OTOH, если ваша проблема на самом деле в создании тела XML, OpenSSL может обрабатывать только хэш-значение; остальным придется использовать стандартные текстовые инструменты или, возможно, инструменты XML.