/* * Copyright 2012-2013 Alfresco Software Limited. * * Licensed under the GNU Affero General Public License, Version 3.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.gnu.org/licenses/agpl-3.0.html * * If you do not wish to be bound to the terms of the AGPL v3.0, * A commercial license may be obtained by contacting the author. * * 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. * * This file is part of an unsupported extension to Alfresco. * */ package org.alfresco.extension.countersign.signature; import java.awt.image.BufferedImage; import java.io.InputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; public interface SignatureProvider { /** * Gets the private key to be used * * @return */ public KeyStore getUserKeyStore(String storePassword); /** * Gets a BufferedImage representation of the signature * * @return */ public BufferedImage getSignatureImage(); /** * Gets the source for the signature. This could be JSON, for the built in * sig pad, or it could be a URL, depending on implementation * * @return */ public String getSignatureSource(); /** * Save the signature image provided by the user * * @param image */ public void saveSignatureImage(BufferedImage image, String source); /** * Checks to see if a signature is available * * @return */ public boolean signatureAvailable(); /** * Gets a user's public Key * * @return */ public PublicKey getPublicKey(); /** * Validate a signature and hash, using the user's CURRENT public key. If a user invalidates * their key by resetting it, this validation will fail. * * @param sig * @param hash * @return */ public boolean validateSignature(byte[] sig, byte[] hash); /** * Compute a hash using the configured algorithm. Signatures that are later validated will be * validated expecting the same algorithm. * * @param contentStream * @return */ public byte[] computeHash(InputStream contentStream); /** * Sign a hash, using the user's private key * @param hash * @param key * @return */ public byte[] signHash(byte[] hash, String storePassword) throws Exception ; }