<page>
<title>How_to_sign_an_article_with_GPG</title>
<author_name>stjohn_piano</author_name>
<content>


Background:
- <link>
<type>hyperlink</type>
<reference>/pages/how_to_write_an_article</reference>
<text>How to write an article</text>
</link>
- GPG = "GNU Privacy Guard"
- <link>
<type>article</type>
<article_title>GPG_1.4.10_Stateless_Operations</article_title>
<datafeed>edgecase</datafeed>
<datafeed_article_id>98</datafeed_article_id>
<text>GPG 1.4.10 Stateless Operations</text>
</link>


Prerequisite:
- <link>
<type>hyperlink</type>
<reference>/pages/how_to_generate_a_gpg_key</reference>
<text>How to generate a GPG key</text>
</link>




<bold_lines>
1) Place an article you have written into its own separate text file.
</bold_lines>

For this recipe, we'll assume that the file is named "article.txt".




<bold_lines>
2) Remove the last newline from the data in the article file.
</bold_lines>

Even if you didn't write one yourself, some text editors (e.g. vim) add one automatically.

Rationale: The article data should be completely enclosed in an "\<article\>" tag and an "\</article\>" end tag.




<bold_lines>
3) Create a temporary home directory for GPG to use.
</bold_lines>

<code_lines>
mkdir tmp_home && chmod 700 tmp_home
</code_lines>




<bold_lines>
4) Import the private key into the temporary directory.
</bold_lines>

<code_lines>
gpg --no-default-keyring --homedir tmp_home --import \<pathToPrivateKeyFile\> \> /dev/null 2\>&1
</code_lines>

Example:
<code_lines>
gpg --no-default-keyring --homedir tmp_home --import ../keys/test_key_1_private_key.txt \> /dev/null 2\>&1
</code_lines>




<bold_lines>
5) Sign the article file, producing a detached signature file.
</bold_lines>

The signature will be made using the imported private key.

<code_lines>
gpg --no-default-keyring --homedir tmp_home --output detached_signature_file.txt.asc --armor --detach-sign article.txt
</code_lines>




<bold_lines>
6) Delete the temporary directory.
</bold_lines>

<code_lines>
rm -r tmp_home
</code_lines>




<bold_lines>
7) Delete the GPG wrapper lines around the signature data.
</bold_lines>

Let's do a worked example.

Here is the content of an example signature file:

<datablock_lines>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQIcBAABAgAGBQJcqgvJAAoJEJeH0ledzFCiXIMP/ilrdyl9/JZEV6EA3i89FwQW
1jNwjJ1WCmrYt3ydMxhvXbM6Ygd0V0sUNWFW/74CrDsV4PeqVP11WNUtCSlQEJ1G
/R/JjFegHv5dc3dHbhOeHIUqqP9SQb/KyjL59Hp/cVBmvKCqVZrgg9q0/nmhC3rh
205CGZnbcT/HjQj9wFIQ/p26GoFLFIJ937hOU3z3OlgZA4LfN/WnXvbbNMVn1zry
vz40L4Mbqd4BbUqsjSscY3xPUPlP3RnvHu5juXUByzVxV4zy17b+a0PGpSckTMHO
yQbYS53mX8j8G68KxGmFuB8Uwq/5QxvvmuMBOHsvJnF71d1zMsHRrWcBaE24hDlY
qYTfwnjhXsK/N/xA4PrzwhGZy1i1rOq1PMAQHuTFuuUxJUsOJLp7/BC5fBT3HXoj
vynQv0pk/eThz16DZPPlQ4P/ypfAYuruxMLkgnGlUjnB2vc05kAgTYV2z/YgOMxM
ZVZgtRFIw1G2rqYzvx7uiseQFbl9osi+Iab9SMmixBVClMA+qYHPYzbxEy223N5d
OTIADtci0jcS2L0DzXdLFhiHtHtt9/SZSZsXw+R1y1vZv/QcCZYrSPuqbRn6vssT
VlW67Jqnx5Zx4Y9VpxKmPrX7rEVqOgNgPh0IfgzaKJstb7Kmr8Nz/RByeWxYRg9e
zvXZSkj35QaJWhATLiCY
=PRNX
-----END PGP SIGNATURE-----
</datablock_lines>


Delete these lines at the top:

<datablock_lines>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

</datablock_lines>

And this one at the bottom:

<datablock_lines>
-----END PGP SIGNATURE-----
</datablock_lines>




<bold_lines>
8) Wrap the signature data in an "\<author_signature\>" tag.
</bold_lines>

Result:

