1*26433cb1Stb /* $OpenBSD: tls_peer.c,v 1.9 2024/12/10 08:40:30 tb Exp $ */ 2a0ec9d6bSjsing /* 3a0ec9d6bSjsing * Copyright (c) 2015 Joel Sing <jsing@openbsd.org> 40fb5de82Sbeck * Copyright (c) 2015 Bob Beck <beck@openbsd.org> 5a0ec9d6bSjsing * 6a0ec9d6bSjsing * Permission to use, copy, modify, and distribute this software for any 7a0ec9d6bSjsing * purpose with or without fee is hereby granted, provided that the above 8a0ec9d6bSjsing * copyright notice and this permission notice appear in all copies. 9a0ec9d6bSjsing * 10a0ec9d6bSjsing * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11a0ec9d6bSjsing * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12a0ec9d6bSjsing * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13a0ec9d6bSjsing * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14a0ec9d6bSjsing * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15a0ec9d6bSjsing * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16a0ec9d6bSjsing * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17a0ec9d6bSjsing */ 18a0ec9d6bSjsing 19a0ec9d6bSjsing #include <stdio.h> 20a0ec9d6bSjsing 21a0ec9d6bSjsing #include <openssl/x509.h> 22a0ec9d6bSjsing 23a0ec9d6bSjsing #include <tls.h> 24a0ec9d6bSjsing #include "tls_internal.h" 25a0ec9d6bSjsing 26ab8f2ec6Sbeck const char * 27*26433cb1Stb tls_peer_cert_common_name(struct tls *ctx) 28*26433cb1Stb { 29*26433cb1Stb if (ctx->conninfo == NULL) 30*26433cb1Stb return (NULL); 31*26433cb1Stb return (ctx->conninfo->common_name); 32*26433cb1Stb } 33*26433cb1Stb 34*26433cb1Stb const char * 35ab8f2ec6Sbeck tls_peer_cert_hash(struct tls *ctx) 36a0ec9d6bSjsing { 37b50cee5aSjsing if (ctx->conninfo == NULL) 38b50cee5aSjsing return (NULL); 39ab8f2ec6Sbeck return (ctx->conninfo->hash); 40a0ec9d6bSjsing } 41ab8f2ec6Sbeck const char * 42ab8f2ec6Sbeck tls_peer_cert_issuer(struct tls *ctx) 43a0ec9d6bSjsing { 44b50cee5aSjsing if (ctx->conninfo == NULL) 45b50cee5aSjsing return (NULL); 46ab8f2ec6Sbeck return (ctx->conninfo->issuer); 47a0ec9d6bSjsing } 48a0ec9d6bSjsing 49ab8f2ec6Sbeck const char * 50ab8f2ec6Sbeck tls_peer_cert_subject(struct tls *ctx) 51ab8f2ec6Sbeck { 52b50cee5aSjsing if (ctx->conninfo == NULL) 53b50cee5aSjsing return (NULL); 54ab8f2ec6Sbeck return (ctx->conninfo->subject); 55a0ec9d6bSjsing } 560fb5de82Sbeck 570fb5de82Sbeck int 580fb5de82Sbeck tls_peer_cert_provided(struct tls *ctx) 590fb5de82Sbeck { 600fb5de82Sbeck return (ctx->ssl_peer_cert != NULL); 610fb5de82Sbeck } 620fb5de82Sbeck 630fb5de82Sbeck int 640fb5de82Sbeck tls_peer_cert_contains_name(struct tls *ctx, const char *name) 650fb5de82Sbeck { 665f3c5205Sjsing int match; 675f3c5205Sjsing 680fb5de82Sbeck if (ctx->ssl_peer_cert == NULL) 690fb5de82Sbeck return (0); 700fb5de82Sbeck 715f3c5205Sjsing if (tls_check_name(ctx, ctx->ssl_peer_cert, name, &match) == -1) 725f3c5205Sjsing return (0); 735f3c5205Sjsing 745f3c5205Sjsing return (match); 750fb5de82Sbeck } 760fb5de82Sbeck 77f00a4e85Sbeck time_t 78f00a4e85Sbeck tls_peer_cert_notbefore(struct tls *ctx) 79f00a4e85Sbeck { 80f00a4e85Sbeck if (ctx->ssl_peer_cert == NULL) 81f00a4e85Sbeck return (-1); 82f00a4e85Sbeck if (ctx->conninfo == NULL) 83f00a4e85Sbeck return (-1); 84f00a4e85Sbeck return (ctx->conninfo->notbefore); 85f00a4e85Sbeck } 86f00a4e85Sbeck 87f00a4e85Sbeck time_t 88f00a4e85Sbeck tls_peer_cert_notafter(struct tls *ctx) 89f00a4e85Sbeck { 90f00a4e85Sbeck if (ctx->ssl_peer_cert == NULL) 91f00a4e85Sbeck return (-1); 92f00a4e85Sbeck if (ctx->conninfo == NULL) 93f00a4e85Sbeck return (-1); 94f00a4e85Sbeck return (ctx->conninfo->notafter); 95f00a4e85Sbeck } 96f00a4e85Sbeck 97c67861f7Sbeck const uint8_t * 98c67861f7Sbeck tls_peer_cert_chain_pem(struct tls *ctx, size_t *size) 99c67861f7Sbeck { 100c67861f7Sbeck if (ctx->ssl_peer_cert == NULL) 101c67861f7Sbeck return (NULL); 102c67861f7Sbeck if (ctx->conninfo == NULL) 103c67861f7Sbeck return (NULL); 104c67861f7Sbeck *size = ctx->conninfo->peer_cert_len; 105c67861f7Sbeck return (ctx->conninfo->peer_cert); 106c67861f7Sbeck } 107c67861f7Sbeck 108