View Javadoc
1   /*
2    * Copyright (C) 2020 Thomas Wolf <thomas.wolf@paranor.ch> and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  package org.eclipse.jgit.lib;
11  
12  import org.eclipse.jgit.annotations.NonNull;
13  import org.eclipse.jgit.annotations.Nullable;
14  import org.eclipse.jgit.api.errors.CanceledException;
15  import org.eclipse.jgit.api.errors.UnsupportedSigningFormatException;
16  import org.eclipse.jgit.transport.CredentialsProvider;
17  
18  /**
19   * Creates GPG signatures for Git objects.
20   *
21   * @since 5.11
22   */
23  public interface GpgObjectSigner {
24  
25  	/**
26  	 * Signs the specified object.
27  	 *
28  	 * <p>
29  	 * Implementors should obtain the payload for signing from the specified
30  	 * object via {@link ObjectBuilder#build()} and create a proper
31  	 * {@link GpgSignature}. The generated signature must be set on the
32  	 * specified {@code object} (see
33  	 * {@link ObjectBuilder#setGpgSignature(GpgSignature)}).
34  	 * </p>
35  	 * <p>
36  	 * Any existing signature on the object must be discarded prior obtaining
37  	 * the payload via {@link ObjectBuilder#build()}.
38  	 * </p>
39  	 *
40  	 * @param object
41  	 *            the object to sign (must not be {@code null} and must be
42  	 *            complete to allow proper calculation of payload)
43  	 * @param gpgSigningKey
44  	 *            the signing key to locate (passed as is to the GPG signing
45  	 *            tool as is; eg., value of <code>user.signingkey</code>)
46  	 * @param committer
47  	 *            the signing identity (to help with key lookup in case signing
48  	 *            key is not specified)
49  	 * @param credentialsProvider
50  	 *            provider to use when querying for signing key credentials (eg.
51  	 *            passphrase)
52  	 * @param config
53  	 *            GPG settings from the git config
54  	 * @throws CanceledException
55  	 *             when signing was canceled (eg., user aborted when entering
56  	 *             passphrase)
57  	 * @throws UnsupportedSigningFormatException
58  	 *             if a config is given and the wanted key format is not
59  	 *             supported
60  	 */
61  	void signObject(@NonNull ObjectBuilder object,
62  			@Nullable String gpgSigningKey, @NonNull PersonIdent committer,
63  			CredentialsProvider credentialsProvider, GpgConfig config)
64  			throws CanceledException, UnsupportedSigningFormatException;
65  
66  	/**
67  	 * Indicates if a signing key is available for the specified committer
68  	 * and/or signing key.
69  	 *
70  	 * @param gpgSigningKey
71  	 *            the signing key to locate (passed as is to the GPG signing
72  	 *            tool as is; eg., value of <code>user.signingkey</code>)
73  	 * @param committer
74  	 *            the signing identity (to help with key lookup in case signing
75  	 *            key is not specified)
76  	 * @param credentialsProvider
77  	 *            provider to use when querying for signing key credentials (eg.
78  	 *            passphrase)
79  	 * @param config
80  	 *            GPG settings from the git config
81  	 * @return <code>true</code> if a signing key is available,
82  	 *         <code>false</code> otherwise
83  	 * @throws CanceledException
84  	 *             when signing was canceled (eg., user aborted when entering
85  	 *             passphrase)
86  	 * @throws UnsupportedSigningFormatException
87  	 *             if a config is given and the wanted key format is not
88  	 *             supported
89  	 */
90  	public abstract boolean canLocateSigningKey(@Nullable String gpgSigningKey,
91  			@NonNull PersonIdent committer,
92  			CredentialsProvider credentialsProvider, GpgConfig config)
93  			throws CanceledException, UnsupportedSigningFormatException;
94  
95  }