aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2009-08-17 15:56:08 +0200
committerMartin Willi <martin@strongswan.org>2009-08-26 11:23:51 +0200
commitb457e08fcabd567ff0ff5d8403e62094f4c191aa (patch)
tree77787572e5f90e3a9d891979287f2963f9f4d8c4 /src
parent7033a70fd01a8a75147cf5f4c73b6eb39870dd04 (diff)
downloadstrongswan-b457e08fcabd567ff0ff5d8403e62094f4c191aa.tar.bz2
strongswan-b457e08fcabd567ff0ff5d8403e62094f4c191aa.tar.xz
moved PGP code to pluto and gpg plugin
Diffstat (limited to 'src')
-rw-r--r--src/libstrongswan/Makefile.am1
-rw-r--r--src/libstrongswan/library.h3
-rw-r--r--src/libstrongswan/pgp/pgp.c93
-rw-r--r--src/libstrongswan/pgp/pgp.h115
-rw-r--r--src/libstrongswan/plugins/pgp/pgp_builder.c57
-rw-r--r--src/libstrongswan/plugins/pgp/pgp_builder.h81
-rw-r--r--src/pluto/pgpcert.c75
7 files changed, 110 insertions, 315 deletions
diff --git a/src/libstrongswan/Makefile.am b/src/libstrongswan/Makefile.am
index d3f46ad54..b6def15bf 100644
--- a/src/libstrongswan/Makefile.am
+++ b/src/libstrongswan/Makefile.am
@@ -35,7 +35,6 @@ credentials/certificates/ocsp_request.h \
credentials/certificates/ocsp_response.h credentials/certificates/ocsp_response.c \
database/database.h database/database_factory.h database/database_factory.c \
fetcher/fetcher.h fetcher/fetcher_manager.h fetcher/fetcher_manager.c \
-pgp/pgp.c pgp/pgp.h \
utils.h utils.c \
utils/host.c utils/host.h \
utils/identification.c utils/identification.h \
diff --git a/src/libstrongswan/library.h b/src/libstrongswan/library.h
index df4121803..eab56c42d 100644
--- a/src/libstrongswan/library.h
+++ b/src/libstrongswan/library.h
@@ -19,9 +19,6 @@
* @defgroup asn1 asn1
* @ingroup libstrongswan
*
- * @defgroup pgp pgp
- * @ingroup libstrongswan
- *
* @defgroup credentials credentials
* @ingroup libstrongswan
*
diff --git a/src/libstrongswan/pgp/pgp.c b/src/libstrongswan/pgp/pgp.c
deleted file mode 100644
index 613c318c1..000000000
--- a/src/libstrongswan/pgp/pgp.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2002-2009 Andreas Steffen
- *
- * Hochschule fuer Technik Rapperswil
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- */
-
-#include "pgp.h"
-
-ENUM_BEGIN(pgp_packet_tag_names, PGP_PKT_RESERVED, PGP_PKT_PUBLIC_SUBKEY,
- "Reserved",
- "Public-Key Encrypted Session Key Packet",
- "Signature Packet",
- "Symmetric-Key Encrypted Session Key Packet",
- "One-Pass Signature Packet",
- "Secret Key Packet",
- "Public Key Packet",
- "Secret Subkey Packet",
- "Compressed Data Packet",
- "Symmetrically Encrypted Data Packet",
- "Marker Packet",
- "Literal Data Packet",
- "Trust Packet",
- "User ID Packet",
- "Public Subkey Packet"
-);
-ENUM_NEXT(pgp_packet_tag_names, PGP_PKT_USER_ATTRIBUTE, PGP_PKT_MOD_DETECT_CODE, PGP_PKT_PUBLIC_SUBKEY,
- "User Attribute Packet",
- "Sym. Encrypted and Integrity Protected Data Packet",
- "Modification Detection Code Packet"
-);
-ENUM_END(pgp_packet_tag_names, PGP_PKT_MOD_DETECT_CODE);
-
-
-ENUM_BEGIN(pgp_pubkey_alg_names, PGP_PUBKEY_ALG_RSA, PGP_PUBKEY_ALG_RSA_SIGN_ONLY,
- "RSA",
- "RSA_ENC_ONLY",
- "RSA_SIGN_ONLY"
-);
-ENUM_NEXT(pgp_pubkey_alg_names, PGP_PUBKEY_ALG_ELGAMAL_ENC_ONLY, PGP_PUBKEY_ALG_DIFFIE_HELLMAN, PGP_PUBKEY_ALG_RSA_SIGN_ONLY,
- "ELGAMAL_ENC_ONLY",
- "DSA",
- "ECC",
- "ECDSA",
- "ELGAMAL",
- "DIFFIE_HELLMAN"
-);
-ENUM_END(pgp_pubkey_alg_names, PGP_PUBKEY_ALG_DIFFIE_HELLMAN);
-
-
-ENUM(pgp_sym_alg_names, PGP_SYM_ALG_PLAIN, PGP_SYM_ALG_TWOFISH,
- "PLAINTEXT",
- "IDEA",
- "3DES",
- "CAST5",
- "BLOWFISH",
- "SAFER",
- "DES",
- "AES_128",
- "AES_192",
- "AES_256",
- "TWOFISH"
-);
-
-/*
- * Defined in header.
- */
-size_t pgp_length(chunk_t *blob, size_t len)
-{
- size_t size = 0;
-
- if (len > blob->len)
- {
- return PGP_INVALID_LENGTH;
- }
- blob->len -= len;
-
- while (len-- > 0)
- {
- size = 256*size + *blob->ptr++;
- }
- return size;
-}
-
diff --git a/src/libstrongswan/pgp/pgp.h b/src/libstrongswan/pgp/pgp.h
deleted file mode 100644
index 677c5b1cc..000000000
--- a/src/libstrongswan/pgp/pgp.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2002-2009 Andreas Steffen
- *
- * Hochschule fuer Technik Rapperswil
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- */
-
-/**
- * @defgroup pgpi pgp
- * @{ @ingroup pgp
- */
-
-#ifndef PGP_H_
-#define PGP_H_
-
-typedef enum pgp_packet_tag_t pgp_packet_tag_t;
-typedef enum pgp_pubkey_alg_t pgp_pubkey_alg_t;
-typedef enum pgp_sym_alg_t pgp_sym_alg_t;
-
-#include <chunk.h>
-#include <enum.h>
-
-/**
- * OpenPGP packet tags as defined in section 4.3 of RFC 4880
- */
-enum pgp_packet_tag_t {
- PGP_PKT_RESERVED = 0,
- PGP_PKT_PUBKEY_ENC_SESSION_KEY = 1,
- PGP_PKT_SIGNATURE = 2,
- PGP_PKT_SYMKEY_ENC_SESSION_KEY = 3,
- PGP_PKT_ONE_PASS_SIGNATURE_PKT = 4,
- PGP_PKT_SECRET_KEY = 5,
- PGP_PKT_PUBLIC_KEY = 6,
- PGP_PKT_SECRET_SUBKEY = 7,
- PGP_PKT_COMPRESSED_DATA = 8,
- PGP_PKT_SYMKEY_ENC_DATA = 9,
- PGP_PKT_MARKER = 10,
- PGP_PKT_LITERAL_DATA = 11,
- PGP_PKT_TRUST = 12,
- PGP_PKT_USER_ID = 13,
- PGP_PKT_PUBLIC_SUBKEY = 14,
- PGP_PKT_USER_ATTRIBUTE = 17,
- PGP_PKT_SYM_ENC_INT_PROT_DATA = 18,
- PGP_PKT_MOD_DETECT_CODE = 19
-};
-
-/**
- * Enum names for pgp_packet_tag_t
- */
-extern enum_name_t *pgp_packet_tag_names;
-
-/**
- * OpenPGP public key algorithms as defined in section 9.1 of RFC 4880
- */
-enum pgp_pubkey_alg_t {
- PGP_PUBKEY_ALG_RSA = 1,
- PGP_PUBKEY_ALG_RSA_ENC_ONLY = 2,
- PGP_PUBKEY_ALG_RSA_SIGN_ONLY = 3,
- PGP_PUBKEY_ALG_ELGAMAL_ENC_ONLY = 16,
- PGP_PUBKEY_ALG_DSA = 17,
- PGP_PUBKEY_ALG_ECC = 18,
- PGP_PUBKEY_ALG_ECDSA = 19,
- PGP_PUBKEY_ALG_ELGAMAL = 20,
- PGP_PUBKEY_ALG_DIFFIE_HELLMAN = 21,
-};
-
-/**
- * Enum names for pgp_pubkey_alg_t
- */
-extern enum_name_t *pgp_pubkey_alg_names;
-
-/**
- * OpenPGP symmetric key algorithms as defined in section 9.2 of RFC 4880
- */
-enum pgp_sym_alg_t {
- PGP_SYM_ALG_PLAIN = 0,
- PGP_SYM_ALG_IDEA = 1,
- PGP_SYM_ALG_3DES = 2,
- PGP_SYM_ALG_CAST5 = 3,
- PGP_SYM_ALG_BLOWFISH = 4,
- PGP_SYM_ALG_SAFER = 5,
- PGP_SYM_ALG_DES = 6,
- PGP_SYM_ALG_AES_128 = 7,
- PGP_SYM_ALG_AES_192 = 8,
- PGP_SYM_ALG_AES_256 = 9,
- PGP_SYM_ALG_TWOFISH = 10
-};
-
-/**
- * Enum names for pgp_sym_alg_t
- */
-extern enum_name_t *pgp_sym_alg_names;
-
-#define PGP_INVALID_LENGTH 0xffffffff
-
-/**
- * Returns the length of an OpenPGP (RFC 4880) packet
- * The blob pointer is advanced past the length field
- *
- * @param blob pointer to an OpenPGP blob
- * @param len size of the length field
- * @return length of the next OpenPGP packet
- */
-size_t pgp_length(chunk_t *blob, size_t len);
-
-#endif /** PGP_H_ @}*/
diff --git a/src/libstrongswan/plugins/pgp/pgp_builder.c b/src/libstrongswan/plugins/pgp/pgp_builder.c
index e3b370eee..5e500396a 100644
--- a/src/libstrongswan/plugins/pgp/pgp_builder.c
+++ b/src/libstrongswan/plugins/pgp/pgp_builder.c
@@ -16,33 +16,44 @@
#include "pgp_builder.h"
+#include <enum.h>
#include <debug.h>
#include <credentials/keys/private_key.h>
+typedef enum pgp_pubkey_alg_t pgp_pubkey_alg_t;
+typedef enum pgp_sym_alg_t pgp_sym_alg_t;
-ENUM_BEGIN(pgp_packet_tag_names, PGP_PKT_RESERVED, PGP_PKT_PUBLIC_SUBKEY,
- "Reserved",
- "Public-Key Encrypted Session Key Packet",
- "Signature Packet",
- "Symmetric-Key Encrypted Session Key Packet",
- "One-Pass Signature Packet",
- "Secret Key Packet",
- "Public Key Packet",
- "Secret Subkey Packet",
- "Compressed Data Packet",
- "Symmetrically Encrypted Data Packet",
- "Marker Packet",
- "Literal Data Packet",
- "Trust Packet",
- "User ID Packet",
- "Public Subkey Packet"
-);
-ENUM_NEXT(pgp_packet_tag_names, PGP_PKT_USER_ATTRIBUTE, PGP_PKT_MOD_DETECT_CODE, PGP_PKT_PUBLIC_SUBKEY,
- "User Attribute Packet",
- "Sym. Encrypted and Integrity Protected Data Packet",
- "Modification Detection Code Packet"
-);
-ENUM_END(pgp_packet_tag_names, PGP_PKT_MOD_DETECT_CODE);
+/**
+ * OpenPGP public key algorithms as defined in section 9.1 of RFC 4880
+ */
+enum pgp_pubkey_alg_t {
+ PGP_PUBKEY_ALG_RSA = 1,
+ PGP_PUBKEY_ALG_RSA_ENC_ONLY = 2,
+ PGP_PUBKEY_ALG_RSA_SIGN_ONLY = 3,
+ PGP_PUBKEY_ALG_ELGAMAL_ENC_ONLY = 16,
+ PGP_PUBKEY_ALG_DSA = 17,
+ PGP_PUBKEY_ALG_ECC = 18,
+ PGP_PUBKEY_ALG_ECDSA = 19,
+ PGP_PUBKEY_ALG_ELGAMAL = 20,
+ PGP_PUBKEY_ALG_DIFFIE_HELLMAN = 21,
+};
+
+/**
+ * OpenPGP symmetric key algorithms as defined in section 9.2 of RFC 4880
+ */
+enum pgp_sym_alg_t {
+ PGP_SYM_ALG_PLAIN = 0,
+ PGP_SYM_ALG_IDEA = 1,
+ PGP_SYM_ALG_3DES = 2,
+ PGP_SYM_ALG_CAST5 = 3,
+ PGP_SYM_ALG_BLOWFISH = 4,
+ PGP_SYM_ALG_SAFER = 5,
+ PGP_SYM_ALG_DES = 6,
+ PGP_SYM_ALG_AES_128 = 7,
+ PGP_SYM_ALG_AES_192 = 8,
+ PGP_SYM_ALG_AES_256 = 9,
+ PGP_SYM_ALG_TWOFISH = 10
+};
ENUM_BEGIN(pgp_pubkey_alg_names, PGP_PUBKEY_ALG_RSA, PGP_PUBKEY_ALG_RSA_SIGN_ONLY,
"RSA",
diff --git a/src/libstrongswan/plugins/pgp/pgp_builder.h b/src/libstrongswan/plugins/pgp/pgp_builder.h
index 8d9935bcc..739456e03 100644
--- a/src/libstrongswan/plugins/pgp/pgp_builder.h
+++ b/src/libstrongswan/plugins/pgp/pgp_builder.h
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2009 Martin Willi
- * Copyright (C) 2002-2009 Andreas Steffen
* Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
@@ -22,86 +21,10 @@
#ifndef PGP_BUILDER_H_
#define PGP_BUILDER_H_
-#include <enum.h>
#include <credentials/keys/public_key.h>
-typedef enum pgp_packet_tag_t pgp_packet_tag_t;
-typedef enum pgp_pubkey_alg_t pgp_pubkey_alg_t;
-typedef enum pgp_sym_alg_t pgp_sym_alg_t;
-
-/**
- * OpenPGP packet tags as defined in section 4.3 of RFC 4880
- */
-enum pgp_packet_tag_t {
- PGP_PKT_RESERVED = 0,
- PGP_PKT_PUBKEY_ENC_SESSION_KEY = 1,
- PGP_PKT_SIGNATURE = 2,
- PGP_PKT_SYMKEY_ENC_SESSION_KEY = 3,
- PGP_PKT_ONE_PASS_SIGNATURE_PKT = 4,
- PGP_PKT_SECRET_KEY = 5,
- PGP_PKT_PUBLIC_KEY = 6,
- PGP_PKT_SECRET_SUBKEY = 7,
- PGP_PKT_COMPRESSED_DATA = 8,
- PGP_PKT_SYMKEY_ENC_DATA = 9,
- PGP_PKT_MARKER = 10,
- PGP_PKT_LITERAL_DATA = 11,
- PGP_PKT_TRUST = 12,
- PGP_PKT_USER_ID = 13,
- PGP_PKT_PUBLIC_SUBKEY = 14,
- PGP_PKT_USER_ATTRIBUTE = 17,
- PGP_PKT_SYM_ENC_INT_PROT_DATA = 18,
- PGP_PKT_MOD_DETECT_CODE = 19
-};
-
-/**
- * Enum names for pgp_packet_tag_t
- */
-extern enum_name_t *pgp_packet_tag_names;
-
-/**
- * OpenPGP public key algorithms as defined in section 9.1 of RFC 4880
- */
-enum pgp_pubkey_alg_t {
- PGP_PUBKEY_ALG_RSA = 1,
- PGP_PUBKEY_ALG_RSA_ENC_ONLY = 2,
- PGP_PUBKEY_ALG_RSA_SIGN_ONLY = 3,
- PGP_PUBKEY_ALG_ELGAMAL_ENC_ONLY = 16,
- PGP_PUBKEY_ALG_DSA = 17,
- PGP_PUBKEY_ALG_ECC = 18,
- PGP_PUBKEY_ALG_ECDSA = 19,
- PGP_PUBKEY_ALG_ELGAMAL = 20,
- PGP_PUBKEY_ALG_DIFFIE_HELLMAN = 21,
-};
-
-/**
- * Enum names for pgp_pubkey_alg_t
- */
-extern enum_name_t *pgp_pubkey_alg_names;
-
-/**
- * OpenPGP symmetric key algorithms as defined in section 9.2 of RFC 4880
- */
-enum pgp_sym_alg_t {
- PGP_SYM_ALG_PLAIN = 0,
- PGP_SYM_ALG_IDEA = 1,
- PGP_SYM_ALG_3DES = 2,
- PGP_SYM_ALG_CAST5 = 3,
- PGP_SYM_ALG_BLOWFISH = 4,
- PGP_SYM_ALG_SAFER = 5,
- PGP_SYM_ALG_DES = 6,
- PGP_SYM_ALG_AES_128 = 7,
- PGP_SYM_ALG_AES_192 = 8,
- PGP_SYM_ALG_AES_256 = 9,
- PGP_SYM_ALG_TWOFISH = 10
-};
-
-/**
- * Enum names for pgp_sym_alg_t
- */
-extern enum_name_t *pgp_sym_alg_names;
-
/**
- * Create the builder for a generic or an RSA public key.
+ * Create the builder for a generic or an RSA public key using PGP decoding.
*
* @param type type of the key, either KEY_ANY or KEY_RSA
* @return builder instance
@@ -109,7 +32,7 @@ extern enum_name_t *pgp_sym_alg_names;
builder_t *pgp_public_key_builder(key_type_t type);
/**
- * Create the builder for a RSA private key.
+ * Create the builder for a RSA private key using PGP decoding.
*
* @param type type of the key, KEY_RSA
* @return builder instance
diff --git a/src/pluto/pgpcert.c b/src/pluto/pgpcert.c
index 1f3db59e4..5f58aab1a 100644
--- a/src/pluto/pgpcert.c
+++ b/src/pluto/pgpcert.c
@@ -21,7 +21,7 @@
#include <freeswan.h>
#include <library.h>
-#include <pgp/pgp.h>
+#include <enum.h>
#include <crypto/hashers/hasher.h>
#include "constants.h"
@@ -33,6 +33,57 @@
#include "whack.h"
#include "keys.h"
+
+typedef enum pgp_packet_tag_t pgp_packet_tag_t;
+
+/**
+ * OpenPGP packet tags as defined in section 4.3 of RFC 4880
+ */
+enum pgp_packet_tag_t {
+ PGP_PKT_RESERVED = 0,
+ PGP_PKT_PUBKEY_ENC_SESSION_KEY = 1,
+ PGP_PKT_SIGNATURE = 2,
+ PGP_PKT_SYMKEY_ENC_SESSION_KEY = 3,
+ PGP_PKT_ONE_PASS_SIGNATURE_PKT = 4,
+ PGP_PKT_SECRET_KEY = 5,
+ PGP_PKT_PUBLIC_KEY = 6,
+ PGP_PKT_SECRET_SUBKEY = 7,
+ PGP_PKT_COMPRESSED_DATA = 8,
+ PGP_PKT_SYMKEY_ENC_DATA = 9,
+ PGP_PKT_MARKER = 10,
+ PGP_PKT_LITERAL_DATA = 11,
+ PGP_PKT_TRUST = 12,
+ PGP_PKT_USER_ID = 13,
+ PGP_PKT_PUBLIC_SUBKEY = 14,
+ PGP_PKT_USER_ATTRIBUTE = 17,
+ PGP_PKT_SYM_ENC_INT_PROT_DATA = 18,
+ PGP_PKT_MOD_DETECT_CODE = 19
+};
+
+ENUM_BEGIN(pgp_packet_tag_names, PGP_PKT_RESERVED, PGP_PKT_PUBLIC_SUBKEY,
+ "Reserved",
+ "Public-Key Encrypted Session Key Packet",
+ "Signature Packet",
+ "Symmetric-Key Encrypted Session Key Packet",
+ "One-Pass Signature Packet",
+ "Secret Key Packet",
+ "Public Key Packet",
+ "Secret Subkey Packet",
+ "Compressed Data Packet",
+ "Symmetrically Encrypted Data Packet",
+ "Marker Packet",
+ "Literal Data Packet",
+ "Trust Packet",
+ "User ID Packet",
+ "Public Subkey Packet"
+);
+ENUM_NEXT(pgp_packet_tag_names, PGP_PKT_USER_ATTRIBUTE, PGP_PKT_MOD_DETECT_CODE, PGP_PKT_PUBLIC_SUBKEY,
+ "User Attribute Packet",
+ "Sym. Encrypted and Integrity Protected Data Packet",
+ "Modification Detection Code Packet"
+);
+ENUM_END(pgp_packet_tag_names, PGP_PKT_MOD_DETECT_CODE);
+
/**
* Chained list of OpenPGP end certificates
*/
@@ -55,6 +106,28 @@ const pgpcert_t pgpcert_empty = {
NULL /* fingerprint */
};
+#define PGP_INVALID_LENGTH 0xffffffff
+
+/**
+ * Returns the length of an OpenPGP (RFC 4880) packet
+ * The blob pointer is advanced past the length field.
+ */
+static size_t pgp_length(chunk_t *blob, size_t len)
+{
+ size_t size = 0;
+
+ if (len > blob->len)
+ {
+ return PGP_INVALID_LENGTH;
+ }
+ blob->len -= len;
+
+ while (len-- > 0)
+ {
+ size = 256*size + *blob->ptr++;
+ }
+ return size;
+}
/**
* Extracts the length of a PGP packet