Skip to content

Commit

Permalink
FOP-3166: Add option to sign PDF
Browse files Browse the repository at this point in the history
  • Loading branch information
simonsteiner1984 committed Feb 7, 2024
1 parent 75e734c commit 08d676e
Show file tree
Hide file tree
Showing 12 changed files with 619 additions and 1 deletion.
12 changes: 12 additions & 0 deletions fop-core/pom.xml
Expand Up @@ -111,6 +111,18 @@
<version>1.1.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15to18</artifactId>
<version>1.77</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.77</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai-codec</artifactId>
Expand Down
@@ -0,0 +1,63 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.fop.pdf;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.cms.CMSObjectIdentifiers;
import org.bouncycastle.cms.CMSTypedData;

import org.apache.commons.io.IOUtils;

/**
* Wraps a InputStream into a CMSProcessable object for bouncy castle. It's a memory saving
* alternative to the {@link org.bouncycastle.cms.CMSProcessableByteArray CMSProcessableByteArray}
* class.
*/
class CMSProcessableInputStream implements CMSTypedData {
private InputStream in;
private final ASN1ObjectIdentifier contentType;

CMSProcessableInputStream(InputStream is) {
this(new ASN1ObjectIdentifier(CMSObjectIdentifiers.data.getId()), is);
}

CMSProcessableInputStream(ASN1ObjectIdentifier type, InputStream is) {
contentType = type;
in = is;
}

@Override
public Object getContent() {
return in;
}

@Override
public void write(OutputStream out) throws IOException {
// read the content only one time
IOUtils.copy(in, out);
in.close();
}

@Override
public ASN1ObjectIdentifier getContentType() {
return contentType;
}
}
57 changes: 57 additions & 0 deletions fop-core/src/main/java/org/apache/fop/pdf/PDFSignParams.java
@@ -0,0 +1,57 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* $Id$ */
package org.apache.fop.pdf;

public class PDFSignParams {
private String pkcs12;
private String name;
private String location;
private String reason;
private String password = "";

public PDFSignParams(String pkcs12, String name, String location, String reason, String password) {
this.pkcs12 = pkcs12;
this.name = name;
this.location = location;
this.reason = reason;
if (password != null) {
this.password = password;
}
}

public String getPkcs12() {
return pkcs12;
}

public String getName() {
return name;
}

public String getLocation() {
return location;
}

public String getReason() {
return reason;
}

public String getPassword() {
return password;
}
}

0 comments on commit 08d676e

Please sign in to comment.