diff options
| author | Rene Mayrhofer <rene@mayrhofer.eu.org> | 2008-10-29 20:30:44 +0000 | 
|---|---|---|
| committer | Rene Mayrhofer <rene@mayrhofer.eu.org> | 2008-10-29 20:30:44 +0000 | 
| commit | 74f0bbfc53cb5fa519e4e27ece53735ab51b397c (patch) | |
| tree | 0dbab9c835be15577ff05b474b6361bb326d66ce /scripts/keyid2sql.c | |
| parent | 5c1fa2516bda1ccf8eb00178c0beb196c2020a94 (diff) | |
| download | vyos-strongswan-74f0bbfc53cb5fa519e4e27ece53735ab51b397c.tar.gz vyos-strongswan-74f0bbfc53cb5fa519e4e27ece53735ab51b397c.zip  | |
- New upstream release.
Diffstat (limited to 'scripts/keyid2sql.c')
| -rw-r--r-- | scripts/keyid2sql.c | 76 | 
1 files changed, 76 insertions, 0 deletions
diff --git a/scripts/keyid2sql.c b/scripts/keyid2sql.c new file mode 100644 index 000000000..f7d447a78 --- /dev/null +++ b/scripts/keyid2sql.c @@ -0,0 +1,76 @@ + +#include <stdio.h> +#include <library.h> +#include <debug.h> + +/** + * print the keyids of a private or public key in sql format + */ +int main(int argc, char *argv[]) +{ +	public_key_t *public; +	private_key_t *private; +	identification_t *keyid; +	chunk_t chunk; +	char buf[8096]; +	int read, n; +	 +	library_init(NULL); +	lib->plugins->load(lib->plugins, IPSEC_PLUGINDIR, "gmp pubkey sha1"); +	atexit(library_deinit); + +	read = fread(buf, 1, sizeof(buf), stdin); +	if (read <= 0) +	{ +		fprintf(stderr, "reading key failed.\n"); +		return -1; +	} +	 +	chunk = chunk_create(buf, read); +	 +	private = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_RSA, +								 BUILD_BLOB_ASN1_DER, chunk_clone(chunk), +								 BUILD_END); +	if (private) +	{ +		keyid = private->get_id(private, ID_PUBKEY_INFO_SHA1); +		chunk = keyid->get_encoding(keyid); + +		printf("%d, X'", ID_PUBKEY_INFO_SHA1); +		for (n = 0; n < chunk.len; n++) +		{ +			printf("%.2x", chunk.ptr[n]); +		} +		printf("'\n"); +		private->destroy(private); +		return 0; +	} +	 +	public = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_ANY, +								BUILD_BLOB_ASN1_DER, chunk_clone(chunk), +								BUILD_END); +	if (!public) +	{ +		public = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_RSA, +									BUILD_BLOB_ASN1_DER, chunk_clone(chunk), +									BUILD_END); +	} +	if (public) +	{ +		keyid = public->get_id(public, ID_PUBKEY_INFO_SHA1); +		chunk = keyid->get_encoding(keyid); + +		printf("%d, X'", ID_PUBKEY_INFO_SHA1); +		for (n = 0; n < chunk.len; n++) +		{ +			printf("%.2x", chunk.ptr[n]); +		} +		printf("'\n"); +		public->destroy(public); +		return 0; +	} +	 +	fprintf(stderr, "unable to parse input key.\n"); +	return -1; +} +  | 