<datablock_lines>
\<author_signature\>
iQIcBAABAgAGBQJcqgvJAAoJEJeH0ledzFCiXIMP/ilrdyl9/JZEV6EA3i89FwQW
1jNwjJ1WCmrYt3ydMxhvXbM6Ygd0V0sUNWFW/74CrDsV4PeqVP11WNUtCSlQEJ1G
/R/JjFegHv5dc3dHbhOeHIUqqP9SQb/KyjL59Hp/cVBmvKCqVZrgg9q0/nmhC3rh
205CGZnbcT/HjQj9wFIQ/p26GoFLFIJ937hOU3z3OlgZA4LfN/WnXvbbNMVn1zry
vz40L4Mbqd4BbUqsjSscY3xPUPlP3RnvHu5juXUByzVxV4zy17b+a0PGpSckTMHO
yQbYS53mX8j8G68KxGmFuB8Uwq/5QxvvmuMBOHsvJnF71d1zMsHRrWcBaE24hDlY
qYTfwnjhXsK/N/xA4PrzwhGZy1i1rOq1PMAQHuTFuuUxJUsOJLp7/BC5fBT3HXoj
vynQv0pk/eThz16DZPPlQ4P/ypfAYuruxMLkgnGlUjnB2vc05kAgTYV2z/YgOMxM
ZVZgtRFIw1G2rqYzvx7uiseQFbl9osi+Iab9SMmixBVClMA+qYHPYzbxEy223N5d
OTIADtci0jcS2L0DzXdLFhiHtHtt9/SZSZsXw+R1y1vZv/QcCZYrSPuqbRn6vssT
VlW67Jqnx5Zx4Y9VpxKmPrX7rEVqOgNgPh0IfgzaKJstb7Kmr8Nz/RByeWxYRg9e
zvXZSkj35QaJWhATLiCY
=PRNX
\</author_signature\>
</datablock_lines>




<bold_lines>
9) Place the signature data at the end of the article file, and wrap the result with a "\<signed_article\>" tag.
</bold_lines>

Here is the simplest possible article:

<datablock_lines>

\<article\>
\<title\>Viewpoint\</title\>
\<author_name\>stjohn_piano\</author_name\>
\<date\>2017-06-28\</date\>
\<signed_by_author\>no\</signed_by_author\>
\<content\>\</content\>
\</article\>

</datablock_lines>

After we add the signature data and the "\<signed_article\>" tag, it will look like this:

<datablock_lines>

\<signed_article\>
\<article\>
\<title\>Viewpoint\</title\>
\<author_name\>stjohn_piano\</author_name\>
\<date\>2017-06-28\</date\>
\<signed_by_author\>no\</signed_by_author\>
\<content\>\</content\>
\</article\>
\<author_signature\>
iQIcBAABAgAGBQJcqgvJAAoJEJeH0ledzFCiXIMP/ilrdyl9/JZEV6EA3i89FwQW
1jNwjJ1WCmrYt3ydMxhvXbM6Ygd0V0sUNWFW/74CrDsV4PeqVP11WNUtCSlQEJ1G
/R/JjFegHv5dc3dHbhOeHIUqqP9SQb/KyjL59Hp/cVBmvKCqVZrgg9q0/nmhC3rh
205CGZnbcT/HjQj9wFIQ/p26GoFLFIJ937hOU3z3OlgZA4LfN/WnXvbbNMVn1zry
vz40L4Mbqd4BbUqsjSscY3xPUPlP3RnvHu5juXUByzVxV4zy17b+a0PGpSckTMHO
yQbYS53mX8j8G68KxGmFuB8Uwq/5QxvvmuMBOHsvJnF71d1zMsHRrWcBaE24hDlY
qYTfwnjhXsK/N/xA4PrzwhGZy1i1rOq1PMAQHuTFuuUxJUsOJLp7/BC5fBT3HXoj
vynQv0pk/eThz16DZPPlQ4P/ypfAYuruxMLkgnGlUjnB2vc05kAgTYV2z/YgOMxM
ZVZgtRFIw1G2rqYzvx7uiseQFbl9osi+Iab9SMmixBVClMA+qYHPYzbxEy223N5d
OTIADtci0jcS2L0DzXdLFhiHtHtt9/SZSZsXw+R1y1vZv/QcCZYrSPuqbRn6vssT
VlW67Jqnx5Zx4Y9VpxKmPrX7rEVqOgNgPh0IfgzaKJstb7Kmr8Nz/RByeWxYRg9e
zvXZSkj35QaJWhATLiCY
=PRNX
\</author_signature\>
\</signed_article\>

</datablock_lines>




<bold_lines>
10) Result.
</bold_lines>

We have created a signature for the article, and added this signature to the data, producing a signed article file.

Note: A worked example with included output is available in the article <link>
<type>article</type>
<article_title>GPG_1.4.10_Stateless_Operations</article_title>
<datafeed>edgecase</datafeed>
<datafeed_article_id>98</datafeed_article_id>
<text>GPG 1.4.10 Stateless Operations</text>
</link>, in the section GPG 1.4.10 Stateless Operations With Example Output, in the part "7) Sign a file using a specific private key, producing a detached signature file".




</content>
</page>
