sshkey: Add support to parse SSH public keys from files with left|rightsigkey
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2013 Tobias Brunner
|
* Copyright (C) 2013-2014 Tobias Brunner
|
||||||
* Hochschule fuer Technik Rapperswil
|
* Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
@@ -235,3 +235,46 @@ sshkey_public_key_t *sshkey_public_key_load(key_type_t type, va_list args)
|
|||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See header.
|
||||||
|
*/
|
||||||
|
certificate_t *sshkey_certificate_load(certificate_type_t type, va_list args)
|
||||||
|
{
|
||||||
|
certificate_t *cert;
|
||||||
|
public_key_t *key;
|
||||||
|
identification_t *subject = NULL;
|
||||||
|
char *file = NULL;
|
||||||
|
|
||||||
|
while (TRUE)
|
||||||
|
{
|
||||||
|
switch (va_arg(args, builder_part_t))
|
||||||
|
{
|
||||||
|
case BUILD_FROM_FILE:
|
||||||
|
file = va_arg(args, char*);
|
||||||
|
continue;
|
||||||
|
case BUILD_SUBJECT:
|
||||||
|
subject = va_arg(args, identification_t*);
|
||||||
|
continue;
|
||||||
|
case BUILD_END:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!file || !subject)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
key = (public_key_t*)load_from_file(file);
|
||||||
|
if (!key)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
cert = lib->creds->create(lib->creds, CRED_CERTIFICATE,
|
||||||
|
CERT_TRUSTED_PUBKEY, BUILD_PUBLIC_KEY, key,
|
||||||
|
BUILD_SUBJECT, subject, BUILD_END);
|
||||||
|
key->destroy(key);
|
||||||
|
return cert;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2013 Tobias Brunner
|
* Copyright (C) 2013-2014 Tobias Brunner
|
||||||
* Hochschule fuer Technik Rapperswil
|
* Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
@@ -48,4 +48,15 @@ struct sshkey_public_key_t {
|
|||||||
*/
|
*/
|
||||||
sshkey_public_key_t *sshkey_public_key_load(key_type_t type, va_list args);
|
sshkey_public_key_t *sshkey_public_key_load(key_type_t type, va_list args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load a public key in RFC 4253 format as certificate.
|
||||||
|
*
|
||||||
|
* Takes a BUILD_FROM_FILE and BUILD_SUBJECT argument.
|
||||||
|
*
|
||||||
|
* @param type type of the certificate, must be CERT_TRUSTED_PUBKEY
|
||||||
|
* @param args builder_part_t argument list
|
||||||
|
* @return built certificate, NULL on failure
|
||||||
|
*/
|
||||||
|
certificate_t *sshkey_certificate_load(certificate_type_t type, va_list args);
|
||||||
|
|
||||||
#endif /** SSHKEY_BUILDER_H_ @}*/
|
#endif /** SSHKEY_BUILDER_H_ @}*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2013 Tobias Brunner
|
* Copyright (C) 2013-2014 Tobias Brunner
|
||||||
* Hochschule fuer Technik Rapperswil
|
* Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
@@ -44,6 +44,8 @@ METHOD(plugin_t, get_features, int,
|
|||||||
static plugin_feature_t f[] = {
|
static plugin_feature_t f[] = {
|
||||||
PLUGIN_REGISTER(PUBKEY, sshkey_public_key_load, FALSE),
|
PLUGIN_REGISTER(PUBKEY, sshkey_public_key_load, FALSE),
|
||||||
PLUGIN_PROVIDE(PUBKEY, KEY_ANY),
|
PLUGIN_PROVIDE(PUBKEY, KEY_ANY),
|
||||||
|
PLUGIN_REGISTER(CERT_DECODE, sshkey_certificate_load, FALSE),
|
||||||
|
PLUGIN_PROVIDE(CERT_DECODE, CERT_TRUSTED_PUBKEY),
|
||||||
};
|
};
|
||||||
*features = f;
|
*features = f;
|
||||||
return countof(f);
|
return countof(f);
|
||||||
|
|||||||
Reference in New Issue
Block a user