/** * DSS Hwcrypto Demo * * Copyright (c) 2015 Estonian Information System Authority * * The MIT License (MIT) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package ee.sk.hwcrypto.demo.signature; import ee.sk.hwcrypto.demo.model.FileWrapper; import ee.sk.hwcrypto.demo.model.SigningSessionData; import eu.europa.ec.markt.dss.ws.signature.MimeType; import eu.europa.ec.markt.dss.ws.signature.WsDocument; import eu.europa.ec.markt.dss.ws.signature.WsParameters; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; public class FileSignerTest { static final String TEST_CERT = "308204FD308203E5A00302010202105F9C949FB1E2DF3F5176756F97FEE295300D06092A864886F70D0101050500306C310B300906035504061302454531223020060355040A0C19415320536572746966697473656572696D69736B65736B7573311F301D06035504030C1654455354206F66204553544549442D534B20323031313118301606092A864886F70D0109011609706B6940736B2E6565301E170D3133303432333131353030375A170D3138303132393231353935395A30819E310B3009060355040613024545310F300D060355040A0C06455354454944311A3018060355040B0C116469676974616C207369676E61747572653126302406035504030C1D4DC3844E4E494B2C4D4152492D4C4949532C34373130313031303033333110300E06035504040C074DC3844E4E494B31123010060355042A0C094D4152492D4C494953311430120603550405130B343731303130313030333330820122300D06092A864886F70D01010105000382010F003082010A02820100A8DF97BCCEF6DC6222D62289393EC771133F36E23AD52534F76F2CE8D62128AB219F67CCE751EBC8DA1D3D93A7A5BA48372236E59F1C7FA0BF5BE4967FF9CF7949B9809CDCBA6FB44AD7B921D26B7E8FA7C095479FB5DC91C83AAFFA8EC2CE36A1DE3A2170DC217E3A944ACA3E95D59D55E4B488188CE634C63FCB1E9EFBEAF0A57F7944EF4A573981B204FE59F7058BF6EC4C16339413CB012488A247133D117CE4DFB9352671D721CC593B0CC1BD602FA0950C19D1C0A359CCF1F4A733FBABD4E69BCAD390E7ECF44995C3B0EB579CEC285C8D355F0EF94CEBC30E9E9EE06935574CC0925CE168BC2BC10730BD1B2FFBE9E7F13FD1044D1B019CDBBD2AFC81020440000081A38201663082016230090603551D1304023000300E0603551D0F0101FF0404030206403081990603551D2004819130818E30818B060A2B06010401CE1F030101307D305806082B06010505070202304C1E4A00410069006E0075006C0074002000740065007300740069006D006900730065006B0073002E0020004F006E006C007900200066006F0072002000740065007300740069006E0067002E302106082B060105050702011615687474703A2F2F7777772E736B2E65652F6370732F301D0603551D0E0416041489EDF32A23C550F400DB56AB0736CFAF26613C6A302206082B06010505070103041630143008060604008E4601013008060604008E460104301F0603551D2304183016801441B6FEC5B1B1B453138CFAFA62D0346D6D22340A30450603551D1F043E303C303AA038A0368634687474703A2F2F7777772E736B2E65652F7265706F7369746F72792F63726C732F746573745F657374656964323031312E63726C300D06092A864886F70D01010505000382010100CA6F7AECFE9D00646E06A90160F2CDBE9FFEC830D625E7F9502766B3EB839E29C35C76E4D95B049A09D82FC4064130A320465267D0294ED9D99CACD90E3A4891ACFA7E0DEC6DC12CB8658E729F5E47AD40D8749BE302AE355D0BA0232F479F172DF633FBA3EA94C1600B81C5FC14A4A01F5AC66F63D5640AE9EBFCAB701E39EE34484DC7CF918551192DFA406FE0D96CC7B7F229B2ABC1998FA8B405C89B3797AE963C6A8BB07DCC8772F1EFF403FCDAE26914FB00BD2FA4A8222379ED61DA1DEC705E483379824E550E870F58DA1ED07D1CAC27FB7DFC4863245D9CEE769412FB4544354966140758006614F87281A2B33F16C6AF29A80E6B1DF039F2CDF738"; static final String DATA_TO_SIGN = "test"; static final String HASH_TO_SIGN_IN_HEX = "9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08"; static final String SIGNATURE_IN_HEX = "64CA59903D10CFE72F67469B799911770A314CFCE1CF14B8A0ECF3D62BEA73A3ED30CCCC297008DEE8E77BDA8C874612A6DD533B115163168E433A276B4B7778D27683C9DB52FF3280A9C40564CC1CB2E42A37CFFFA2B4F93D238246A2EF17B391E7E85082198984721B3504DA6D148C062053122B95DF908796F3EC92C35301D6504FB3BD5E9CBEDD8FAC3FFD721BC29289C6870D7550D0AA815A8F9B52DD473997F854430157AD35D44AC0C2EED667800488BE95EFD99CCEC1C916FF1D0661B424FB899422224DCC9F4B4933CFEB0C5C1BABDF49F2AF4B2E49ACAB8877DEFD50673A6C9A1C8D010F368D154C473FFD220C8E6F00D8F0428E609B38E5B37307"; private SignatureServiceConnectorSpy signatureServiceConnectorSpy; private WsDocument signedDocument; private FileSigner fileSigner; private SigningSessionData sessionData; @Before public void setUp() throws Exception { fileSigner = new FileSigner(); signedDocument = new WsDocument(); sessionData = new SigningSessionData(); signatureServiceConnectorSpy = new SignatureServiceConnectorSpy(); fileSigner.sessionData = sessionData; fileSigner.signatureServiceConnector = signatureServiceConnectorSpy; } @Test public void testGettingDataToSign() throws Exception { FileWrapper file = createFile("test.txt", "Test data to sign"); String dataToSign = fileSigner.getDataToSign(file, TEST_CERT); assertEquals(HASH_TO_SIGN_IN_HEX, dataToSign); assertNotNull(sessionData.getSignatureContainer()); assertNotNull(sessionData.getSignatureParameters()); } @Test public void testGettingSignedDocument() throws Exception { signedDocument.setName("test.name"); signedDocument.setMimeType(createMimeType("mime/type")); signedDocument.setBytes("testData".getBytes()); FileWrapper fileWrapper = fileSigner.signDocument(SIGNATURE_IN_HEX); assertEquals("test.name", fileWrapper.getFileName()); assertEquals("mime/type", fileWrapper.getMimeType()); assertArrayEquals("testData".getBytes(), fileWrapper.getBytes()); } @Test public void testSigningDocument() throws Exception { FileWrapper file = createFile("test.txt", "Test data to sign"); String dataToSign = fileSigner.getDataToSign(file, TEST_CERT); assertEquals(HASH_TO_SIGN_IN_HEX, dataToSign); FileWrapper fileWrapper = fileSigner.signDocument(SIGNATURE_IN_HEX); assertNotNull(fileWrapper); assertSame(sessionData.getSignatureContainer(), signatureServiceConnectorSpy.usedDocument); assertSame(sessionData.getSignatureParameters(), signatureServiceConnectorSpy.usedParameters); } private FileWrapper createFile(String name, String data) { FileWrapper file = new FileWrapper(); file.setBytes(data.getBytes()); file.setFileName(name); return file; } private MimeType createMimeType(String mimeTypeString) { MimeType mimeType = new MimeType(); mimeType.setMimeTypeString(mimeTypeString); return mimeType; } private class SignatureServiceConnectorSpy extends SignatureServiceConnector { WsDocument usedDocument; WsParameters usedParameters; byte[] usedSignature; @Override public byte[] getDataToSign(WsDocument wsDocument, WsParameters wsParameters) { return DATA_TO_SIGN.getBytes(); } @Override public WsDocument signDocument(WsDocument document, WsParameters parameters, byte[] signature) throws SigningFailedException { usedDocument = document; usedParameters = parameters; usedSignature = signature; return signedDocument; } } }