Статус: Участник
Группы: Участники
Зарегистрирован: 11.06.2014(UTC) Сообщений: 16 Откуда: Омцк Сказал(а) «Спасибо»: 3 раз Поблагодарили: 1 раз в 1 постах
|
Коллеги, здравствуйте! Пытаюсь создать отсоединенную CAdES-T, полагая, что вернется как раз то, что нужно, но получаю какой-то непонятный формат, с виду в guiDumpASN похоже на подпись, но http://www.gosuslugi.ru/pgu/eds/ не переваривает - отвечает "Подлинность не подтверждена". Можете подсказать, что делаю не так? Цитата: ... CAdESSignature cadesSignature = new CAdESSignature(true); // Создаем подписанта CAdES-BES. cadesSignature.addSigner(conf.getKeys()[0], conf.getCertificatesChain(), CAdESType.CAdES_BES, null); byte[] cadesCms = cadesSignature.sign(data);
Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(cadesCms); ContentInfo сInfo = new ContentInfo(); сInfo.decode(asnBuf); SignedData cms = (SignedData) сInfo.content; SignerInfo signerInfo = cms.signerInfos.elements[0]; addSignatureTimeStamp(signerInfo, signerInfo.signature.toString().getBytes());
Asn1BerEncodeBuffer asnBuf2 = new Asn1BerEncodeBuffer(); сInfo.encode(asnBuf2, true); return asnBuf2.getMsgCopy();
Цитата: private void addSignatureTimeStamp(SignerInfo signerInfo, byte[] sign) { TimeStampToken token = timestampData(sign).timeStampToken; Attribute timeStamp = new Attribute(CMStools.OBJ_OID_ATTR_SIGNATURE_TIMESTAMP, new Attribute_values(1)); timeStamp.values.elements[0] = token; signerInfo.unsignedAttrs = new UnsignedAttributes(1); signerInfo.unsignedAttrs.elements[0] = timeStamp; } public TimeStampResp timestampData(byte[] signature) {
try { final String hashAlg = TSPAlgorithms.GOST3411; byte[] imprint = getMessageImprint(signature, hashAlg);
byte[] request = createTimestampRequest(imprint, hashAlg);
org.bouncycastle.asn1.tsp.TimeStampResp resp = getTimeStampResp(conf.getTspServerAddress(), request); // response.validate(req);
TimeStampResp response = new TimeStampResp(); response.decode(new Asn1DerDecodeBuffer(resp.getEncoded())); return response; } catch (IOException | NoSuchAlgorithmException | Asn1Exception e) { throw new ErlJCPException("Cannot obtain timestamp data", e); } }
private byte[] createTimestampRequest(byte[] imprint, String hashAlg) throws IOException { TimeStampRequestGenerator reqgen = new TimeStampRequestGenerator(); BigInteger nonce = BigInteger.valueOf(System.currentTimeMillis()); // imprint - хеш данных, hashAlg - OID алгоритма хеширования TimeStampRequest req = reqgen.generate(hashAlg, imprint, nonce); return req.getEncoded(); }
private byte[] getMessageImprint(byte[] signature, String hashAlg) throws NoSuchAlgorithmException { MessageDigest messageDigest = MessageDigest.getInstance(hashAlg); messageDigest.update(signature, 0, signature.length); return messageDigest.digest(); }
Отредактировано пользователем 19 мая 2015 г. 11:40:17(UTC)
| Причина: ошибка в описании Вложение(я): data.xls (114kb) загружен 7 раз(а). signature.txt (2kb) загружен 12 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Попробуйте декодировать отдельно исходную подпись, потом декодировать штамп, потом уже подпись со штампом. Автор: olch сInfo.encode(asnBuf2, true);
Попробуйте использовать Info.encode(asnBuf2). |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.06.2014(UTC) Сообщений: 16 Откуда: Омцк Сказал(а) «Спасибо»: 3 раз Поблагодарили: 1 раз в 1 постах
|
Поправила, это все таки похоже на подпись.. Но что-то с ней не то
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.06.2014(UTC) Сообщений: 16 Откуда: Омцк Сказал(а) «Спасибо»: 3 раз Поблагодарили: 1 раз в 1 постах
|
Добавила файл с данными и подпись
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Подпись декодируется (штамп есть). Проверить не удается, т.к. нет цепочки сертификатов. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
olch оставлено 02.06.2015(UTC)
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.06.2014(UTC) Сообщений: 16 Откуда: Омцк Сказал(а) «Спасибо»: 3 раз Поблагодарили: 1 раз в 1 постах
|
В итоге заменила подпись, которую улучшаю, то есть вместо CAdES-BES взяла пример с генерацией CMS, по сути то же самое плюс цепочка сертификатов
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close