1ccacbc9b0331c30b8be12e8e0349e983abf28fc0Greg Hartman/* $OpenBSD: key.h,v 1.48 2015/07/03 03:43:18 djm Exp $ */ 2bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 3bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* 4bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 5bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 6bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Redistribution and use in source and binary forms, with or without 7bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * modification, are permitted provided that the following conditions 8bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * are met: 9bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 1. Redistributions of source code must retain the above copyright 10bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * notice, this list of conditions and the following disclaimer. 11bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 2. Redistributions in binary form must reproduce the above copyright 12bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * notice, this list of conditions and the following disclaimer in the 13bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * documentation and/or other materials provided with the distribution. 14bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 15bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman */ 26bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifndef KEY_H 27bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define KEY_H 28bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 29d059297112922cabb0c674840589be8db821fd9aAdam Langley#include "sshkey.h" 30bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 31d059297112922cabb0c674840589be8db821fd9aAdam Langleytypedef struct sshkey Key; 32bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 33d059297112922cabb0c674840589be8db821fd9aAdam Langley#define types sshkey_types 34d059297112922cabb0c674840589be8db821fd9aAdam Langley#define fp_type sshkey_fp_type 35d059297112922cabb0c674840589be8db821fd9aAdam Langley#define fp_rep sshkey_fp_rep 36bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 37d059297112922cabb0c674840589be8db821fd9aAdam Langley#ifndef SSH_KEY_NO_DEFINE 38d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_new sshkey_new 39d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_free sshkey_free 40d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_equal_public sshkey_equal_public 41d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_equal sshkey_equal 42d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_type sshkey_type 43d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_cert_type sshkey_cert_type 44d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_ssh_name sshkey_ssh_name 45d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_ssh_name_plain sshkey_ssh_name_plain 46d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_type_from_name sshkey_type_from_name 47d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_ecdsa_nid_from_name sshkey_ecdsa_nid_from_name 48d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_type_is_cert sshkey_type_is_cert 49d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_size sshkey_size 50d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_ecdsa_bits_to_nid sshkey_ecdsa_bits_to_nid 51d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_ecdsa_key_to_nid sshkey_ecdsa_key_to_nid 52d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_is_cert sshkey_is_cert 53d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_type_plain sshkey_type_plain 54d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_curve_name_to_nid sshkey_curve_name_to_nid 55d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_curve_nid_to_bits sshkey_curve_nid_to_bits 56d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_curve_nid_to_name sshkey_curve_nid_to_name 57d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_ec_nid_to_hash_alg sshkey_ec_nid_to_hash_alg 58d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_dump_ec_point sshkey_dump_ec_point 59d059297112922cabb0c674840589be8db821fd9aAdam Langley#define key_dump_ec_key sshkey_dump_ec_key 60bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 61bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 62d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid key_add_private(Key *); 63d059297112922cabb0c674840589be8db821fd9aAdam LangleyKey *key_new_private(int); 64d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid key_free(Key *); 65d059297112922cabb0c674840589be8db821fd9aAdam LangleyKey *key_demote(const Key *); 66d059297112922cabb0c674840589be8db821fd9aAdam Langleyint key_write(const Key *, FILE *); 67d059297112922cabb0c674840589be8db821fd9aAdam Langleyint key_read(Key *, char **); 68bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 69bd77cf78387b72b7b3ea870459077672bf75c3b5Greg HartmanKey *key_generate(int, u_int); 70bd77cf78387b72b7b3ea870459077672bf75c3b5Greg HartmanKey *key_from_private(const Key *); 71ccacbc9b0331c30b8be12e8e0349e983abf28fc0Greg Hartmanint key_to_certified(Key *); 72bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint key_drop_cert(Key *); 73bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint key_certify(Key *, Key *); 74d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid key_cert_copy(const Key *, Key *); 75bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint key_cert_check_authority(const Key *, int, int, const char *, 76bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman const char **); 77d059297112922cabb0c674840589be8db821fd9aAdam Langleychar *key_alg_list(int, int); 78bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 79d059297112922cabb0c674840589be8db821fd9aAdam Langley#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) 80d059297112922cabb0c674840589be8db821fd9aAdam Langleyint key_ec_validate_public(const EC_GROUP *, const EC_POINT *); 81d059297112922cabb0c674840589be8db821fd9aAdam Langleyint key_ec_validate_private(const EC_KEY *); 82d059297112922cabb0c674840589be8db821fd9aAdam Langley#endif /* defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) */ 83bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 84d059297112922cabb0c674840589be8db821fd9aAdam LangleyKey *key_from_blob(const u_char *, u_int); 85d059297112922cabb0c674840589be8db821fd9aAdam Langleyint key_to_blob(const Key *, u_char **, u_int *); 86bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 87bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint key_sign(const Key *, u_char **, u_int *, const u_char *, u_int); 88bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint key_verify(const Key *, const u_char *, u_int, const u_char *, u_int); 89bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 90d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid key_private_serialize(const Key *, struct sshbuf *); 91d059297112922cabb0c674840589be8db821fd9aAdam LangleyKey *key_private_deserialize(struct sshbuf *); 92bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 93d059297112922cabb0c674840589be8db821fd9aAdam Langley/* authfile.c */ 94d059297112922cabb0c674840589be8db821fd9aAdam Langleyint key_save_private(Key *, const char *, const char *, const char *, 95d059297112922cabb0c674840589be8db821fd9aAdam Langley int, const char *, int); 96d059297112922cabb0c674840589be8db821fd9aAdam Langleyint key_load_file(int, const char *, struct sshbuf *); 97d059297112922cabb0c674840589be8db821fd9aAdam LangleyKey *key_load_cert(const char *); 98d059297112922cabb0c674840589be8db821fd9aAdam LangleyKey *key_load_public(const char *, char **); 99d059297112922cabb0c674840589be8db821fd9aAdam LangleyKey *key_load_private(const char *, const char *, char **); 100d059297112922cabb0c674840589be8db821fd9aAdam LangleyKey *key_load_private_cert(int, const char *, const char *, int *); 101d059297112922cabb0c674840589be8db821fd9aAdam LangleyKey *key_load_private_type(int, const char *, const char *, char **, int *); 102d059297112922cabb0c674840589be8db821fd9aAdam Langleyint key_perm_ok(int, const char *); 103bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 104bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 105