Зависимость api-sdk-crypto включает в себя разнообразные сервисы, реализующие криптографические методы и алгоритмы. В настоящее время поддерживается только подписание RSA-сертификатом файлов формата CMS , JSON и XML.
Подключение зависимости
Перейти в build.gradle Вашего модуля и добавить зависимость внутрь блока dependencies { ... } .
1dependencies {
2 implementation("com.alfa.api.sdk:api-sdk-crypto:0.5.1")
3}
Инициализация SDK
Описание к инициализации можно посмотреть здесь.
Создание сервисов
Чтобы создать CmsSignatureService, Вам необходимо написать следующий код.
1CmsSignatureService cmsSignatureService = new CmsSignatureServiceImpl(
2KeyStoreParameters.builder()
3 .path("/path/to/keystore")
4 .type(KeyStoreParameters.KeyStoreType.JKS)
5 .password("example")
6 .privateKey(PrivateKeyParameters.builder()
7 .alias("example")
8 .password("example")
9 .build())
10 .certificate(CertificateParameters.builder()
11 .alias("example")
12 .build())
13 .build(),
14 SignatureAlgorithm.RSA
15);
Аналогично для JwsSignatureService и XmlSignatureService.
CMS
1byte[] detachedSignature = cmsSignatureService.signDetached("some data to be signed".getBytes(StandardCharsets.UTF_8));
2boolean verificationResult = cmsSignatureService.verifyDetached("some data to be signed".getBytes(StandardCharsets.UTF_8), detachedSignature);
3
4byte[] attachedSignature = cmsSignatureService.signAttached("some data to be signed".getBytes(StandardCharsets.UTF_8));
5boolean verificationResult = cmsSignatureService.verifyAttached(attachedSignature);
signDetached(byte[] data) - этот метод подписывает данные, используя метод отдельной подписи. Он принимает данные, которые необходимо подписать, в качестве входных данных и возвращает подпись в виде массива байт.
verifyDetached(byte[] data, byte[] signature) - этот метод проверяет соответствие отдельной подписи исходным данным. Для этого требуется, чтобы исходные данные и подпись были проверены в качестве входных данных. Он возвращает значение true, если подпись действительна, и значение false в противном случае.
signAttached(byte[] data) - этот метод подписывает предоставленные данные прикреплённой подписью. Он принимает данные, которые необходимо подписать, в качестве входных данных и возвращает заключённые в однобайтовый массив данные вместе с подписью.
verifyAttached(byte[] dataWithSignature) - этот метод проверяет приложенную подпись на соответствие предоставленным данным, которые включают подпись. Он принимает данные с приложенной подписью в качестве входных данных и возвращает значение true, если подпись действительна, и значение false в противном случае.
JWS
1byte[] jwsWithoutData = jwsSignatureService.signDetached("{\"some\":\"json\"}");
2boolean verificationResult = jwsSignatureService.verifyDetached("{\"some\":\"json\"}", jwsWithoutData);
3
4byte[] jwsWithData = jwsSignatureService.signAttached("{\"some\":\"json\"}");
5boolean verificationResult = jwsSignatureService.verifyAttached(jwsWithData);
signDetached(String data) - генерирует JWS-подпись для заданных данных, не включая сами данные в подпись. Возвращает подпись в виде строки.
verifyDetached(String data, String jwsWithoutData) - проверяет соответствие отдельной подписи JWS исходным данным. Возвращает значение true, если подпись действительна и данные не были изменены; в противном случае возвращает значение false.
signAttached(String data) - создает подпись JWS, которая вставляет заданные данные в саму подпись. Возвращает объединённую подпись и данные в виде строки.
verifyAttached(String jwsWithData) - проверяет достоверность подписи JWS, содержащей внедрённые данные. Возвращает значение true, если подпись действительна, а внедрённые данные не изменены; в противном случае возвращает значение false.
XMLDsig
1byte[] signedXml = xmlSignatureService.sign("<Some>Xml</Some>");
2boolean verificationResult = xmlSignatureService.verify(signedXml);
sign(String data) - этот метод принимает XML-строку (данные) в качестве входных данных и возвращает новую строку, в которой исходное содержимое XML подписано цифровой подписью. Возвращаемая строка включает в себя как исходное содержимое XML, так и встроенную подпись.
verify(String dataWithSignature) - этот метод принимает строку XML (dataWithSignature), содержащую встроенную подпись. Он проверяет соответствие подписи ожидаемой подписи и возвращает значение true, если подпись действительна, или значение false, если это не так.