projects
/
monkeysphere.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
4a7350c
)
pem2openpgp: replace raw numbers with semantic labelling to make it more readable.
author
Daniel Kahn Gillmor
<dkg@fifthhorseman.net>
Sat, 10 Jan 2009 23:42:57 +0000
(18:42 -0500)
committer
Daniel Kahn Gillmor
<dkg@fifthhorseman.net>
Sat, 10 Jan 2009 23:42:57 +0000
(18:42 -0500)
src/keytrans/pem2openpgp
patch
|
blob
|
history
diff --git
a/src/keytrans/pem2openpgp
b/src/keytrans/pem2openpgp
index 382e14fdb3c6b0287879b136fc1db7ddfb12161e..637eba2a225fecbc399a64e3ad6433461b63a36c 100755
(executable)
--- a/
src/keytrans/pem2openpgp
+++ b/
src/keytrans/pem2openpgp
@@
-208,6
+208,7
@@
my $subpacket_types = { sig_creation_time => 2,
issuer => 16,
notation => 20,
preferred_digest => 21,
issuer => 16,
notation => 20,
preferred_digest => 21,
+ preferred_compression => 22,
keyserver_prefs => 23,
preferred_keyserver => 24,
primary_uid => 25,
keyserver_prefs => 23,
preferred_keyserver => 24,
primary_uid => 25,
@@
-220,6
+221,14
@@
my $subpacket_types = { sig_creation_time => 2,
embedded_signature => 32,
};
embedded_signature => 32,
};
+# bitstring (see RFC 4880 section 5.2.3.24)
+my $features = { mdc => 0x01
+ };
+
+# bitstring (see RFC 4880 5.2.3.17)
+my $keyserver_prefs = { nomodify => 0x80
+ };
+
# we're just not dealing with newline business right now. slurp in
# the whole file.
undef $/;
# we're just not dealing with newline business right now. slurp in
# the whole file.
undef $/;
@@
-240,11
+249,11
@@
if (! $rsa->check_key()) {
my $version = pack('C', 4);
# strong assertion of identity:
my $version = pack('C', 4);
# strong assertion of identity:
-my $sigtype = pack('C',
0x13
);
+my $sigtype = pack('C',
$sig_types->{positive_certification}
);
# RSA
# RSA
-my $pubkey_algo = pack('C',
1
);
+my $pubkey_algo = pack('C',
$asym_algos->{rsa}
);
# SHA1
# SHA1
-my $hash_algo = pack('C',
2
);
+my $hash_algo = pack('C',
$digests->{sha1}
);
# FIXME: i'm worried about generating a bazillion new OpenPGP
# certificates from the same key, which could easily happen if you run
# FIXME: i'm worried about generating a bazillion new OpenPGP
# certificates from the same key, which could easily happen if you run
@@
-254,36
+263,51
@@
my $hash_algo = pack('C', 2);
# could an environment variable (if set) override the current time?
my $timestamp = time();
# could an environment variable (if set) override the current time?
my $timestamp = time();
-my $creation_time_packet = pack('CCN', 5,
2
, $timestamp);
+my $creation_time_packet = pack('CCN', 5,
$subpacket_types->{sig_creation_time}
, $timestamp);
# FIXME: HARDCODED: what if someone wants to select a different set of
# usage flags? For now, we do only authentication.
# FIXME: HARDCODED: what if someone wants to select a different set of
# usage flags? For now, we do only authentication.
-my $flags = $usage_flags->{authenticate};
-my $usage_packet = pack('CCC', 2, 27, $flags);
+my $usage_packet = pack('CCC', 2, $subpacket_types->{usage_flags}, $usage_flags->{authenticate});
# FIXME: HARDCODED: how should we determine how far off to set the
# expiration date? default is to expire in 2 days, which is insanely
# short (but good for testing).
my $expires_in = 86400*2;
# FIXME: HARDCODED: how should we determine how far off to set the
# expiration date? default is to expire in 2 days, which is insanely
# short (but good for testing).
my $expires_in = 86400*2;
-my $expiration_packet = pack('CCN', 5,
9
, $expires_in);
+my $expiration_packet = pack('CCN', 5,
$subpacket_types->{key_expiration_time}
, $expires_in);
# prefer AES-256, AES-192, AES-128, CAST5, 3DES:
# prefer AES-256, AES-192, AES-128, CAST5, 3DES:
-my $pref_sym_algos = pack('CCCCCCC', 6, 11, 9, 8, 7, 3, 2);
+my $pref_sym_algos = pack('CCCCCCC', 6, $subpacket_types->{preferred_cipher},
+ $ciphers->{aes256},
+ $ciphers->{aes192},
+ $ciphers->{aes128},
+ $ciphers->{cast5},
+ $ciphers->{tripledes}
+ );
# prefer SHA-1, SHA-256, RIPE-MD/160
# prefer SHA-1, SHA-256, RIPE-MD/160
-my $pref_hash_algos = pack('CCCCC', 4, 21, 2, 8, 3);
+my $pref_hash_algos = pack('CCCCC', 4, $subpacket_types->{preferred_digest},
+ $digests->{sha1},
+ $digests->{sha256},
+ $digests->{ripemd160}
+ );
# prefer ZLIB, BZip2, ZIP
# prefer ZLIB, BZip2, ZIP
-my $pref_zip_algos = pack('CCCCC', 4, 22, 2, 3, 1);
+my $pref_zip_algos = pack('CCCCC', 4, $subpacket_types->{preferred_compression},
+ $zips->{zlib},
+ $zips->{bzip2},
+ $zips->{zip}
+ );
# we support the MDC feature:
# we support the MDC feature:
-my $features = pack('CCC', 2, 30, 1);
+my $feature_subpacket = pack('CCC', 2, $subpacket_types->{features},
+ $features->{mdc});
# keyserver preference: only owner modify (???):
# keyserver preference: only owner modify (???):
-my $keyserver_pref = pack('CCC', 2, 23, 0x80);
+my $keyserver_pref = pack('CCC', 2, $subpacket_types->{keyserver_prefs},
+ $keyserver_prefs->{nomodify});
my $subpackets_to_be_hashed =
$creation_time_packet.
my $subpackets_to_be_hashed =
$creation_time_packet.
@@
-292,7
+316,7
@@
my $subpackets_to_be_hashed =
$pref_sym_algos.
$pref_hash_algos.
$pref_zip_algos.
$pref_sym_algos.
$pref_hash_algos.
$pref_zip_algos.
- $feature
s
.
+ $feature
_subpacket
.
$keyserver_pref;
my $subpacket_octets = pack('n', length($subpackets_to_be_hashed));
$keyserver_pref;
my $subpacket_octets = pack('n', length($subpackets_to_be_hashed));
@@
-307,8
+331,7
@@
my $sig_data_to_be_hashed =
my $pubkey = make_rsa_pub_key_body($rsa, $timestamp);
my $pubkey = make_rsa_pub_key_body($rsa, $timestamp);
-#open(KEYFILE, "</home/wt215/gpg-test/key-data");
-my $key_data = make_packet(6, $pubkey);
+my $key_data = make_packet($packet_types->{pubkey}, $pubkey);
# take the last 8 bytes of the fingerprint as the keyid:
my $keyid = substr(fingerprint($rsa, $timestamp), 20 - 8, 8);
# take the last 8 bytes of the fingerprint as the keyid:
my $keyid = substr(fingerprint($rsa, $timestamp), 20 - 8, 8);
@@
-332,7
+355,7
@@
my $datatosign =
my $data_hash = Digest::SHA1::sha1_hex($datatosign);
my $data_hash = Digest::SHA1::sha1_hex($datatosign);
-my $issuer_packet = pack('CCa8', 9,
16
, $keyid);
+my $issuer_packet = pack('CCa8', 9,
$subpacket_types->{issuer}
, $keyid);
my $sig = Crypt::OpenSSL::Bignum->new_from_bin($rsa->sign($datatosign));
my $sig = Crypt::OpenSSL::Bignum->new_from_bin($rsa->sign($datatosign));
@@
-344,8
+367,8
@@
my $sig_body =
mpi_pack($sig);
print
mpi_pack($sig);
print
- make_packet(
6
, $pubkey).
- make_packet(
13
, $uid).
- make_packet(
2
, $sig_body);
+ make_packet(
$packet_types->{pubkey}
, $pubkey).
+ make_packet(
$packet_types->{uid}
, $uid).
+ make_packet(
$packet_types->{sig}
, $sig_body);