Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline basinilya  
#1 Оставлено : 20 февраля 2014 г. 19:11:34(UTC)
basinilya

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.02.2014(UTC)
Сообщений: 1

Я искал на сайте пример валидации ЭЦП PDF для java, но нашел только запись в блоге про .NET.
Есть пример на сайте iText для негостовских подписей http://itextpdf.com/examples/iia.php?id=222 .
Сейчас пробую адаптировать к JCP. При вызове java.security.Signature.getInstance() получаю "no such algorithm: GOST3411withECGOST3410 for provider JCP"
Версия JCP 1.0.54
Код:
<dependency><groupId>org.bouncycastle</groupId><artifactId>bcpkix-jdk15on</artifactId><version>1.50</version><scope>test</scope></dependency>
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.0</version></dependency>


Код:

package org.foo;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.KeyStore.LoadStoreParameter;
import java.security.Provider.Service;
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Set;

import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.security.PdfPKCS7;

import ru.CryptoPro.JCP.JCP;
import ru.CryptoPro.Crypto.CryptoProvider;

@SuppressWarnings("restriction")
public class PdfVerifier {

	public static final String CERT_STORE_TRUSTED_TYPE = "CertStore";
	public static final String CERT_STORE_TRUSTED_PATH = "c:/Users/basin/Documents/archive-docs-trusted";
	public static final char[] CERT_STORE_TRUSTED_PASS = { 's','e','c','r','e','t' };

	public static final String CERT_STORE_REVOKED_TYPE = "CertStore";
	public static final String CERT_STORE_REVOKED_PATH = "c:/Users/basin/Documents/archive-docs-revoked";
	public static final char[] CERT_STORE_REVOKED_PASS = { 's','e','c','r','e','t' };

	public static final String FILENAME = "c:/VM_share/sig/pdf/Фасады.pdf"; 

	public static final String PROVIDER_NAME = JCP.PROVIDER_NAME;
	
	public static void main(String[] args) throws Exception {
		new PdfVerifier(new KeyStoreInfo(CERT_STORE_TRUSTED_TYPE, new FileInputStream(CERT_STORE_TRUSTED_PATH), CERT_STORE_TRUSTED_PASS),
				new KeyStoreInfo(CERT_STORE_REVOKED_TYPE, new FileInputStream(CERT_STORE_REVOKED_PATH), CERT_STORE_REVOKED_PASS)).verify(new FileInputStream(FILENAME));
	}

	private KeyStore loadKeyStore(KeyStoreInfo trusted) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
		KeyStore keystore = KeyStore.getInstance(trusted.getType());
		keystore.load(trusted.getStream(), trusted.getPassword());
		return keystore;
	}

	public void verify(InputStream pdfStream) throws IOException {
		PdfReader reader = new PdfReader(pdfStream);
		AcroFields af = reader.getAcroFields();
		ArrayList<String> names = af.getSignatureNames();
        for (String name : names) {
            System.out.println("Signature name: " + name);
            System.out.println("Signature covers whole document: " + af.signatureCoversWholeDocument(name));
            System.out.println("Document revision: " + af.getRevision(name) + " of " + af.getTotalRevisions());
            //Provider prov = sun.security.jca.Providers.getProviderList().getProvider(PROVIDER_NAME);
            //Set<Service> s = prov.getServices();
            //prov = null;
            //CryptoProvider.PROVIDER_NAME;
            PdfPKCS7 pk = af.verifySignature(name, PROVIDER_NAME);
        }
	}

	public PdfVerifier(KeyStoreInfo trustedKSInfo, KeyStoreInfo revokedKSInfo) throws Exception {
		KeyStore ksTrusted = loadKeyStore(trustedKSInfo);
		KeyStore ksRevoked = loadKeyStore(revokedKSInfo);
        for (Enumeration<String> aliases = ksTrusted.aliases(); aliases.hasMoreElements();) {
            String alias = aliases.nextElement();
            System.out.println(alias + " " + ksTrusted.isCertificateEntry(alias));
        }

		//keyStore.is
	}
}
class KeyStoreInfo {
	private String type;
	private InputStream stream;
	private char[] password;
	private LoadStoreParameter loadStoreParam;

	public KeyStoreInfo(String storeType, InputStream store,
			char[] storePassword) {
		this(storeType, store, storePassword, null);
	}

	public KeyStoreInfo(String storeType, InputStream store,
			char[] storePassword, LoadStoreParameter loadStoreParam) {
		this.type = storeType;
		this.stream = store;
		setPassword(storePassword);
		this.loadStoreParam = loadStoreParam;
	}

	public String getType() {
		return type == null ? KeyStore.getDefaultType() : type;
	}

	public void setType(String storeType) {
		this.type = storeType;
	}

	public InputStream getStream() {
		return stream;
	}

	public void setStream(InputStream store) {
		this.stream = store;
	}

	public char[] getPassword() {
		return password;
	}

	public void setPassword(char[] storePassword) {
		this.password = storePassword == null ? null : Arrays.copyOf(
				storePassword, storePassword.length);
	}

	public LoadStoreParameter getLoadStoreParam() {
		return loadStoreParam;
	}

	public void setLoadStoreParam(LoadStoreParameter loadStoreParam) {
		this.loadStoreParam = loadStoreParam;
	}
}

Отредактировано пользователем 20 февраля 2014 г. 19:15:53(UTC)  | Причина: Не указана

Вложение(я):
Фасады.zip (335kb) загружен 5 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Евгений Афанасьев  
#2 Оставлено : 20 февраля 2014 г. 23:23:51(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,001
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 713 раз в 673 постах
Здравствуйте.

Автор: basinilya Перейти к цитате
"no such algorithm: GOST3411withECGOST3410 for provider JCP"

Алгоритма GOST3411withECGOST3410 в JCP не существует.
Смотрите http://www.cryptopro.ru/...sts&t=4205#post23002

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.