Page MenuHome GnuPG

No OneTemporary

diff --git a/cgi/procdonate.cgi b/cgi/procdonate.cgi
index ad95369..61ecce2 100755
--- a/cgi/procdonate.cgi
+++ b/cgi/procdonate.cgi
@@ -1,487 +1,496 @@
#!/usr/bin/perl -T
# procdonate.cgi - Donation payment processor for gnupg.org
# Copyright (C) 2014 g10 Code GmbH
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
use strict;
use CGI;
use Cwd qw(realpath);
use IO::Socket::UNIX;
realpath($0) =~ /^(.*)\/.*$/;
my %config = do $1 . '/config.rc';
my $htdocs = $config{htdocs};
my $socket_name = $config{payprocd_socket};
my $error_marker = '<span style="color: red;">* error</span>';
# The form variabales are accessed via Q.
my $q = new CGI;
# This is a multi-purpose CGI. The mode decides what to do.
my $mode = $q->param("mode");
my $sessid = $q->param("sessid");
# Variables used in the template pages.
my $amount = "";
my $stripeamount = "";
my $currency = "";
my $name = "";
my $mail = "";
my $message = "";
my $errorstr = "";
# We use a dictionary to track error. Those errors will then be
# inserted into the output by write_template.
my %errdict = ();
# Prototypes
sub fail ($);
# Write a template file. A template is a proper HTML file with
# variables enclosed in HTML comments. To allow inserting data into
# a value attribute of an input field, such a tag needs to be written as
# <input value=""/><!--FOO-->
# the result after processing will be
# <input value="foo"/>
# assuming that the value of FOO is foo. Note that this substitution
# rules work for all tags and thus you better take care to add an
# extra space if if do not want this to happen.
sub write_template ($) {
my $fname = shift;
my $errorpanel = '';
my $err_amount = '';
my $err_name = '';
my $err_mail = '';
my $checkother = ' checked="checked"';
my $sel_eur = '';
my $sel_usd = '';
my $sel_gbp = '';
my $sel_jpy = '';
my $message_fmt;
+ my $publishname;
# Avoid broken HTML attributes.
$amount =~ s/\x22/\x27/g;
$stripeamount =~ s/\x22/\x27/g;
$currency =~ s/\x22/\x27/g;
$name =~ s/\x22/\x27/g;
$mail =~ s/\x22/\x27/g;
$message =~ s/\x22/\x27/g;
# Clean possible user provided data
$sessid =~ s/</\x26lt;/g;
$amount =~ s/</\x26lt;/g;
$stripeamount =~ s/</\x26lt;/g;
$currency =~ s/</\x26lt;/g;
$name =~ s/</\x26lt;/g;
$mail =~ s/</\x26lt;/g;
$message =~ s/</\x26lt;/g;
# Create a formatted message.
$message_fmt = $message;
$message_fmt =~ s/\n/<br\x2f>/g;
if ( $currency =~ /EUR/i ) {
$sel_eur = ' selected="selected"';
} elsif ( $currency =~ /USD/i ) {
$sel_usd = ' selected="selected"';
} elsif ( $currency =~ /GBP/i ) {
$sel_gbp = ' selected="selected"';
} elsif ( $currency =~ /JPY/i ) {
$sel_jpy = ' selected="selected"';
}
+ # Set var for the paypal button
+ if ( $name eq 'Anonymous' or $name eq '') {
+ $publishname = 'No';
+ } else {
+ $publishname = 'Yes';
+ }
+
# Build error strings.
foreach (keys %errdict)
{
if (/amount/) { $err_amount = $error_marker; }
elsif (/name/) { $err_name = $error_marker; }
elsif (/mail/) { $err_mail = $error_marker; }
$errorpanel = $errorpanel . "Field $_: " . $errdict{$_} . "<br/>\n"
}
if ( $errorpanel ne '' )
{
$errorpanel =
"<div style='color: red;'><p>\n" . $errorpanel . "</p></div>\n";
}
open TEMPLATE, $htdocs . $fname;
while (<TEMPLATE>) {
if ( /<!--/ )
{
# Only one replacement per line allowed to avoid recursive
# replacements. Note that MESSAGE uses a special treatment
# for the textarea tag.
s/<!--SESSID-->/$sessid/
|| s/(\x22\x2f>)?<!--AMOUNT-->/$amount\1/
|| s/(\x22\x2f>)?<!--STRIPEAMOUNT-->/$stripeamount\1/
|| s/(\x22\x2f>)?<!--CURRENCY-->/$currency\1/
|| s/(\x22\x2f>)?<!--NAME-->/$name\1/
|| s/(\x22\x2f>)?<!--MAIL-->/$mail\1/
|| s/\x2f><!--CHECKOTHER-->/$checkother\x2f>/
|| s/(<\x2ftextarea>)?<!--MESSAGE-->/$message\1/
|| s/<!--MESSAGE_FMT-->/$message_fmt/
|| s/(<selected=\x22selected\x22)?><!--SEL_EUR-->/$sel_eur>/
|| s/(<selected=\x22selected\x22)?><!--SEL_USD-->/$sel_usd>/
|| s/(<selected=\x22selected\x22)?><!--SEL_GBP-->/$sel_gbp>/
|| s/(<selected=\x22selected\x22)?><!--SEL_JPY-->/$sel_jpy>/
+ || s/<!--PUBLISH_NAME-->/$publishname/
|| s/<!--ERRORSTR-->/$errorstr/
|| s/<!--ERR_AMOUNT-->/$err_amount/
|| s/<!--ERR_NAME-->/$err_name/
|| s/<!--ERR_MAIL-->/$err_mail/
|| s/<!--ERRORPANEL-->/$errorpanel/;
}
print;
}
close TEMPLATE;
$errorstr = "";
}
# Call the payment processor daemon. Takes the command and a
# reference to a dictionary with the data as input. On return that
# disctionary is replaced by the response data.
sub payproc ($$)
{
my $cmd = shift;
my $data = shift;
my $sock;
my $key;
my $value;
my $status;
my $rest;
# print STDERR "calling payproc: ", $cmd, "<-\n";
$sock = IO::Socket::UNIX->new($socket_name)
or fail "socket: $!";
$sock->print ($cmd, "\n");
while (($key,$value) = each %$data) {
next if $key =~ /^_/;
$value =~ s/\n/\n /g;
$sock->print ("$key: $value\n");
# print STDERR " $key: $value\n";
}
$sock->print ("\n");
$sock->flush or fail "write socket: $!";
%$data = ();
while (defined (my $line = <$sock>))
{
next if $line =~ /^\#/;
chomp $line;
last if $line eq '';
if (not defined $status)
{
($status, $rest) = split(' ', $line, 2);
if ( $status eq 'ERR' )
{
$rest =~ /\d+\s+\((.*)\).*/;
$$data{"ERR_Description"} = $1;
}
}
elsif ( $line =~ /^\s+/ )
{
fail "bad dict line received" if not defined $key;
$$data{$key} .= "\n" . substr($line, 1);
}
else
{
($key, $value) = split(':', $line, 2);
$value =~ s/^\s+//;
$$data{$key} = $value;
}
}
#print STDERR "payproc status: $status (", $$data{"ERR_Description"}, ")\n";
#while (($key,$value) = each %$data) {
# print STDERR " ", $key, ": ", $value, "\n";
#}
$sock->close;
return 1 if $status eq 'OK';
return 0 if $status eq 'ERR';
fail 'payproc did not return a proper status code';
}
# Write a page with all the data inserted.
sub write_overload_page ()
{
print $q->header(-type=>'text/html', -charset=>'utf-8');
print "\n";
$errorstr =
'<p>The system is currently processing too many requests.</p>'
. '<p>Please retry later.</p>';
&write_template("donate/error.html");
}
# Write an internal error page
sub fail ($)
{
my $desc = shift;
# FIXME: write the detailed error only to the log.
print $q->header(-type=>'text/html', -charset=>'utf-8');
print "\n";
$errorstr =
'<p>An internal error occured:</p>'
. "<p>$desc</p>";
write_template("donate/error.html");
exit 0;
}
# Write a the initial donation page. This is usallay done to show
# errors. The page is intially shown as static page.
sub write_main_page ()
{
print $q->header(-type=>'text/html', -charset=>'utf-8');
print "\n";
write_template("donate/index.html");
}
# Write a page with all the data inserted.
sub write_checkout_page ()
{
print $q->header(-type=>'text/html', -charset=>'utf-8');
print "\n";
write_template("donate/checkout.html");
}
# Write a page with all the data inserted specific for cards.
sub write_checkout_cc_page ()
{
print $q->header(-type=>'text/html', -charset=>'utf-8');
print "\n";
write_template("donate/checkout-cc.html");
}
# Write the final thank you page.
sub write_thanks_page ()
{
print $q->header(-type=>'text/html', -charset=>'utf-8');
print "\n";
write_template("donate/donate-thanks.html");
}
# Check the values entered at the donation page. Return true if
# everything is alright. On error the donation page is send again.
sub check_donation ()
{
my %data;
my $anyerr = 0;
# Note: When re-displaying the page we always use amount other
# because that is easier to implement than figuring out which
# amount and currency was used and check the appropriate radio
# button.
$amount = $q->param("amount");
if ($amount eq 'other') {
$amount = $q->param("amountother");
$currency = $q->param("currency");
} else {
$currency = 'EUR';
}
$name = $q->param("name");
$name = 'Anonymous' if $name eq '';
$mail = $q->param("mail");
$message = $q->param("message");
$stripeamount = "0";
# Check the amount.
$data{"Amount"} = $amount;
$data{"Currency"} = $currency;
if (not payproc ('CHECKAMOUNT', \%data )) {
$errdict{"amount"} = $data{"ERR_Description"};
$anyerr = 1;
}
$stripeamount = $data{"_amount"};
$amount = $data{"Amount"};
$currency = $data{"Currency"};
# Check the mail address
if ($mail ne '' and $mail !~ /\S+@\S+\.\S+/ ) {
$errdict{"mail"} = 'invalid mail address';
$anyerr = 1;
}
# If needed present errors and ask again. */
if ($anyerr) {
write_main_page();
return;
}
# Now create a session.
$data{"Stripeamount"} = $stripeamount;
$data{"Name"} = $name;
$data{"Mail"} = $mail;
$data{"Message"} = $message;
payproc ('SESSION create', \%data ) or fail $data{"ERR_Description"};
$sessid = $data{"_SESSID"};
# Send the checkout page.
write_checkout_page();
}
# This simply resends the main page again.
sub resend_main_page ()
{
my %data;
payproc ('SESSION get ' . $sessid, \%data) or fail $data{"ERR_Description"};
$amount = $data{"Amount"};
$currency = $data{"Currency"};
$stripeamount = $data{"Stripeamount"};
$name = $data{"Name"};
$mail = $data{"Mail"};
$message = $data{"Message"};
write_main_page();
}
# This simply resends the checkout options page.
sub resend_card_checkout ()
{
my %data;
payproc ('SESSION get ' . $sessid, \%data) or fail $data{"ERR_Description"};
$amount = $data{"Amount"};
$currency = $data{"Currency"};
$stripeamount = $data{"Stripeamount"};
$name = $data{"Name"};
$mail = $data{"Mail"};
$message = $data{"Message"};
write_checkout_page();
}
# This simply sends the card specific checkout page.
sub prepare_card_checkout ()
{
my %data;
payproc ('SESSION get ' . $sessid, \%data) or fail $data{"ERR_Description"};
$amount = $data{"Amount"};
$currency = $data{"Currency"};
$stripeamount = $data{"Stripeamount"};
$mail = $data{"Mail"};
write_checkout_cc_page();
}
# This is called by FIXME
sub complete_stripe_checkout ()
{
my %data;
my %stripe;
# fixme: Change the error message to note that the card has not
# been charged. Somehow delete the token
payproc ('SESSION get ' . $sessid, \%data) or fail $data{"ERR_Description"};
# Do the checkout.
$stripe{"Card-Token"} = $q->param("stripeToken");
$stripe{"Currency"} = $data{"Currency"};
$stripe{"Amount"} = $data{"Amount"};
$stripe{"Desc"} =
"GnuPG donation by " . $data{"Name"} . " <" . $data{"Mail"} . ">";
$stripe{"Stmt-Desc"} = "GnuPG donation";
$stripe{"Email"} = $q->param("stripeEmail");
$stripe{"Meta[name]"} = $data{"Name"} unless $data{"Name"} eq 'Anonymous';
if ($data{"Mail"} ne $q->param("stripeEmail")) {
$stripe{"Meta[mail]"} = $data{"Mail"};
}
if ($data{"Message"} ne '') {
$stripe{"Meta[message]"} = $data{"Message"};
}
if (not payproc ('CHARGECARD', \%stripe)) {
$errorstr =
'<p>Error: ' . $stripe{"failure"} . '</p><p>'
. $stripe{"failure-mesg"} . '</p>';
# Again.
prepare_card_checkout ();
return;
}
# Print thanks
$message = <<EOF;
Amount ..: $stripe{"Amount"} $stripe{"Currency"}
Desc ....: $stripe{"Desc"}
Cardno...: *$stripe{"Last4"}
Processor: Stripe
Email ...: $stripe{"Email"}
Charge-Id: $stripe{"Charge-Id"}
Timestamp: $stripe{"_timestamp"}
EOF
if ($stripe{"Live"} eq 'f') {
$message = $message . "\n!!! TEST TRANSACTION !!!";
}
write_thanks_page ();
payproc ('SESSION destroy ' . $sessid, ());
}
#
# Main
#
#print STDERR "CGI called with mode=$mode\n";
#print STDERR "CGI called with sessid=$sessid\n";
if ($q->param('url') ne '') {
# If the URL field has been filled out, the client did not follow
# the instructions and thus failed the Turing test. Provide an
# innocent error page.
write_overload_page ()
}
elsif ($mode eq 'main') {
# Returning from the donation start page
check_donation();
}
elsif ($mode eq 're-main') {
# Returning from the donation start page
resend_main_page();
}
elsif ($mode eq 're-checkout') {
# Redisplay the checkout option page
resend_card_checkout();
}
elsif ($mode eq 'checkout-cc') {
# The checkout page requested a card checkout.
prepare_card_checkout();
}
elsif ($mode eq 'checkout-stripe') {
# we have the stripe token - charge the card.
complete_stripe_checkout();
}
else {
fail('Internal error: Unknown mode');
}
diff --git a/web/donate/checkout.org b/web/donate/checkout.org
index 8f09b9d..ad69fcd 100644
--- a/web/donate/checkout.org
+++ b/web/donate/checkout.org
@@ -1,105 +1,107 @@
#+TITLE: GnuPG - Donate - Checkout
#+STARTUP: showall
#+SETUPFILE: "../share/setup.inc"
* Donate - Checkout
Information on your intended donation:
#+BEGIN_HTML
<table border="0" cellpadding="0" cellspacing="4" id="checkoutSummary">
<tr>
<td align="right">Amount:</td>
<td><!--AMOUNT-->
<!--CURRENCY--></td>
</tr>
<tr>
<td align="right">Name:</td>
<td><!--NAME--></td>
</tr>
<tr>
<td align="right">Mail:</td>
<td><!--MAIL--></td>
</tr>
<tr>
<td align="right" valign="top">Message:</td>
<td><!--MESSAGE_FMT--></td>
</tr>
</table>
#+END_HTML
If something is wrong, please use the back button below to change
it. If the data is correct, you may proceed by choosing one of the
payment options below.
- Donate with a credit card
#+BEGIN_HTML
<p id="smallnote">
For privacy reasons a click on the button below will take you to a
dedicated page for the credit card based checkout.
</p>
<p>
<form action="/cgi-bin/procdonate.cgi" method="POST">
<input type="hidden" name="mode" value="checkout-cc">
<input type="hidden" name="sessid" value="<!--SESSID-->">
<input type="image" src="https://gnupg.org/share/btn-donate.png"
border="0" name="submit" alt="Donate with credit card"
title="Donate with credit card">
</form>
</p>
#+END_HTML
- Donate with Bitcoins
#+HTML: <p id="smallnote">Coming soon</p>
- Donate using a Paypal account
#+BEGIN_HTML
<p id="smallnote">Use this only if you have a Paypal account.</p>
<p id="smallnote">(Until we have finished the restructuring
of this payment option, you are unfortunately required to
re-enter some of the already given data.)</p>
<p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="GFTRVNVZVGUJW">
<input type="image" src="https://gnupg.org/share/btn-donate.png"
border="0" name="submit" alt="Donate using PayPal"
title="Donate using PayPal">
+ <input type="hidden" name="os0" value="<!--PUBLISH_NAME-->">
+ <input type="hidden" name="os1" value="<!--NAME-->">
</form>
</p>
#+END_HTML
- Donate using a SEPA bank transfer
#+HTML: <p id="smallnote">Coming soon</p>
# #+BEGIN_HTML
# <p id="smallnote">
# A SEPA bank transfer is possible in most European countries. We
# will send you an account number and you simply wire the money to
# that account.
# <form action="/cgi-bin/procdonate.cgi" method="POST">
# <input type="hidden" name="mode" value="checkout-sepa">
# <input type="hidden" name="sessid" value="<!--SESSID-->">
# <input type="image" src="https://gnupg.org/share/btn-donate.png"
# border="0" name="submit" alt="Donate using SEPA"
# title="Donate using SEPA">
# </form>
# </p>
# #+END_HTML
#+BEGIN_HTML
<form action="/cgi-bin/procdonate.cgi" method="POST">
<input type="hidden" name="mode" value="re-main">
<input type="hidden" name="sessid" value="<!--SESSID-->">
<input type="submit" value="Back to donation page" />
</form>
#+END_HTML
diff --git a/web/index.org b/web/index.org
index d42c997..1e643c0 100644
--- a/web/index.org
+++ b/web/index.org
@@ -1,98 +1,106 @@
#+TITLE: The GNU Privacy Guard
#+STARTUP: showall
#+SETUPFILE: "share/setup.inc"
* The GNU Privacy Guard
#+index: GnuPG
#+index: GPG
#+index: Gpg4win
#+index: GPGTools
GnuPG is the [[http://www.gnu.org/][GNU project]]'s complete and free implementation of the
OpenPGP standard as defined by [[http://www.ietf.org/rfc/rfc4880.txt][RFC4880]]. GnuPG allows to encrypt and
sign your data and communication, features a versatile key management
system as well as access modules for all kinds of public key
directories. GnuPG, also known as /GPG/, is a command line tool with
features for easy integration with other applications. A wealth of
[[file:related_software/frontends.html][frontend applications]] and [[file:related_software/libraries.html][libraries]] are available. Version 2 of GnuPG
also provides support for S/MIME.
GnuPG is [[http://www.gnu.org/philosophy/free-sw.html][Free Software]] (meaning that it respects your freedom). It can
be freely used, modified and distributed under the terms of the
[[http://www.gnu.org/copyleft/gpl.html][GNU General Public License]] .
GnuPG comes in two flavours: [[download][{{{gnupg1_ver}}}]] is the well known and
portable standalone version, whereas [[download][{{{gnupg_ver}}}]] is the enhanced
and somewhat harder to build version.
Project [[http://www.gpg4win.org][Gpg4win]] provides a Windows version of GnuPG. It is nicely
integrated into an installer and features several frontends as well as
English and German manuals.
Project [[http://gpgtools.org][GPGTools]] provides a Mac OS X version of GnuPG. It is nicely
integrated into an installer and features all required tools.
Project [[https://www.gnupg.org/aegypten/][Aegypten]] developed the S/MIME functionality in GnuPG 2.
#+BEGIN_HTML
<p id="smallnote">This site is currently undergoing a complete redesign.
We apologize for any inconveniences like broken links
or bad formatting. Please do not report such problems as we are probably
already aware of them. (2014-05-28 wk)</p>
#+END_HTML
* Latest news
#+index: News
The following frames report the latest news from GnuPG. A list with
all [[file:news.org][news of previous years]] is also available.
# For those of you who like reading world’s news with an RSS reader,
# GnuPG's latest news are available as [[http://feedvalidator.org/check.cgi?url%3Dhttps://www.gnupg.org/news.en.rss][RSS 2.0 compliant]] feed. Just
# point or paste the [[news.en.rss][RSS file]] into your aggregator.
+2014q2/000342.html
+
+** GnuPG 2.0.23 released (2014-06-03)
+
+We are pleased to announce the availability of GnuPG 2.0.23. This is
+a maintenance release with a few new features. [[http://lists.gnupg.org/pipermail/gnupg-announce/2014q2/000342.html][{more}]]
+
+
** Goteo campaign: preliminary results (2014-05-12)
The blog has a report on the current status of the campaign including
an overview of the financial results. [[https://www.gnupg.org/blog/20140512-rewards-sent.html][{read here}]]
** Mission complete: campaign ends, closing stats (2014-02-06)
After 50 days of crowdfunding, the GnuPG campaign for new website and
infrastructure will close tomorrow. That means rewards for backers can
now be ordered and preparations for dispatch can begin. Here are the
results so far. [[https://www.gnupg.org/blog/20140206-crowdfunding-complete.html][{more}]]
** 16 Years of protecting privacy (2013-12-20)
Today marks 16 years since the first release of GnuPG. In that time
the project has grown from being a hacker’s hobby into one of the
world’s most critical anti-surveillance tools. Today GnuPG stands at
the front line of the battle between invasive surveillance and civil
liberties. [[https://www.gnupg.org/blog/20131220-gnupg-turned-0x10.html][{more}]]
** GnuPG launches crowdfunding campaign (2013-12-19)
Today GNU Privacy Guard (GnuPG) has launched its first
[[http://goteo.org/project/gnupg-new-website-and-infrastructure][crowdfunding campaign]] with the aim of building a new website and long term
infrastructure. [[http://lists.gnupg.org/pipermail/gnupg-announce/2013q4/000338.html][{more}]] [[https://www.gnupg.org/blog/20131219-gnupg-launches-crowfunding.de.html][{deutsch}]] [[https://www.gnupg.org/blog/20131219-gnupg-launches-crowfunding.fr.html][{francaise}]]
** GnuPG 1.4.16 released (2013-12-18) :important:
Along with the publication of an interesting new [[http://www.cs.tau.ac.il/~tromer/acoustic/][side channel attack]]
by Genkin, Shamir, and Tromer we announce the availability of a new
stable GnuPG release to relieve this bug: Version 1.4.16 ... [[http://lists.gnupg.org/pipermail/gnupg-announce/2013q4/000337.html][{more}]]
* COMMENT
This is the publishing info used for the GnuPG pages
#+begin_src emacs-lisp
(progn
(setq gpgweb-root-dir (file-name-directory (buffer-file-name)))
(require 'gpgweb (concat gpgweb-root-dir "share/gpgweb.el"))
(setq org-export-html-toplevel-hlevel 1)
(setq org-export-html-coding-system 'utf-8)
(gpgweb-setup-project))
#+end_src
diff --git a/web/share/site.css b/web/share/site.css
index 37460d3..6f0e373 100644
--- a/web/share/site.css
+++ b/web/share/site.css
@@ -1,374 +1,411 @@
/* site.css
*
* This code is Copyright 1998--2013 The GnuPG Project and licensed
* under a Creative Commons Attribution-ShareAlike 3.0 Unported
* License. See the file copying.org for details.
*/
/* Color names as used by lolo's old site design:
* gray #5c6064
* lightblue #d0dce8
* darkpurple #784c6c
* lightpurple #f0f0fc
* grayedlightpurple #ebebf4
*/
body {
background-color: #f0f0fc;
}
h1,
h2,
h3 {
color: #5c6064;
font-weight: bold;
font-variant: small-caps;
letter-spacing: 0.1em;
}
h1,
h2 {
font-size: large;
}
h1:first-letter,
h2:first-letter,
h3:first-letter {
color: #784c6c;
}
h1:first-letter,
h2:first-letter {
font-size: x-large;
}
h3:first-letter {
font-size: large;
}
/*
Links
*/
a:link {
color: #784c6c;
font-weight: bold;
text-decoration: none;
}
a:hover {
background-color: #d0dce8;
font-weight: bold;
text-decoration: none;
}
a:visited {
color: #5c6064;
font-weight: bold;
text-decoration: none;
}
a.img:hover {
background-color: #f0f0fc;
}
/*
Raise attention
*/
li.important {
color: red;
}
span.important {
color: red;
}
div.urgent {
width: 85%;
text-align: center;
border: solid red;
font-weight: bold;
}
.ii {
display: none !important;
}
/*
Other elements as commonly used by org-mode
*/
p {
margin-top: 1%;
}
img {
border-width: 0;
}
img.lfloat {
float: left;
margin-right: 1em;
}
img.rfloat {
float: right;
margin-left: 1em;
}
.correction
{
color: #ff0000;
}
div.entry-qotd P
{
padding-left: 20%;
margin-bottom: 0;
}
div.entry-qotd
{
margin-bottom: 3%;
}
.example {
overflow: auto;
}
#kicker {
padding-top: 5%;
font-size: 125%;
border-bottom: 3px #FFb580 solid;
font-family: verdana,arial,helvetica;
margin-bottom: 2%;
}
#header {
background: url(/share/logo-gnupg-light-purple-bg.png) center no-repeat;
height: 120px;
padding: 0px;
}
#cornerImage {
width: 128px;
height: 130px;
margin-top: -7.5em;
margin-left: 82%;
padding: 0;
padding-right: 2%;
}
#leftColumn {
float: left;
text-align: right;
width: 18%;
}
/*
Navigation
*/
nav ul {
list-style: none;
font-size: 100%;
font-family: verdana,arial,helvetica;
margin-bottom: 1em;
}
nav ul ul {
font-size: 70%;
}
nav * li a {
color: #784c6c;
}
nav * li a:after {
content: " \21d0";
/* FIXME: Hide the arrow using the background color. We should use
width or something similar to get it aligned. */
color: #f0f0fc;
}
nav * li a.selected:after {
content: " \21d0";
color: #784c6c;
}
nav img {
border-width: 0;
}
/*
Other stuff
*/
main {
float: left;
margin-left: 5%;
margin-right: 5%;
width: 72%;
}
main ul {
list-style: square;
padding-left: 0;
margin-left: 1em;
}
div.outline-text-2 {
padding-top: 5px;
padding-right: 3px;
border-top: 2px solid #5c6064;
border-right: 2px solid #784c6c;
}
div.outline-text-3 {
padding-top: 3px;
padding-right: 3px;
border-top: 1px solid #5c6064;
border-right: 1px solid #784c6c;
}
#rightColumn {
float: right;
width: 18%;
margin-left: 5%;
margin-right: 2%;
margin-top: 2%;
}
#rightColumn ul {
list-style: square;
padding-left: 0;
margin-left: 1em;
}
#cpyright {
font-style: italic;
font-size: 0.6em;
padding-top: 4em;
}
#smallnote {
font-style: italic;
font-size: 0.8em;
}
#footer {
margin-top: 5em;
margin-left: 10%;
width: 80%;
clear: both;
}
#footer p {
font-style: italic;
font-size: 0.3em;
padding: 2em 0;
}
#checkoutSummary {
background-color: #f0f0f0;
}
.articleRight {
float: right;
padding: 2%;
}
pre {
border: thin black solid;
background-color: #C4C4C4;
padding: 0.5em;
overflow: auto;
}
+/* Classes used by makeinfo (manuals). */
+
+pre.display {
+ font-family:inherit;
+}
+pre.format {
+ font-family:inherit;
+}
+pre.smalldisplay {
+ font-family:inherit;
+ font-size:smaller;
+}
+pre.smallformat {
+ font-family:inherit;
+ font-size:smaller;
+}
+pre.smallexample {
+ font-size:smaller;
+}
+pre.smalllisp {
+ font-size:smaller;
+}
+
+span.sc {
+ font-variant:small-caps;
+}
+span.roman {
+ font-family:serif;
+ font-weight:normal;
+}
+span.sansserif {
+ font-family:sans-serif;
+ font-weight:normal;
+}
+
/* Table stuff */
th.left {
text-align:center;
}
th.center {
text-align:center;
}
th.right {
text-align:center;
}
td.left {
text-align:left;
}
td.center {
text-align:center;
}
td.right {
text-align:right;
}
/* Tag cloudlist. */
#tagcloudlist ul {
list-style: none;
float: left;
}
#tagcloudlist li {
float: left;
line-height: 130%;
font-variant: small-caps;
padding-right: 1em;
}
#tagcloudlist li:before {
content: "\00bb\00a0";
}
#tagcloudlist p {
clear: left;
padding-top: 1em;
font-size: 0.8em;
}
#tagcloudlist a {
font-variant: normal;
font-size: 0.8em;
}
+/* A box of logos. */
+
.logobox p {
margin-top: 20px;
}
.logobox img {
margin-right: 20px;
}
/* EOF */
\ No newline at end of file
diff --git a/web/swdb.mac b/web/swdb.mac
index 522a4c6..b443bbf 100644
--- a/web/swdb.mac
+++ b/web/swdb.mac
@@ -1,100 +1,100 @@
# Version information
#
# Primary FTP server base directory
#
#+macro: ftp_base ftp://ftp.gnupg.org/gcrypt
#
# GnuPG-2
#
-#+macro: gnupg_ver 2.0.22
+#+macro: gnupg_ver 2.0.23
#+macro: gnupg_branch STABLE-BRANCH-2-0
-#+macro: gnupg_size 4177k
-#+macro: gnupg_sha1 9ba9ee288e9bf813e0f1e25cbe06b58d3072d8b8
+#+macro: gnupg_size 4196k
+#+macro: gnupg_sha1 c90e47ab95a40dd070fd75faef0a05c7b679553b
#
# GnuPG-1
#
#+macro: gnupg1_ver 1.4.16
#+macro: gnupg1_branch STABLE-BRANCH-1-4
#+macro: gnupg1_size 3571k
#+macro: gnupg1_size_gz 4955k
#+macro: gnupg1_sha1 0bf5e475f3eb6f33d5474d017fe5bf66070e43f4
#+macro: gnupg1_sha1_gz ea40324a5b2e3a16ffb63ea0ccc950a3faf5b11c
#
#+macro: gnupg1_patch_ver 1.4.15-1.4.16
#+macro: gnupg1_patch_size 26k
#+macro: gnupg1_patch_sha1 ead70b47218ba76da51c16b652bee2a712faf2f6
#
#+macro: gnupg1_w32cli_ver 1.4.16
#+macro: gnupg1_w32cli_size 1573k
#+macro: gnupg1_w32cli_sha1 82079c7c183467b4dd3795ca197983cd2494cec4
#
# GPA
#
#+macro: gpa_ver 0.9.4
#+macro: gpa_size 714k
#
# PINENTRY
#
#+macro: pinentry_ver 0.8.2
#+macro: pinentry_size 418k
#+macro: pinentry_sha1 eeee9e80ea02f63bdac1cb03eb1785ab2cd57f90
#
# GPGME
#
#+macro: gpgme_ver 1.4.3
#+macro: gpgme_branch master
#+macro: gpgme_size 950k
#+macro: gpgme_sha1 ffdb5e4ce85220501515af8ead86fd499525ef9a
#
# LIBGCRYPT
#
#+macro: libgcrypt_ver 1.6.1
#+macro: libgcrypt_size 2413k
#+macro: libgcrypt_sha1 f03d9b63ac3b17a6972fc11150d136925b702f02
#
# LIBKSBA
#
#+macro: libksba_ver 1.3.0
#+macro: libksba_size 610k
#+macro: libksba_sha1 241afcb2dfbf3f3fc27891a53a33f12d9084d772
#
# DirMngr
#
#+macro: dirmngr_ver 1.1.0
#+macro: dirmngr_size 543k"
#+macro: dirmngr_sha1 a7a7d1432db9edad2783ea1bce761a8106464165
#
# LIBGPG-ERROR
#
#+macro: libgpg_error_ver 1.13
#+macro: libgpg_error_size 478k
#+macro: libgpg_error_sha1 50fbff11446a7b0decbf65a6e6b0eda17b5139fb
#
# LIBASSUAN
#
#+macro: libassuan_ver 2.1.1
#+macro: libassuan_size 526k
#+macro: libassuan_sha1 8bd3826de30651eb8f9b8673e2edff77cd70aca1
# --- end of swdb.mac ---

File Metadata

Mime Type
text/x-diff
Expires
Fri, Mar 14, 4:11 AM (1 d, 6 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
bf/28/ee627725c5ebc0b76b3b3b0ce68a

Event Timeline